嵌入式程序设计-打地鼠游戏设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 2:
m_score=scorce;
UpdateData(FALSE);
break;
case 3:
_time++;
char temp[10];
CString time;
int second=_time%60;
int minut=_time/60%60;
int hour=_time/3600%24;
CDC *pDC=new CClientDC(this);
CPen pen;//画笔
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
CPen *poldpen=pDC->SelectObject(&pen);
pDC->Rectangle(40,40,280,280);
pDC->SelectObject(poldpen);
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=new TS;
{
// TODO: Add your message handler code here and/or call default
if(!start)
return;
chilkTrue(point.x,point.y);
CDialog::OnLButtonDown(nFlags, point);
}
//
void CDadishuDlg::OnTimer(UINT nIDEvent)
_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);
void CDadishuDlg::OnLButtonDown(UINT nFlags, CPoint point)
消息处理函数,鼠标左键点击触发,主要用来打击地鼠。
void CDadishuDlg::OnPaint()
重绘函数,实现地图区域的绘制
游戏界面部分相关代码:
OOL CDadishuDlg::OnInitDialog()
SetIcon(m_hIcon, FALSE);// Set small icon
CenterWindow(GetDesktopWindow());// center to the hpc screen
// TODO: Add extra initialization here
HWND hwndCB;
{
// TODO: Add your command handler code here
InitData();
}
//
void CDadishuDlg::OnMENUITEMSeachRecord()
{
// TODO: Add your command handler code here
SerachRecord *sr=new SerachRecord;
//new出来的一般都需要delete来回收内存。
delete pDC;
// Do not call CDialog::OnPaint() for painting messages
}
//鼠标点击事件
void CDadishuDlg::OnLButtonDown(UINT nFlags, CPoint point)
if(second>9)
time=time+":"+temp;
else
time=time+":0"+temp;
m_time=time;
UpdateData(FALSE);
break;
}
CDialog::OnTimer(nIDEvent);
}
//初始化数据
void CDadishuDlg::InitData()
void WriteScoreFile();//将玩家的游戏分数写到文件中
void SortList();//对玩家分数排序
void InitData();//初始化数据
void EndGame();//游戏结束
void clearPicture();//还原背景图
void drawPicture(int bmpNum);//画图
}
//还原背景图
void CDadishuDlg::clearPicture()
{
PDC = GetDC();
CDC bmpDC;
bmpDC.CreateCompatibleDC(PDC);
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP3);
BITMAP bm;
bmp.GetBitmap(&bm);
}
}while(aa==sizeof(us));
UserListLength=i;
CloseHandle(hFile);
}
//写到文件里
void TS::WriteScoreFile()
{
CString filename="\\scores.dat";
int i;
//文件句柄
HANDLE hFile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
bmp.GetBitmap(&bm);
bmpDC.SelectObject(bmp);
int px=40+randx*80+1;
int py=40+randy*80+1;
PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);
ts->m_Value=scorce;
ts->DoModal();
}
}
//
void CDadishuDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
void TS::ReadScoreFile()
{
CString filename="\\scores.dat";
HANDLE hFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
3.
玩家触发游戏后,地鼠会随机出现在地图上,玩家通过鼠标击打地鼠,地鼠每隔一段时间机会随机出现在地图某一块,若玩家反映不及没有触发鼠标事件,地鼠随机出现别的地方玩家分数不变;若已触发鼠标事件且没有击中地鼠,玩家分数减少;击中则分数增加。
系统流程图:(主要部分的流程图)
4.
4.1
本系统设计了三个界面,一个是游戏运行界面,一个是成绩保存,一个历史最高纪录显示界面(玩家成绩)。
{
Total=10;
start=true;
SetTimer(1,timer,NULL);
scorce=0;
SetTimer(2,100,NULL);
_time=0;
SetTimer(3,1000,NULL);
}
//
void CDadishuDlg::EndGame()
{
KillTimer(1);
KillTimer(2);
{
PDC = GetDC();
CDC bmpDC;
bmpDC.CreateCompatibleDC(PDC);
CBitmap bmp;
if(bmpNum==1)
bmp.LoadBitmap(IDB_BITMAP1);
else
bmp.LoadBitmap(IDB_BITMAP2);
BITMAP bm;
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
clearPicture();
randx=rand()%3;
randy=rand()%3;
drawPicture(1);
break;
void chilkTrue(int x,int y);//判定是否击中
BOOLCDadishuDlg::OnInitDialog()
游戏初始化函数。
void CMengSnakeDlg::OnTimer(UINT nIDEvent)
计时器函数,自动根据时间变量来执行程序,随机为地鼠生成一个坐标,并绘制到地图上。
hwndCB = CommandBar_Create(AfxGetInstanceHandle(), GetSafeHwnd(),0);
CommandBar_InsertMenubar(hwndCB, AfxGetInstanceHandle(), IDR_MENU1, 0);
return TRUE; // return TRUE unless you set the focus to a control
打地鼠是一款常见的小游戏,简单有趣,深受人们的喜爱,本项目作为基于嵌入式WinCE课程设计和简单游戏编程而提出。希望通过开发《打地鼠》游戏,了解并掌握WinCE软件开发工具的使用,同时提高嵌入式设计的能力。
2
基本功能:地鼠随机出现在地图上,跟据鼠标点击事件捕获鼠标指针所在区域是否出现地鼠来判断玩家是否击中地鼠,玩家有10次失误机会。
KillTimer(3);
start=false;
}
//重新开始
void CDadishuDlg::OnMENUITEMRestart()
{
// TODO: Add your command handler code here
EndGame();
InitData();
}
//开始游戏
void CDadishuDlg::OnMENUITEMStart()
4.2
int scorce;//得分
int randx=0,randy=0;//随机得到的地鼠坐标
int Total=10;//若有Total次击不中则游戏结束
typedef struct{
TCHAR name[20];//姓名
int score;//成绩
}User;
4.3
void ReadScoreFile();//读取历史分数记录
bmpDC.SelectObject(bmp);
int px=40+randx*80+1;
int py=40+randy*80+1;
PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);
}
//画图
void CDadishuDlg::drawPicture(int bmpNum)
sr->DoModal();
}
保存记录的相关代码:
User list[11];
int UserListLength=0;
/////////////////////////////////////////////////////////////////////////////
// TS message handlers
}
//判定是否击中
void CDadishuDlg::chilkTrue(int x,int y)
{
int px_min=40+randx*80;
int px_max=40+(randx+1)*80;
int py_min=40+randy*80;
int py_max=40+(randy+1)*80;
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
UHale Waihona Puke er us;DWORD aa;
int i=0;
do{
ZeroMemory(&us,sizeof(us));
if(ReadFile(hFile,&us,sizeof(us),&aa,NULL))
{
if(aa!=0)
list[i++]=us;
m_score=scorce;
UpdateData(FALSE);
break;
case 3:
_time++;
char temp[10];
CString time;
int second=_time%60;
int minut=_time/60%60;
int hour=_time/3600%24;
CDC *pDC=new CClientDC(this);
CPen pen;//画笔
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
CPen *poldpen=pDC->SelectObject(&pen);
pDC->Rectangle(40,40,280,280);
pDC->SelectObject(poldpen);
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=new TS;
{
// TODO: Add your message handler code here and/or call default
if(!start)
return;
chilkTrue(point.x,point.y);
CDialog::OnLButtonDown(nFlags, point);
}
//
void CDadishuDlg::OnTimer(UINT nIDEvent)
_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);
void CDadishuDlg::OnLButtonDown(UINT nFlags, CPoint point)
消息处理函数,鼠标左键点击触发,主要用来打击地鼠。
void CDadishuDlg::OnPaint()
重绘函数,实现地图区域的绘制
游戏界面部分相关代码:
OOL CDadishuDlg::OnInitDialog()
SetIcon(m_hIcon, FALSE);// Set small icon
CenterWindow(GetDesktopWindow());// center to the hpc screen
// TODO: Add extra initialization here
HWND hwndCB;
{
// TODO: Add your command handler code here
InitData();
}
//
void CDadishuDlg::OnMENUITEMSeachRecord()
{
// TODO: Add your command handler code here
SerachRecord *sr=new SerachRecord;
//new出来的一般都需要delete来回收内存。
delete pDC;
// Do not call CDialog::OnPaint() for painting messages
}
//鼠标点击事件
void CDadishuDlg::OnLButtonDown(UINT nFlags, CPoint point)
if(second>9)
time=time+":"+temp;
else
time=time+":0"+temp;
m_time=time;
UpdateData(FALSE);
break;
}
CDialog::OnTimer(nIDEvent);
}
//初始化数据
void CDadishuDlg::InitData()
void WriteScoreFile();//将玩家的游戏分数写到文件中
void SortList();//对玩家分数排序
void InitData();//初始化数据
void EndGame();//游戏结束
void clearPicture();//还原背景图
void drawPicture(int bmpNum);//画图
}
//还原背景图
void CDadishuDlg::clearPicture()
{
PDC = GetDC();
CDC bmpDC;
bmpDC.CreateCompatibleDC(PDC);
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP3);
BITMAP bm;
bmp.GetBitmap(&bm);
}
}while(aa==sizeof(us));
UserListLength=i;
CloseHandle(hFile);
}
//写到文件里
void TS::WriteScoreFile()
{
CString filename="\\scores.dat";
int i;
//文件句柄
HANDLE hFile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
bmp.GetBitmap(&bm);
bmpDC.SelectObject(bmp);
int px=40+randx*80+1;
int py=40+randy*80+1;
PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);
ts->m_Value=scorce;
ts->DoModal();
}
}
//
void CDadishuDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
void TS::ReadScoreFile()
{
CString filename="\\scores.dat";
HANDLE hFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
3.
玩家触发游戏后,地鼠会随机出现在地图上,玩家通过鼠标击打地鼠,地鼠每隔一段时间机会随机出现在地图某一块,若玩家反映不及没有触发鼠标事件,地鼠随机出现别的地方玩家分数不变;若已触发鼠标事件且没有击中地鼠,玩家分数减少;击中则分数增加。
系统流程图:(主要部分的流程图)
4.
4.1
本系统设计了三个界面,一个是游戏运行界面,一个是成绩保存,一个历史最高纪录显示界面(玩家成绩)。
{
Total=10;
start=true;
SetTimer(1,timer,NULL);
scorce=0;
SetTimer(2,100,NULL);
_time=0;
SetTimer(3,1000,NULL);
}
//
void CDadishuDlg::EndGame()
{
KillTimer(1);
KillTimer(2);
{
PDC = GetDC();
CDC bmpDC;
bmpDC.CreateCompatibleDC(PDC);
CBitmap bmp;
if(bmpNum==1)
bmp.LoadBitmap(IDB_BITMAP1);
else
bmp.LoadBitmap(IDB_BITMAP2);
BITMAP bm;
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
clearPicture();
randx=rand()%3;
randy=rand()%3;
drawPicture(1);
break;
void chilkTrue(int x,int y);//判定是否击中
BOOLCDadishuDlg::OnInitDialog()
游戏初始化函数。
void CMengSnakeDlg::OnTimer(UINT nIDEvent)
计时器函数,自动根据时间变量来执行程序,随机为地鼠生成一个坐标,并绘制到地图上。
hwndCB = CommandBar_Create(AfxGetInstanceHandle(), GetSafeHwnd(),0);
CommandBar_InsertMenubar(hwndCB, AfxGetInstanceHandle(), IDR_MENU1, 0);
return TRUE; // return TRUE unless you set the focus to a control
打地鼠是一款常见的小游戏,简单有趣,深受人们的喜爱,本项目作为基于嵌入式WinCE课程设计和简单游戏编程而提出。希望通过开发《打地鼠》游戏,了解并掌握WinCE软件开发工具的使用,同时提高嵌入式设计的能力。
2
基本功能:地鼠随机出现在地图上,跟据鼠标点击事件捕获鼠标指针所在区域是否出现地鼠来判断玩家是否击中地鼠,玩家有10次失误机会。
KillTimer(3);
start=false;
}
//重新开始
void CDadishuDlg::OnMENUITEMRestart()
{
// TODO: Add your command handler code here
EndGame();
InitData();
}
//开始游戏
void CDadishuDlg::OnMENUITEMStart()
4.2
int scorce;//得分
int randx=0,randy=0;//随机得到的地鼠坐标
int Total=10;//若有Total次击不中则游戏结束
typedef struct{
TCHAR name[20];//姓名
int score;//成绩
}User;
4.3
void ReadScoreFile();//读取历史分数记录
bmpDC.SelectObject(bmp);
int px=40+randx*80+1;
int py=40+randy*80+1;
PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);
}
//画图
void CDadishuDlg::drawPicture(int bmpNum)
sr->DoModal();
}
保存记录的相关代码:
User list[11];
int UserListLength=0;
/////////////////////////////////////////////////////////////////////////////
// TS message handlers
}
//判定是否击中
void CDadishuDlg::chilkTrue(int x,int y)
{
int px_min=40+randx*80;
int px_max=40+(randx+1)*80;
int py_min=40+randy*80;
int py_max=40+(randy+1)*80;
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
UHale Waihona Puke er us;DWORD aa;
int i=0;
do{
ZeroMemory(&us,sizeof(us));
if(ReadFile(hFile,&us,sizeof(us),&aa,NULL))
{
if(aa!=0)
list[i++]=us;