贪吃蛇程序.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:22 大小:1.6MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

贪吃蛇程序.ppt

贪吃蛇程序.ppt

预览

免费试读已结束,剩余 12 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.问题描述2.编程要求3.要点分析4.解题步骤(3)在ClassWizard中为刚才编辑好的菜单添加消息处理函数。打开ClassWizard,选中MessageMaps页。在ClassName中选择CSnakeView,在ObjectID中选择ID_GAME_START,在Messages中选择COMMAND,添加消息处理函数,其他的做相同处理。(6)编辑生成的代码,完成程序。(1)选择ClassView窗口,双击CSnakeView类,添加如下成员变量。并添加头文件:#include<Afxtempl.h>classCSnakeView:publicCView{//此处略去若干行由系统生成的代码private:voidReDisplay(CPointpPoint);voidIniGame();voidIniAim();intm_nLeft,m_nTop,m_nWidth,m_nHeight,m_nSize;//起始坐标,宽/高度(格数),每格大小intm_nDirect;//当前方向//1-右,2-左,3-下,4-上CPointm_pAim;//当前目标坐标CArray<CPoint,CPoint>m_aBody;//蛇身intm_nGameStatus;//游戏状态:0-未开始,1-开始intm_nCount;//吃掉目标数intm_nTime,m_nTime1;//用时间intm_level;//游戏难度级别};1(2)在CSnakeView.Cpp文件,添加3个成员函数IniAim、IniGame和ReDiaplay://该函数随机产生一个供蛇吃的目标,如果该目标恰巧与蛇身重合,则重新产生一个voidCSnakeView::IniAim(){intuX,uY;//目标位置while(1){uX=rand()%m_nHeight;uY=rand()%m_nWidth;intuTag=0;//0-不与蛇身重合,1-重合for(inti=0;i<=m_aBody.GetUpperBound();i++){CPointuPoint=m_aBody.GetAt(i);if(uPoint.x==uX||uPoint.y==uY)//目标与蛇身重合{uTag=1;break;}}if(uTag==0)break;}m_pAim=CPoint(uX,uY);//产生的目标存放在成员变量中}//该函数对游戏初始化,定义游戏的初始状态voidCSnakeView::IniGame(){//游戏区域m_nLeft=20;m_nTop=20;m_nWidth=40;m_nHeight=30;m_nSize=10;//游初始状态m_nGameStatus=0;m_nDirect=1;m_nCount=0;//初始化蛇身m_aBody.RemoveAll();m_aBody.Add(CPoint(2,7));m_aBody.Add(CPoint(2,6));m_aBody.Add(CPoint(2,5));m_aBody.Add(CPoint(2,4));//计时器清零m_nTime=0;m_nTime1=0;//初始化随机数发生器srand((unsigned)time(NULL));//产生一个目标IniAim();}//刷新游戏区域中pPoint处的一个小方格voidCSnakeView::ReDisplay(CPointpPoint){InvalidateRect(CRect(m_nLeft+pPoint.y*m_nSize,m_nTop+pPoint.x*m_nSize,m_nLeft+(pPoint.y+1)*m_nSize,m_nTop+(pPoint.x+1)*m_nSize));}(3)修改CSnakeView的构造函数,完成游戏的初始化。CSnakeView::CSnakeView(){IniGame();}(4)在OnDraw中加入代码,显示游戏界面。voidCSnakeView::OnDraw(CDC*pDC){CSnakeDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画游戏区域pDC->SelectStockObject(WHITE_BRUSH);pDC->Rectangle(CRect(m_nLeft-1,m_nTop-1,m_nLeft+m_nW