ImageVerifierCode 换一换
格式:DOC , 页数:25 ,大小:252.50KB ,
资源ID:103636      下载积分:5 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-103636.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC可视化课程设计MFC贪吃蛇.doc)为本站会员(h****)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

VC可视化课程设计MFC贪吃蛇.doc

1、 2012 2013 学年 第 2 学期 课程名称 可视化编程 (VC) 学 院 计算机科学与技术学院 专 业 软件工程专业 班 级 姓 名 指导教师 1 目录 1、 课程设计要求 - 2 2、 系统功能实现与操作 - 2 3、 系统设计概述 - 2 3.1 添加结构体说明 - 2 3.2 模块说明 - 3 3.3 主要功能函数代码及注释 - 3 4、调试过程 -11 4.1添加功能说明 - 11 4.2错误及解决方案 - 11 5、 程序运行结果 - 12 附:主要类 Cview 的成员函数代码 -15 2 1、课程设计要求 题目:基于 MFC 的贪吃蛇游戏设计与实现。 要求: 1.游戏界面

2、设计 2.食物的初始化 3.游戏开始以及具体实现 2、系统功能实现与操作 本系统运用 API 函数的相关功能进行界面设计和功能实现。通过 Rectangle()函数绘制操作区域及障碍物。通过连续的小矩形实现蛇身的绘制。通过srand()函数和 rand()函数生成随机数,完成生成食物功能的实现。综合运用多种 if 条件判断和for 循环的嵌套使用的算法完成各种条件判断。 该系统功能简单,操作简易。打开程序后,点击菜单栏的游戏按钮,点击开始游戏,系统弹出对话框,提示还有 3 秒开始。游戏开始后,贪吃蛇开始移动,通过操作键盘上的上下左右方向键控制蛇的移动,躲避障碍物并吃掉食物。当吃掉的食物累计到达

3、一定数量后,蛇行速度加快。直至撞到边界或障碍物或撞到自身,游戏结束。此时弹出对话框,提示所得分数。游戏中途可通过暂停和继续按钮执行相应操作。 3、 系统设计概述 3.1 添加结构体说明 struct Snake int x,y; int len; int direct; Snake50; struct Food int x; int y; int food; Food; Snake 结构体数组用于存放贪吃蛇的相关数据,其中 x, y 存放当前节点矩形左上角的坐标,( Snake0为蛇头), len存放当前蛇身的长度, direct 存放蛇的行进方向,可在 14 取值。 3 Food 结构体用于

4、存放食物的位置信息。其中 x, y存放食物小矩形左上角左标, food 存放食物存在的布尔判断值。 3.2 模块说明 系统代码部分主要分为三个模块,界面控制模块、初始化模块和功能模块。 界面控制模块 包括函数: OnStart(), OnPause(), OnContinue(), OnExit() 初始化模块包括函数: OnInitialUpdate(), OnDraw(), oninit() 功能模块包括函数: OnKeyDown(), OnTimer() 3.3 主要功能函数代码及注释 OnStart() void CSnakeView:OnStart() / TODO: Add you

5、r command handler code here SetTimer(1,3000,NULL); AfxMessageBox(“还有 3 秒开始 ! “); 点击开始游戏触发,设置定时器控制三秒后开始游戏。 OnPause() void CSnakeView:OnPause() / TODO: Add your command handler code here KillTimer(1); AfxMessageBox(“不要让人家等太久 “); 关闭定时器,暂停游戏 OnContinue() void CSnakeView:OnContinue() / TODO: Add your com

6、mand handler code here SetTimer(1,10,NULL); 重启定时器,恢复游戏 4 OnExit() void CSnakeView:OnExit() / TODO: Add your command handler code here AfxMessageBox(“欢迎下次再来! “); exit(0); 弹出对话框提示退出。 OnInitialUpdate() void CSnakeView:OnInitialUpdate() CView:OnInitialUpdate(); / TODO: Add your specialized code here and

7、/or call the base class Snake0.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() void CSnakeView:OnDraw(CDC* pDC) CSnakeDoc* pDoc = GetDocument(); ASSER

8、T_VALID(pDoc); / TODO: add draw code for native data here CBrush 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); 5 pDC-Rectangle(9,9,401,401); CBrush zaBru

9、sh(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();

10、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); pDC-SelectObject(DrawBrush); /利用 for 循环绘制起始的蛇身 该函数为自己添加的成员函数,用于绘制开始时的蛇身(长度为 3)。 OnKeyDown() void CSnakeView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nF

11、lags) / TODO: Add your message handler code here and/or call default switch(nChar) 6 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.dire

12、ct=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 default CDC

13、*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 分 /撞墙判断 if(Snake0.direct=3)/用来控制直接结束当前函数

14、 KillTimer(1); AfxMessageBox(soure); /分四种情况撞障碍判断 ,k 为循环控制标识 - if(Snake0.direct=3) 7 for(int k=0;k3) for(int sn=Snake0.len-1;sn0;sn-) if(Snake0.x*10=Snakesn.x*10 KillTimer(1); AfxMessageBox(soure); 9 /对尾节点用白笔涂掉 if(j!=1) pDC-SelectStockObject(WHITE_PEN); pDC-Rectangle(SnakeSnake0.len-1.x*10,SnakeSnake

15、0.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.direct=4)Snake0.x+; pDC-SelectStockObject(BLACK_PEN

16、); CBrush DrawBrush=(RGB(255,0,0); CBrush *Drawbrush=pDC-SelectObject( if(j!=1) pDC-Rectangle(Snake0.x*10,Snake0.y*10,(Snake0.x+1)*10,(Snake0.y+1)*10); pDC-SelectObject(DrawBrush); /判断吃食物的条件 if(Snake0.x*10=Food.x*10 Food.food=1; SnakeSnake0.len-1.x=SnakeSnake0.len-2.x; SnakeSnake0.len-1.y=SnakeSnake0.len-2.y; /生成食物 int o=1;/控制生成食物成功时跳出循环 if(Food.food=1)

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。