收藏 分销(赏)

毕业设计(论文)-基于VC--贪食蛇游戏的设计与实现.doc

上传人:胜**** 文档编号:2908300 上传时间:2024-06-11 格式:DOC 页数:43 大小:917KB
下载 相关 举报
毕业设计(论文)-基于VC--贪食蛇游戏的设计与实现.doc_第1页
第1页 / 共43页
毕业设计(论文)-基于VC--贪食蛇游戏的设计与实现.doc_第2页
第2页 / 共43页
点击查看更多>>
资源描述
XXX学院 面向对象程序设计(c++/vc++) 课程设计报告 题 目:基于VC++贪食蛇游戏的设计与实现 学 号: 班 级: 小组成员: 指导教师: 所属系部: 2014年 6月 3 日 2 课程设计任务书 课程名称 面向对象程序设计(C++/VC++) 时间 2014.6.3----2014.6.6 题 目 基于VC++的贪食蛇游戏的设计与实现 主要内容:本设计实现了一个简单的贪食蛇小游戏,该游戏不仅实现了简单的游戏操作功能,还实现了灵活的运作功能,而且具有简洁大方的图文外观。此设计按照软件工程的方法进行,系统具有良好的界面和必要的交互信息,使操作人员能快捷简单地进行操作,给玩家一个简易有趣的游戏。本系统开发平台为Windows XP,程序设计语言采用C++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。 要求:(1)通过实际软件项目的分析、设计、编码、测试等工作,掌握用软件工程的方法来开发和维护系统。 (2)按要求编写课程设计报告书,能正确编写分析、设计、编码、测试等技术文档和用户使用手册。 (3)进行系统的联合调试,编写系统使用说明。 (4)完成系统的文档、设计说明工作 任务分配: 计科132班:XXX XXX负责程序框架设计和服务端代码编写 计科132班:XXX主要负责软件测试及调试 计科132班:XXX主要负责撰写报告与汇报 摘要 本设计实现了一个简单的贪食蛇小游戏,该游戏不仅实现了简单的游戏操作功能,还实现了灵活的运作功能,而且具有简洁大方的图文外观。此设计按照软件工程的方法进行,系统具有良好的界面和必要的交互信息,使操作人员能快捷简单地进行操作,给玩家一个简易有趣的游戏。本系统开发平台为Windows XP,程序设计语言采用C++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。 关键词:贪食蛇;MFC Abstratc This design implements a simple bulimia small snake game, the game is not only realize the function of simple operation, and realize the function of flexible operation, and has a concise and easy by appearance. This design according to the method of software engineering, system has a good interface and the interaction of the necessary information, allow the operator to quick and easy to operate, easy to give players a fun game. This system development platform for Windows XP, using c + + program design language, in programming, using the structured and object oriented method to solve the problem. Key words: Gluttony Snake; MFC II 目录 摘要 I ABSTRATC II 1引言: 1 1.1课题背景介绍 1 1.2 MFC简介 1 2系统分析 2 2.1可行性分析 2 2.2系统需求分析 2 2.2.1课题需求 2 2.2.2功能需求 3 2.2.3游戏环境需求 3 2.2.4游戏界面需求 4 2.3程序分析 6 2.3.1游戏大体框架 6 2.3.2主要游戏函数 6 2.3.3游戏程序整体间调用关系图 7 3程序设计 8 3.1游戏教程的知识点 8 3.2游戏基本流程和大体思想 8 3.3游戏程序模块实现函数说明 9 3.4程序变量声明 15 4 系统实现 23 4.1坐标位置信息模块实现 23 4.2键盘方向键操作模块实现 23 4.3蛇身撞界与分数计算模块实现 23 4.4食物重新生成模块实现 24 4.5游戏测试 25 5 总结 26 参考文献 27 附录 28 1引言 在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。 1.1课题背景介绍 贪食蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己所学的知识加以应用,二是一直以来贪食蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选了这个题目作为我们的课程实训。 1.2 MFC简介 MFC(Microsoft Foundation Classes),是一个微软公司提供的类库( class libraries) 以 C++类的形式封装了 Windows 的 API,它包含了窗口等许多类的定义。各种类的集合构成了一个应运程序的框架结构,以减少应用程序开发人员的工作量。其中包含的类包含大量 Windows句柄封装类和很多 Windows 的内建控件和组件的封装类。MFC 6.0 版本封装了大约200 个类,其中的一些可以被用户直接使用。例如 CWnd 类封装了窗口的功能,包括打印文本、绘制图形及跟踪鼠标指针的移动等; CsplitterWnd是从CWnd 类派生出来的,继承了基类或称父类 CWnd 类的所有特 性,但增加了自己的功能,实现拆分窗口,使窗口至少可被拆分成两个窗口,用户可以移动两个窗口之间的边框来改变窗口的大小;CtoolBar 类可以定义工具等。MFC 命名的惯例是类的名字通常是由“C”打头;成员变量使用前缀“m_” ,接着使用一个字母来指明数据类型,然后是变量的名称;所有的单词用大写字母开头。 2系统分析 2.1可行性分析 贪食蛇游戏是一种简单的大众的游戏,自计算机实现以来,十分深受广大电脑玩家的喜爱,做一个简单的贪食蛇游戏。贪食蛇的核心玩法是一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇向上接着又出现食物,等待被蛇吃掉,这时蛇身增长一节,同时获得10分。如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。并且可以在游戏开始前自由选择游戏难度,游戏过程中可暂停游戏,并有积分系统,且积分每满一定值,蛇的运行速度会逐步增加。 2.2系统需求分析 2.2.1课题需求 接到课程设计任务后,我们对曾经非常感兴趣的几款经典小游戏作了分析并筛选,然后发现使用MFC类库都可以完成这些游戏的编译,但是我们刚刚学习,还不能完全掌握MFC类的使用和复杂的算法,但是我们相信通过一个简单的贪吃蛇游戏可以让我们对MFC得到充分的锻炼。贪吃蛇游戏作为一款经典小游戏,版本多样,娱乐性也很高,适合在闲暇时放松心神。并且可在多个平台上实现,程序简单易懂,非常适合MFC初学者学习制作。 2.2.2功能需求 1.使用MFC编译的游戏,我们预计实现游戏的开始、暂停、继续、等级的提升、难度的增加。 2.重要的MFC程序代码需求 1) CWnd:窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。   2) CDocument文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)   3) CView视图,负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。 4) CDialog对话框   5) CPen笔,画线   6) CBrush刷子,填充   7) CBitmap位图   8) CRgn区域,指定一块区域可以用于做特殊处理。   9) CString字符串。封装了C中的字符数组,非常实用。   10) CPoint点,就是(x,y)对  11) CRect矩形,就是(left,top,right,bottom) 2.2.3游戏环境需求 游戏要求(包括原始数据、技术参数、设计要求、图纸量、工作量要求等)                (1) 操作系统:Windows NT Windows XP Windows7 (2) 应用软件:Microsoft Visual Studio 2010 2.2.4游戏界面需求 (1)游戏说明界面: 图2.1游戏说明界面 (2)游戏开始界面: 图2.2游戏开始界面 (3)游戏运行界面 图2.3游戏运行界面 (4)游戏结束界面 图2.4游戏结束界面 2.3程序分析 2.3.1游戏大体框架如下图所示 开始游戏 暂停游戏 退出游戏 继续游戏 游戏控制模块 重新开始 图2.5游戏大体框架 2.3.2主要游戏函数 void CSnake2View::OnDraw(CDC* pDC) void CSnake2View::oninit(void) void CSnake2View::OnStart() void CSnake2View::OnPause() void CSnake2View::OnContinue() void CSnake2View::OnExit() void CSnake2View::OnIntroduce() void CSnake2View::OnRestart() void CSnake2View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) void CSnake2View::OnRButtonDown(UINT nFlags, CPoint point) void CSnake2View::OnTimer(UINT_PTR nIDEvent) 2.3.3游戏程序整体间调用关系图InitSnake() DrawSnake() 设置自动移动定时器和增加食物定时器 游戏开始 CSnakeDlg::OnPaint() DrawFood () 桌面初始化 初始化蛇头和蛇移动方向 随机初始化一个食物到桌面 SetTimer() CTable::AddFood() 蛇移动 蛇吃食? 蛇增长 继续? 蛇死亡? 桌面上随机生成食物 MoveSnake () AddSnake() 退出程序 是 是 否 否 OnGameStart() GameOver() TB_STATE_SBLOCK 图3.6游戏程序关系图 3程序设计 3.1游戏教程的知识点 1、 CView类中的消息响应 2、 控件的消息响应 3、 基于CView类内的具体游戏实现 4、 数组 5、 游戏图形的实现用CDC类实现。 3.2游戏基本流程和大体思想 1、 定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕的初始位置,长度,以及蛇的行走方向。食物类的定义包括出现的初始位置,以及食物是否被吃掉的判断。 2、 用数组初始化长度为3的贪吃蛇,并且默认食物未出现 3、 在CView类上运用MFC提供的Windows消息中WM_TIMER消息,运用OnTimer()函数让系统提供一个时钟节拍,更新游戏 4、 具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其中还包括根据蛇的速度和长度来进行游戏难度的改变。 5、 具体键盘游戏操作运用到Windows消息响应中的WM_KEYDOWN,用OnKeyDown()来响应玩家的实际操作。 3.3游戏程序模块实现函数说明 第一部分: 本版游戏的具体实现是在CViewl类中实现,所以其他类不用添加任何代码。 由于此次贪吃蛇需要MFC的开发环境,所以打开Visual Studio2010新建一个MFC单文档工程,取名Snake2。 然后单击菜单栏里的“项目”,找到“类向导”,单击打开,在类名中选择Snake2View添加以下Windows信息 1 WM_KEYDOWN 2 WM_RBUTTONDOWN 3 WM_TIMER 并且添加虚函数OnInitialUpdate() OnInitialUpdate()的功能如下: 视图窗口完全建立后第一个被框架调用的函数。框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。 时间上,两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生,然后才是视图的OnInitialUpDate,一般在这里对视图的显示做初始化。简单点,就是ONCREATE只是产生VIEW的基本结构和变量而在OnInitialUpDate()中,主要初始化视图中控件等。对各个变量进行初始化操作 所以我们要用这个函数来进行贪吃蛇的初始化工作。再者还要添加一个成员函数oninit()进行贪吃蛇外观的初始化。 图3.1添加消息 图3.2添加虚函数 再者是设计游戏的一些控件来控制“开始游戏” “结束游戏” 和“暂停游戏”“退出游戏”“重新开始”“游戏介绍”。 我们可以点击“资源视图”然后找到“Menu”文件夹,选“IDR_MAINFRAME”进行控件的具体设计,这里我们在Menu文件夹中把“IDR_MAINFRAME”中默认的控件全部删除 右键其中的标题栏,点击属性,会得到一个菜单栏标题,我们分别建立1个菜单栏标题。这里我们分别建“游戏操作”“游戏说明”。 图3.3菜单栏标题 点击并且在已有控件中的列表中点击属性,进行“菜单项目属性”的设置。我们本别建立的属性“标明”与对应的ID有 A. 开始游戏ID_START B. 暂停游戏ID_PAUSE C. 继续游戏ID_CONTINUE D. 退出游戏ID_EXIT E. 重新开始ID_RESTART F. 游戏介绍ID_Introduce 此处控件的设计是“可见即可得”的控件操作,成功设置ID之后 1、 右键“游戏开始”。 2、 点击“添加事件处理程序”。 3、 在Message Maps页面,在要进行消息响应的控件ID列表Object IDs中上选择对应的ID, 这里我们选择IDM_START,具体实现的环境是CView类,所以我们必须把“Class name”的默认“CMainFrame”改为“CView类”,并且在“Messages”类型设置中,用“COMMAND”设置为其为命令消息。其余各项也按照同理进行设置。 图3.4添加事件处理程序 图3.5添加事件处理程序向导 第二部分 具体实现游戏、 Step 1 首先我们在文件“Snake2View.cpp”开头处分别定义 蛇 和食物 的全局变量 struct Snake //蛇的全局变量 { int x,y; int len; int direct; }Snake[50]; struct Food //食物的全局变量 { int x; int y; int isfood; }Food; 图3.6蛇与食物的全局变量 接着把那窗口往下拉,找到”void CSnake2View::OnInitialUpdate()”,添加如下代码 ” void CSnake2View::OnInitialUpdate() { CView::OnInitialUpdate(); Snake[0].x=10; Snake[0].y=10; Snake[1].x=11; Snake[1].y=10; Snake[2].x=12; Snake[2].y=10; Snake[0].direct=3; Snake[0].len=3; Food.isfood=1; // TODO: Add your specialized code here and/or call the base class } 3.4程序变量声明 代码说明一: 1、 初始化贪吃蛇起初有3个节点,长度为3,起始坐标;食物默认为 1无0有。 2、 Step 2 找到类视图中的“CSnake2View”单击右键找到“属性”,然后再属性栏里找到“消息”按钮,点击,然后在那里找到“WM_KEYDOWN”添加函数,然后回到Snake2View.cpp,添加代码如下: void CSnake2View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { switch(nChar) { case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break; case VK_DOWN:if(Snake[0].direct!=1)Snake[0].direct=2;break; case VK_LEFT:if(Snake[0].direct!=4)Snake[0].direct=3;break; case VK_RIGHT:if(Snake[0].direct!=3)Snake[0].direct=4;break; } CView::OnKeyDown(nChar, nRepCnt, nFlags); } 3、 OnKeyDown函数的第一个参数 UINT nChar 是接收用户键入的信息,然后我们用switch进行选择判断 代码说明二: 1、 Snake[0]代表的是蛇头,我们对蛇头的方向Snake[0].direct进行判断。 case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break; 意思就是当Snake[0].direct的方向此时并不等于“下”的时候,才能做出“上”的操作动作,否则则忽略用户“向上”的操作按键效果 2、 Step 3 用同样的方法对OnRButtonDown()具体添加代码如下: void CSnake2View::OnRButtonDown(UINT nFlags, CPoint point) { CString str; str.Format(_T("%d,%d"),point.x,point.y); AfxMessageBox(str); // TODO: Add your message handler code here and/or call default } 这个函数功能是:用鼠标右键屏幕,就会马上显示当前位置的坐标信息。 3、 Step 4在同一窗口为“CSnake2View::oninit”添加 void CSnake2View::oninit(void) { CDC *pDC=GetDC(); CBrush DrawBrush=(RGB(0,255,0)); CBrush *Drawbrush=pDC->SelectObject(&DrawBrush); for(int i=0;i<=Snake[0].len-1;i++) pDC->Rectangle(Snake[i].x*20,Snake[i].y*20,(Snake[i].x+1)*20,(Snake[i].y+1)*20); pDC->SelectObject(DrawBrush); } 代码说明三: 1、 利用Windows给我们提供的CDC类来进行画图,我们首先用一个指向CDC类的指针去接受与该窗口相关联的DC句柄,然后用定义画刷一个DrawBrush对象,并且用RGB(0,250,0)来给画刷初始化颜色。且用electObject(&DrawBrush);函数把对象画刷选入到设备描述表中,用for循环依次把贪吃蛇的3个节点画出来。 void far rectangle(int left, int top, int right, int bottom);这个函数的的功能根据 函数功能:该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填充. 2、 Step 5仍在同一视图,分别找到OnStart,OnPause,OnContinue,OnExit,OnRestart函数添加以下代码 void CSnake2View::OnStart() { SetTimer(1,3000,NULL); AfxMessageBox(_T("3秒后开始游戏!")); }//开始游戏 void CSnake2View::OnPause() { KillTimer(1); AfxMessageBox(_T("暂停游戏·...")); }//暂停游戏 void CSnake2View::OnContinue() { SetTimer(1,10,NULL); }//继续游戏 void CSnake2View::OnExit() { AfxMessageBox(_T("退出游戏·...")); exit(0); }//退出游戏 void CSnake2View::OnRestart() { CSnake2View::OnInitialUpdate(); CSnake2View::oninit(); CSnake2View::OnStart(); }//重新开始 3、 Step 6 对OnDraw()的添加代码 OnDraw()函数众所周知视图类中的输出.视图类的输出基本上都是在视图类的OnDraw函数中处理的,系统会准备好入参,然后调用OnDraw函数,所以我们只需找到它,然后添加代码 void CSnake2View::OnDraw(CDC* pDC) { CSnake2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CBrush backBrush(RGB(0,50,250)); CBrush* pOldBrush = pDC->SelectObject(&backBrush); CRect rect; pDC->GetClipBox(&rect); pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY); pDC->SelectObject(pOldBrush); pDC->Rectangle(19,19,501,501); oninit(); } 代码说明四: 1、 此处是用画刷画一个背景,并且画出3个矩形区域 2、 函数原型:int GetClipBox(HDC hdc, LPRECT lprc); 3、 该函数得到一个能够完包含当前可见区域的最小矩形的大小。 4、 函数原型:int nYLeft, int nWidth, int nHeight, DWORD dwRop);  5、 该函数使用当前选入指定设备环境中的刷子绘制给定的矩形区域。 6、 Step 7 一样是通过属性,在消息里找到“WM_TIMER”添加函数,然后返回“Snake2View.cpp”为该函数添加代码 void CSnake2View::OnTimer(UINT_PTR nIDEvent) { CDC *pDC=GetDC(); CString soure; if(Snake[0].len==3)SetTimer(1,600,NULL); if(Snake[0].len==6)SetTimer(1,400,NULL); if(Snake[0].len==9)SetTimer(1,300,NULL); if(Snake[0].len==11)SetTimer(1,200,NULL); if(Snake[0].len==14)SetTimer(1,100,NULL); soure.Format(_T("得分%d!"),(Snake[0].len-3)*10); if(Snake[0].x*20<=20||Snake[0].y*20<=20||Snake[0].x*20>=480||Snake[0].y*20>=480) { KillTimer(1); AfxMessageBox(soure); } if(Snake[0].len>3) for(int sn=Snake[0].len-1;sn>0;sn--) { if(Snake[0].x*20==Snake[sn].x*20&&Snake[0].y*20==Snake[sn].y*20) { KillTimer(1); AfxMessageBox(soure); } } /////////////////////////////////////////////////////////////////////////// pDC->SelectStockObject(WHITE_PEN); pDC->Rectangle(Snake[Snake[0].len-1].x*20,Snake[Snake[0].len-1].y*20,(Snake[Snake[0].len-1].x+1)*20,(Snake[Snake[0].len-1].y+1)*20); for(int i=Snake[0].len-1;i>0;i--) { Snake[i].x=Snake[i-1].x; Snake[i].y=Snake[i-1].y; } if(Snake[0].direct==1)Snake[0].y--; if(Snake[0].direct==2)Snake[0].y++; if(Snake[0].direct==3)Snake[0].x--; if(Snake[0].direct==4)Snake[0].x++; ? pDC->SelectStockObject(BLACK_PEN); CBrush DrawBrush=(RGB(255,0,0)); CBrush *Drawbrush=pDC->SelectObject(&DrawBrush); pDC->Rectangle(Snake[0].x*20,Snake[0].y*20,(Snake[0].x+1)*20,(Snake[0].y+1)*20); pDC->SelectObject(DrawBrush); if(Snake[0].x*20==Food.x*20&&Snake[0].y*20==Food.y*20) { Snake[0].len++; Food.isfood=1; Snake[Snake[0].len-1].x=Snake[Snake[0].len-2].x; Snake[Snake[0].len-1].y=Snake[Snake[0].len-2].y; } if(Food.isfood==1) { srand((unsigned)time(NULL)); do { for(int isfo=Snake[0].len-1;isfo>=0;isfo--) if(Snake[0].x*20==Snake[isfo].x*20&&Snake[0].y*20==Snake[isfo].y*20) { Food.x=rand()%20; Food.y=rand()%20; } } while(Food.x*20<70||Food.y*20<70||Food.x*20>430||Food.y*20>430); pDC->Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20); Food.isfood=0; } CView::OnTimer(nIDEvent); } 代码说明五: 1、 切换到“资源视图”,展开节点,找到“Dialog”并在此节点上单击鼠标右键,在弹出的快捷菜单中选“插入对话框”。 2、 然后创建对话框的类,方法是打开类向导,单击“添加类”按钮,在弹出的MFC类向导对话框中的“类名”文本框中输入“CIntroduceDialog”,在基类下拉列表中选择“Cdialog”,在对话框ID下拉列表中输“ID_Introduce”,单击完成按钮,对话框类创建完毕。 3、 接着在对话框里添加游戏的介绍,然后在“Snake2View.cpp”中加入头文件“#include”IntroduceDialog.h””然后往下拉,找到”void CSnake2View::OnIntroduce()“添加代码 void CSnake2View::OnIntroduce() { CIntroduceDialog introduce; introduce.DoModal(); }//游戏介绍 4 系统实现 4.1坐标位置信息模块实现 void CSnake2View::OnRButtonDown(UINT nFlags, CPoint point) { CString str; str.Format(_T("%d,%d"),point.x,point.y); AfxMessageBox(str); // TODO: Add your message handler code here and/or call default } 4.2键盘方向键操作模块实现 void CSnake2View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { switch(nChar) { case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break; case VK_DOWN:if(Snake[0].direct!=1)Snake[0].direct=2;break; case VK_LEFT:if(Snake[0].direct!=4)Snake[0].direct=3;break; case VK_RIGHT:if(Snake[0].direct!=3)Snake[0].direct=4;break; } CView::OnKeyDown(nChar, nRepCnt, nFlags); } 4.3蛇身撞界与分数计算模块实现 soure.Format(_T("得分%d!"),(Snake[0].len-3)*10); if(Snake[0].x*20<=20||Snake[0].y*20<=20||Snake[0].x*20>=480||Snake[0].y*20>=480) { KillTimer(1); AfxMessageBox(soure); }if(Snake[0].len>3) for(int sn=Snake[0].len-1;sn>0;sn--) { if(Snake[0].x*20==Snake[sn].x*20&&Snake[0].y*20==Snake[sn].y*20) { KillTimer(1); AfxMessageBox(soure); } 4.4食物重新生成模块实现 if(Food.isfood==1) { srand((unsigned)time(NULL)); do { for(int isfo=Snake[0].len-1;isfo>=0;isfo--) if(Snake[0].x*20==Snake[isfo].x*20&&Snake[0].y*20==Snake[isfo].y*20) { Food.x=rand()%20; Food.y=rand()%20; } } while(Food.x*20<70||Food.y*20<70||Food.x*20>430||Food.y*20>430); pDC->Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20); Food.isfood=0; } 4.5游戏测试 以下是部分游戏视图: 图4.1游戏开始运行 图4.2游戏结束 5 总结 在开始着手编程之前,我以为编个小游戏很简单,但是当我深入思考后发现,并不是自己想象的那么简单,虽然不是什么难度很大的算法,但是程序要考虑的问题很多,相当复杂,需要考虑的很全面,不然就打不到预期的效果。深入思考碰壁后,我在VC++课本上找到了灵感,把课本上的小程序仔细研究调试之后,终于弄清楚了其中的奥妙。通过此次贪吃蛇游戏的设计,确实学到了很多实战的经验。以前只是纸上谈兵,真正下起手来才发现自己其实对C++语言还没有掌握到编程的程度。 开始编译之后,自己通过与同学交流,查阅资料,独立的编写出了游戏代码,并进一步优化,加强可操作性,从中得到了很多课上没有的知识,体会到了编程的快乐,也许,编程就是,由简单到复杂,由复杂到简单。刚开始时,一直失败,好多错误,其实就是些基本的错误,比如变量的定义,整型变量的范围,结构体的运用,指针的定义,函数的调用等等,通过这些问题才发现自己学习的知识是那么不牢固。再有就是些技术上的难题,比如画图函数,初次接触,需要去查阅运用。这次实习不仅仅锻炼了我的VC++编程能力,同时让
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服