嵌入式程序设计打地鼠游戏设计.docx

上传人:b****5 文档编号:7503777 上传时间:2023-05-11 格式:DOCX 页数:17 大小:111.47KB
下载 相关 举报
嵌入式程序设计打地鼠游戏设计.docx_第1页
第1页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第2页
第2页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第3页
第3页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第4页
第4页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第5页
第5页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第6页
第6页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第7页
第7页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第8页
第8页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第9页
第9页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第10页
第10页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第11页
第11页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第12页
第12页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第13页
第13页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第14页
第14页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第15页
第15页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第16页
第16页 / 共17页
嵌入式程序设计打地鼠游戏设计.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式程序设计打地鼠游戏设计.docx

《嵌入式程序设计打地鼠游戏设计.docx》由会员分享,可在线阅读,更多相关《嵌入式程序设计打地鼠游戏设计.docx(17页珍藏版)》请在冰点文库上搜索。

嵌入式程序设计打地鼠游戏设计.docx

嵌入式程序设计打地鼠游戏设计

 

2021年4月29日

1开发背景

打地鼠是一款常见的小游戏,简单有趣,深受人们的喜爱,本项目作为基于嵌入式WinCE课程设计和简单游戏编程而提出。

希望通过开发《打地鼠》游戏,了解并掌握WinCE软件开发工具的使用,同时提高嵌入式设计的能力。

2功能描述

基本功能:

地鼠随机出现在地图上,跟据鼠标点击事件捕获鼠标指针所在区域是否出现地鼠来判断玩家是否击中地鼠,玩家有10次失误机会。

3.基本原理

玩家触发游戏后,地鼠会随机出现在地图上,玩家通过鼠标击打地鼠,地鼠每隔一段时间机会随机出现在地图某一块,若玩家反映不及没有触发鼠标事件,地鼠随机出现别的地方玩家分数不变;若已触发鼠标事件且没有击中地鼠,玩家分数减少;击中则分数增加。

系统流程图:

(主要部分的流程图)

4.系统总体设计

4.1界面设计

本系统设计了三个界面,一个是游戏运行界面,一个是成绩保存,一个历史最高纪录显示界面(玩家成绩)。

4.2相关变量定义

intscorce;//得分

intrandx=0,randy=0;//随机得到的地鼠坐标

intTotal=10;//若有Total次击不中则游戏结束

typedefstruct{

TCHARname[20];//姓名

intscore;//成绩

}User;

4.3内部类定义及方法说明

voidReadScoreFile();//读取历史分数记录

voidWriteScoreFile();//将玩家的游戏分数写到文件中

voidSortList();//对玩家分数排序

voidInitData();//初始化数据

voidEndGame();//游戏结束

voidclearPicture();//还原背景图

voiddrawPicture(intbmpNum);//画图

voidchilkTrue(intx,inty);//判定是否击中

BOOLCDadishuDlg:

:

OnInitDialog()

游戏初始化函数。

voidCMengSnakeDlg:

:

OnTimer(UINTnIDEvent)

计时器函数,自动根据时间变量来执行程序,随机为地鼠生成一个坐标,并绘制到地图上。

voidCDadishuDlg:

:

OnLButtonDown(UINTnFlags,CPointpoint)

消息处理函数,鼠标左键点击触发,主要用来打击地鼠。

voidCDadishuDlg:

:

OnPaint()

重绘函数,实现地图区域的绘制

游戏界面部分相关代码:

OOLCDadishuDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

CenterWindow(GetDesktopWindow());//centertothehpcscreen

//TODO:

Addextrainitializationhere

HWNDhwndCB;

hwndCB=CommandBar_Create(AfxGetInstanceHandle(),GetSafeHwnd(),0);

CommandBar_InsertMenubar(hwndCB,AfxGetInstanceHandle(),IDR_MENU1,0);

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

//还原背景图

voidCDadishuDlg:

:

clearPicture()

