贪吃蛇游戏程序代码.docx

上传人:b****4 文档编号:1215624 上传时间:2022-10-19 格式:DOCX 页数:10 大小:93.37KB
下载 相关 举报
贪吃蛇游戏程序代码.docx_第1页
第1页 / 共10页
贪吃蛇游戏程序代码.docx_第2页
第2页 / 共10页
贪吃蛇游戏程序代码.docx_第3页
第3页 / 共10页
贪吃蛇游戏程序代码.docx_第4页
第4页 / 共10页
贪吃蛇游戏程序代码.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

贪吃蛇游戏程序代码.docx

《贪吃蛇游戏程序代码.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏程序代码.docx(10页珍藏版)》请在冰豆网上搜索。

贪吃蛇游戏程序代码.docx

贪吃蛇游戏程序代码

“贪吃蛇”游戏程序代码

   afx_msgvoidOnExit();//退出游戏

   CFontm_font;//这就是上图中显示“空心字体”的字体设置voidShowHollowFont(intcx,intcy,CStringstr);//显示空心字体函数,在(Cx,Cy)处显示字符串str

   afx_msgvoidOnBnClickedExit();//退出游戏

   private:

   intm_icon1;//表明蛇吃第1种水果的个数

   intm_icon2;//表明蛇吃第2种水果的个数

   intm_icon3;//表明蛇吃第3种水果的个数

然后给读者写的是我程序运行很重要的一个函数,WM_TIMER显示函数,里面有食物位置随机出现,判断蛇死,蛇移动等:

   voidCSnakeDlg:

:

OnTimer(UINT_PTRnIDEvent)

   {

   if(game.m_snakePoint[0].x<0||game.m_snakePoint[0].y700||game.m_snakePoint[0].y>500)//当蛇跑出边界,游戏结束

   {

   GameOver();

   }

   for(intj=game.m_snakeNum-1;j>0;--j)//蛇移动的量的变化,当重新设定这些控件的位置时也就是让蛇移动起来game.m_snakePoint[j]=game.m_snakePoint[j-1];

   game.m_snakePoint[0].x+=game.m_direction.x*LENGTH*2;//蛇头移动game.m_snakePoint[0].y+=game.m_direction.y*LENGTH*2;

   for(inti=0;i

   {

   m_staticArray[i].SetWindowPos(NULL,game.m_snakePoint[i].x-LENGTH,game.m_snakePoint[i].y-LENGTH,game.m_snakePoint[i].x+LENGTH,game.m_snakePoint[i].y+LENGTH,

   SW_SHOW);

   }

   for(intj=1;j

   {

   GameOver();

   }

   m_staticArray[MAX].ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE);//显示水果m_staticArray[MAX].SetIcon(AfxGetApp()->LoadIcon(game.m_icon));

   m_staticArray[MAX].SetWindowPos(NULL,game.m_foodPoint.x,game.m_foodPoint.y,32,32,

   SW_SHOW);

   //当蛇吃到水果

   if(game.m_snakePoint[0].xgame.m_foodPoint.x-LENGTH&&game.m_snakePoint[0].ygame.m_foodPoint.y-LENGTH)

   {

   game.m_foodPoint=CPoint(LENGTH*game.RandNum(2,37),LENGTH*game.RandNum(2,27));

   CStringstr;

   if(game.m_num==0)

   {

   ++m_icon1;

   str.Format("%d",m_icon1);

   GetDlgItem(IDC_EDIT1)->SetWindowTextA(str);

   }

   elseif(game.m_num==1)

   {

   ++m_icon2;

   str.Format("%d",m_icon2);

   GetDlgItem(IDC_EDIT2)->SetWindowTextA(str);

   }

   else

   {

   ++m_icon3;

   str.Format("%d",m_icon3);

   GetDlgItem(IDC_EDIT3)->SetWindowTextA(str);

   }

   game.m_num=game.RandNum(0,3);

   game.m_icon=IDI_ICON1+game.m_num;//重新加1个水果game.m_snakeNum++;//蛇的长度加1str.Format("%d",game.m_snakeNum);

   GetDlgItem(IDC_EDIT4)->SetWindowTextA(str);

   }

   CDialog:

:

OnTimer(nIDEvent);

   }

   如下再介绍应用在对话框中来响应键盘消息,我写的是一个键盘“钩子”,代码如下:

   HHOOKg_hKeyboard=NULL;

   HWNDg_hWnd=NULL;

   LRESULTCALLBACKKeyboardProc(

   intcode,      //hookcodeWPARAMwParam,//virtual-keycode

   LPARAMlParam//keystroke-messageinformation

   )

   {

   if(wParam==game.turnUP)

   {

   if(game.m_direction.y==0)game.m_direction=UP;

   }

   elseif(wParam==game.turnDOWN)

   {

   if(game.m_direction.y==0)game.m_direction=DOWN;

   }

   elseif(wParam==game.turnLEFT)

   {

   if(game.m_direction.x==0)game.m_direction=LEFT;

   }

   elseif(wParam==game.turnRIGHT)

   {

   if(game.m_direction.x==0)game.m_direction=RIGHT;

   }

   else

   ;

   return1;

   }

   然后介绍一下,点击鼠标右键出现菜单:

voidCSnakeDlg:

:

OnRButtonDown(UINTnFlags,CPointpoint)

   {

   if(game.m_run)

   KillTimer

(1);

   CMenuoMenu;

   if(oMenu.LoadMenu(IDR_MENU1))

   {

   CMenu*pPopup=oMenu.GetSubMenu(0);

   ASSERT(pPopup!

=NULL);

   CPointoPoint;

   GetCursorPos(&oPoint);

   SetForegroundWindow();

   pPopup->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this);

   }

   if(game.m_run)SetTimer(1,game.m_gameSpeed,NULL);

   CDialog:

:

OnRButtonDown(nFlags,point);

   }

