




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
20122013 学年 第 2 学期课程名称 可视化编程 (VC)学 院 计算机科学与技术学院专 业 软件工程专业班 级姓 名指导教师1目录1、 课程设计要求- 22、系统功能实现与操作- 23、 系统设计概述- 23.1 添加结构体说明 - 23.2 模块说明- 33.3 主要功能函数代码及注释- 34、调试过程-114.1 添加功能说明- 114.2 错误及解决方案 - 115、 程序运行结果- 12附:主要类 Cview 的成员函数代码-1521、课程设计要求题目:基于 MFC 的贪吃蛇游戏设计与实现。要求:1.游戏界面设计2.食物的初始化3.游戏开始以及具体实现2、系统功能实现与操作本系统运用 API 函数的相关功能进行界面设计和功能实现。通过Rectangle()函数绘制操作区域及障碍物。通过连续的小矩形实现蛇身的绘制。通过 srand()函数和rand()函数生成随机数,完成生成食物功能的实现。综合运用多种 if 条件判断和for 循环的嵌套使用的算法完成各种条件判断。该系统功能简单,操作简易。打开程序后,点击菜单栏的游戏按钮,点击开始游戏,系统弹出对话框,提示还有 3 秒开始。游戏开始后,贪吃蛇开始移动,通过操作键盘上的上下左右方向键控制蛇的移动,躲避障碍物并吃掉食物。当吃掉的食物累计到达一定数量后,蛇行速度加快。直至撞到边界或障碍物或撞到自身,游戏结束。此时弹出对话框,提示所得分数。游戏中途可通过暂停和继续按钮执行相应操作。3、系统设计概述3.1 添加结构体说明struct Snakeint x,y;int len;int direct;Snake50;struct Foodint x;3int y;int food;Food;Snake 结构体数组用于存放贪吃蛇的相关数据,其中 x,y 存放当前节点矩形左上角的坐标, (Snake0 为蛇头) ,len 存放当前蛇身的长度,direct 存放蛇的行进方向,可在 14 取值。Food 结构体用于存放食物的位置信息。其中 x,y 存放食物小矩形左上角左标,food 存放食物存在的布尔判断值。3.2 模块说明系统代码部分主要分为三个模块,界面控制模块、初始化模块和功能模块。界面控制模块包括函数:OnStart() ,OnPause() ,OnContinue(),OnExit()初始化模块包括函数:OnInitialUpdate(),OnDraw(),oninit()功能模块包括函数:OnKeyDown(),OnTimer()3.3 主要功能函数代码及注释OnStart()void CSnakeView:OnStart() / TODO: Add your command handler code hereSetTimer(1,3000,NULL);AfxMessageBox(“还有 3 秒开始 !“);点击开始游戏触发,设置定时器控制三秒后开始游戏。OnPause()void CSnakeView:OnPause() / TODO: Add your command handler code hereKillTimer(1);AfxMessageBox(“不要让人家等太久 “);关闭定时器,暂停游戏OnContinue()4void CSnakeView:OnContinue() / TODO: Add your command handler code hereSetTimer(1,10,NULL);重启定时器,恢复游戏OnExit()void CSnakeView:OnExit() / TODO: Add your command handler code hereAfxMessageBox(“欢迎下次再来! “);exit(0);弹出对话框提示退出。OnInitialUpdate()void CSnakeView:OnInitialUpdate() CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base classSnake0.x=10;Snake0.y=10;Snake1.x=10;Snake1.y=10;Snake2.x=10;Snake2.y=10;Snake0.direct=2;Snake0.len=3;Food.food=1;/初始化蛇的长度和位置用这个函数进行蛇的初始化工作。初始化贪吃蛇起初有 3 个节点,长度为3,起始坐标存入数组,食物为 1 无 0 有。OnDraw()5void CSnakeView:OnDraw(CDC* pDC)CSnakeDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCBrush backBrush(RGB(111,111,111);CBrush* pOldBrush = pDC-SelectObject(CRect rect;pDC-GetClipBox(pDC-PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY);pDC-SelectObject(pOldBrush);pDC-Rectangle(9,9,401,401);CBrush zaBrush(RGB(111,111,111);pDC-SelectObject(zaBrush);for(int m=0;mRectangle(150,(100+m*10),160,(110+m*10);for(int n=0;nRectangle(250+n*10),200,(260+n*10),210);oninit();窗口创建时架构调用的函数,通过此函数完成界面初始化。创建灰色画刷选入设备环境,通过绘图函数绘制用户区。用两个 for 循环逐次绘制矩形的算法绘制出场景中的障碍物。oninit()void CSnakeView:oninit()CDC *pDC=GetDC();CBrush DrawBrush=(RGB(255,0,0);CBrush *Drawbrush=pDC-SelectObject(for(int i=0;iRectangle(Snakei.x*10,Snakei.y*10,(Snakei.x+1)*10,(Snakei.y+1)*10);6pDC-SelectObject(DrawBrush);/利用 for 循环绘制起始的蛇身该函数为自己添加的成员函数,用于绘制开始时的蛇身(长度为 3) 。OnKeyDown()void CSnakeView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call defaultswitch(nChar)case VK_UP:if(Snake0.direct!=2) Snake0.direct=1;break;case VK_DOWN:if(Snake0.direct!=1) Snake0.direct=2;break;case VK_LEFT:if(Snake0.direct!=4) Snake0.direct=3;break;case VK_RIGHT:if(Snake0.direct!=3) Snake0.direct=4;break;/通过键盘设置转头方向CView:OnKeyDown(nChar,nRepCnt,nFlags);CView:OnKeyDown(nChar,nRepCnt,nFlags);该函数为键盘消息的接收函数。从键盘得到的上下左右的不同按键,会根据 switch 判断语句的 case 改变 Snake。direct 的值,从而改变蛇的行进方向。OnTimer()void CSnakeView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();CString soure;int j=0;if(Snake0.len=3)SetTimer(1,170,NULL);if(Snake0.len=9)SetTimer(1,130,NULL);if(Snake0.len=14)SetTimer(1,95,NULL);if(Snake0.len=18)SetTimer(1,60,NULL);/根据蛇的长度进行速度的设定soure.Format(“得分:%d!“,(Snake0.len-3)*10); /设置每个食物 100 分7/撞墙判断if(Snake0.direct=3)/用来控制直接结束当前函数KillTimer(1);AfxMessageBox(soure);/分四种情况撞障碍判断,k 为循环控制标识-if(Snake0.direct=3)for(int k=0;k3)for(int sn=Snake0.len-1;sn0;sn-)if(Snake0.x*10=Snakesn.x*10KillTimer(1);AfxMessageBox(soure);/对尾节点用白笔涂掉if(j!=1)pDC-SelectStockObject(WHITE_PEN);pDC-Rectangle(SnakeSnake0.len-1.x*10,SnakeSnake0.len-1.y*10,(SnakeSnake0.len-1.x+1)*10,(SnakeSnake0.len-1.y+1)*10);for(int i=Snake0.len-1;i0;i-)Snakei.x=Snakei-1.x;Snakei.y=Snakei-1.y;/行走方向判断if(Snake0.direct=1)Snake0.y-;if(Snake0.direct=2)Snake0.y+;if(Snake0.direct=3)Snake0.x-;if(Snake0.di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年住宅室内环境检测协议规范
- 2025年校园文化建设细则:制度创新下的文化育人实践
- 高质量教育发展中的教师能力提升策略
- 校园急救课程内容的设置与优化
- 智慧城市实战解析
- 道德法治启蒙课
- 词汇记忆的艺术
- 创新教学实践探索
- 出行新纪元模板
- 双十二营销解析
- 财务管理企业项目投资
- 2024年注会职业规划试题及答案
- 有限空间应急演练方案
- 2024北京朝阳区初一(下)期末数学试题和答案
- 疏水阀基础知识培训课件
- 统编版语文三年级下册第二单元复习课 课件
- 农地犁地合同范本
- 高中生物沪科版课本“思考与讨论”课件
- 员工代表制度及选举办法
- 2025年度数据中心10kv配电设备维保服务合同3篇
- GB/T 42968.4-2024集成电路电磁抗扰度测量第4部分:射频功率直接注入法
评论
0/150
提交评论