{

PDC=GetDC();

CDCbmpDC;

bmpDC.CreateCompatibleDC(PDC);

CBitmapbmp;

bmp.LoadBitmap(IDB_BITMAP3);

BITMAPbm;

bmp.GetBitmap(&bm);

bmpDC.SelectObject(bmp);

intpx=40+randx*80+1;

intpy=40+randy*80+1;

PDC->StretchBlt(px,py,78,78,&bmpDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

}

//画图

voidCDadishuDlg:

:

drawPicture(intbmpNum)

{

PDC=GetDC();

CDCbmpDC;

bmpDC.CreateCompatibleDC(PDC);

CBitmapbmp;

if(bmpNum==1)

bmp.LoadBitmap(IDB_BITMAP1);

else

bmp.LoadBitmap(IDB_BITMAP2);

BITMAPbm;

bmp.GetBitmap(&bm);

bmpDC.SelectObject(bmp);

intpx=40+randx*80+1;

intpy=40+randy*80+1;

PDC->StretchBlt(px,py,78,78,&bmpDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

}

//判定是否击中

voidCDadishuDlg:

:

chilkTrue(intx,inty)

{

intpx_min=40+randx*80;

intpx_max=40+(randx+1)*80;

intpy_min=40+randy*80;

intpy_max=40+(randy+1)*80;

if(x>=px_min&&x<=px_max&&y>=py_min&&y<=py_max){

scorce+=10;

drawPicture

(2);

}

else{

Total--;

scorce-=10;

clearPicture();

}

if(Total==0)

{

EndGame();

TS*ts=newTS;

ts->m_Value=scorce;

ts->DoModal();

}

}

//

voidCDadishuDlg:

:

OnPaint()

{

CPaintDCdc(this);//devicecontextforpainting

//TODO:

Addyourmessagehandlercodehere

CDC*pDC=newCClientDC(this);

CPenpen;//画笔

pen.CreatePen(PS_SOLID,1,RGB(0,0,0));

CPen*poldpen=pDC->SelectObject(&pen);

pDC->Rectangle(40,40,280,280);

pDC->SelectObject(poldpen);

//new出来的一般都需要delete来回收内存。

deletepDC;

//DonotcallCDialog:

:

OnPaint()forpaintingmessages

}

//鼠标点击事件

voidCDadishuDlg:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

if(!

start)

return;

chilkTrue(point.x,point.y);

CDialog:

:

OnLButtonDown(nFlags,point);

}

//

voidCDadishuDlg:

:

OnTimer(UINTnIDEvent)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

switch(nIDEvent)

{

case1:

clearPicture();

randx=rand()%3;

randy=rand()%3;

drawPicture

(1);

break;

case2:

m_score=scorce;

UpdateData(FALSE);

break;

case3:

_time++;

chartemp[10];

CStringtime;

intsecond=_time%60;

intminut=_time/60%60;

inthour=_time/3600%24;

_itoa(hour,temp,10);

if(hour>9)

time+=temp;

else

time=time+"0"+temp;

_itoa(minut,temp,10);

if(minut>9)

time=time+":

"+temp;

else

time=time+":

0"+temp;

_itoa(second,temp,10);

if(second>9)

time=time+":

"+temp;

else

time=time+":

0"+temp;

m_time=time;

UpdateData(FALSE);

break;

}

CDialog:

:

OnTimer(nIDEvent);

}

//初始化数据

voidCDadishuDlg:

:

InitData()

{

Total=10;

start=true;

SetTimer(1,timer,NULL);

scorce=0;

SetTimer(2,100,NULL);

_time=0;

SetTimer(3,1000,NULL);

}

//

voidCDadishuDlg:

:

EndGame()

{

KillTimer

(1);

KillTimer

(2);

KillTimer(3);

start=false;

}

//重新开始

voidCDadishuDlg:

:

OnMENUITEMRestart()

{

//TODO:

Addyourcommandhandlercodehere

EndGame();

InitData();

}

//开始游戏

voidCDadishuDlg:

:

OnMENUITEMStart()

{

//TODO:

Addyourcommandhandlercodehere

InitData();

}

//

voidCDadishuDlg:

:

OnMENUITEMSeachRecord()