然后来介绍一下程序中是怎样来改变按键的,首先说一下,我开始用EDIT控件来让用户输入,但是程序中我用的是键盘“钩子”来处理消息的,所以EDIT控件在程序中是不可以输入信息的,所以我选的是下拉列表,代码如下,解释也在程序中相应给出:

intkeyNum[40]={//定义玩家可以设的键,把所有的键信息存在这个数组中VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',VK_NUMPAD0,VK_NUMPAD1,VK_NUMPAD2,VK_NUMPAD3,VK_NUMPAD4,VK_NUMPAD5,VK_NUMPAD6,VK_NUMPAD7,VK_NUMPAD8,

   VK_NUMPAD9};

   voidCSnakeDlg:

:

OnKeyset()//键盘设置响应消息函数

   {

   //TODO:

在此添加命令处理程序代码

   if(game.m_run)

   KillTimer

(1);

   CKeySetDlgdlg;

   if(dlg.DoModal()==IDOK)

   {

   if(dlg.m_up==dlg.m_down||dlg.m_up==dlg.m_left||dlg.m_up==dlg.m_right||dlg.m_down==dlg.m_left||dlg.m_down==dlg.m_right||dlg.m_left==dlg.m_right)

   {

   MessageBox("键位不能设置为重复的,设置失败!

");

   if(game.m_run)SetTimer(1,game.m_gameSpeed,NULL);

   return;

   }

   game.turnUP=keyNum[GetMarkNum(dlg.m_up)];//重新设置键game.turnDOWN=keyNum[GetMarkNum(dlg.m_down)];

   game.turnLEFT=keyNum[GetMarkNum(dlg.m_left)];

   game.turnRIGHT=keyNum[GetMarkNum(dlg.m_right)];

   }

   if(game.m_run)SetTimer(1,game.m_gameSpeed,NULL);

   }

   intCSnakeDlg:

:

GetMarkNum(CStringstr)//返回重新设置键对应数组的“索引”

   {

   intbackNu

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1