已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江西九江市修水县部分县直单位选调事业编制人员17人备考题库(一)附参考答案详解(完整版)
- 2026湖南湘潭市湘潭县选调事业单位人员13人备考题库含答案详解(典型题)
- 2026西藏昌都市人民医院招聘20人备考题库带答案详解(预热题)
- 2026浙江中医药大学附属第三医院(第三临床医学院康复医学院)博士后招聘27人备考题库附答案详解(满分必刷)
- 2026湖北武汉市汉口重点初级中学招聘教师2人备考题库及答案详解(新)
- 2026陕西西安航空职业技术学院高层次及高技能人才招聘34人备考题库附答案详解(模拟题)
- 2026江苏南京大学招聘医学院技术管理1人备考题库附答案详解(精练)
- 2026江苏苏州市港航投资发展集团有限公司招聘13人备考题库(第一批)附答案详解(轻巧夺冠)
- 2026江西新余高新区国有企业招聘8人备考题库带答案详解(考试直接用)
- 2026河南郑州商学院招聘技术人员备考题库带答案详解(研优卷)
- 华为完整版本
- 心血管-肾脏-代谢综合征(CKM)综合管理中国专家共识2025解读课件
- 八年级英语下册集体备课教案:Unit 8 Have you read Treasure Island yet P1
- (一模)太原市2025年高三年级模拟考试(一)英语试卷(含标准答案)
- DB31-T 1433-2023 扬尘在线监测技术规范
- 加油站应急救援知识培训
- 非财务人员的财务管理培训通用课件
- 安全生产标准化绩效考核评定报告
- 安徽永牧机械集团有限公司年产10000吨钢结构加工项目环境影响报告表
- 就业单位提前退休申请书
- QSY136-2023年生产作业现场应急物资配备选用指南
评论
0/150
提交评论