{

//TODO:

Addyourcommandhandlercodehere

SerachRecord*sr=newSerachRecord;

sr->DoModal();

}

保存记录的相关代码:

Userlist[11];

intUserListLength=0;

/////////////////////////////////////////////////////////////////////////////

//TSmessagehandlers

voidTS:

:

ReadScoreFile()

{

CStringfilename="\\scores.dat";

HANDLEhFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

SetFilePointer(hFile,0,NULL,FILE_BEGIN);

Userus;

DWORDaa;

inti=0;

do{

ZeroMemory(&us,sizeof(us));

if(ReadFile(hFile,&us,sizeof(us),&aa,NULL))

{

if(aa!

=0)

list[i++]=us;

}

}while(aa==sizeof(us));

UserListLength=i;

CloseHandle(hFile);

}

//写到文件里

voidTS:

:

WriteScoreFile()

{

CStringfilename="\\scores.dat";

inti;

//文件句柄

HANDLEhFile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

//设置文件开始处

SetFilePointer(hFile,0,NULL,FILE_BEGIN);

DWORDaa;

//将数据写到文件

for(i=0;i

{

WriteFile(hFile,&list[i],sizeof(list[i]),&aa,NULL);

}

CloseHandle(hFile);

}

//安分数从大到小排序

voidTS:

:

SortList()

{

inti,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

if(list[j].score>list[k].score)

k=j;

if(k!

=i)

{

Usertemp=list[k];

list[k]=list[i];

list[i]=temp;

}

}

}

voidTS:

:

OnOK()

{

//TODO:

Addextravalidationhere

//TODO:

Addextravalidationhere

UpdateData(TRUE);

ReadScoreFile();

inti=0;

Userus;

ZeroMemory(&us,sizeof(us));

//将值更新到变量

UpdateData(TRUE);

wcscpy(us.name,m_UserName);

us.score=m_Value;

list[UserListLength]=us;

UserListLength++;

SortList();

for(i=0;i

{

if(list[i].name==us.name&&list[i].score==us.score&&i>=10)

{

AfxMessageBox(_T("对不起你的名次最低,没有突破前10名"));

return;

}

}

WriteScoreFile();

CDialog:

:

OnOK();

}

查看记录相关代码

voidSerachRecord:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(SerachRecord)

DDX_Control(pDX,IDC_LIST1,m_list);

CRectrt;

m_list.GetClientRect(&rt);

m_list.InsertColumn(0,_T("名次"),LVCFMT_LEFT,(int)(rt.Width()*0.35));

m_list.InsertColumn(1,_T("得分"),LVCFMT_LEFT,(int)(rt.Width()*0.35));

m_list.InsertColumn(2,_T("姓名"),LVCFMT_LEFT,(int)(rt.Width()*0.3));

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(SerachRecord,CDialog)

//{{AFX_MSG_MAP(SerachRecord)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//SerachRecordmessagehandlers

voidSerachRecord:

:

OnOK()

{

//TODO:

Addextravalidationhere

m_list.DeleteAllItems();

CStringfilename="\\scores.dat";

HANDLEhFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

SetFilePointer(hFile,0,NULL,FILE_BEGIN);

Userus;

UserusList[10];

DWORDaa;

inti=0;

do{

ZeroMemory(&us,sizeof(us));

if(ReadFile(hFile,&us,sizeof(us),&aa,NULL))

{

if(aa!

=0)

{

usList[i++]=us;

}

}

}while(aa==sizeof(us));

for(intj=i-1;j>=0;j--)

{

m_list.InsertItem(0,_T("test"));

chartemp[10];

_itoa(j+1,temp,10);

CStringnum=temp;

m_list.SetItemText(0,0,num);

m_list.SetItemText(0,2,usList[j].name);

_itoa(usList[j].score,temp,10);

CStringsc=temp;

m_list.SetItemText(0,1,sc);

}

CloseHandle(hFile);

//CDialog:

:

OnOK();

}

5系统测试

5.1运行界面

1游戏开始界面

2.中间游戏进行界面

3.游戏结束界面

4.刷新显示记录:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2