已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、 课设要求设计题目九:基于MFC的贪吃蛇游戏设计与实现1.游戏界面设计2.食物的初始化3.游戏开始以及具体实现4.网上许多贪吃蛇游戏设计资料,切记可以参考,请勿照搬!二、贪吃蛇游戏的简单操作和功能说明1. 简单描述 游戏通过MFC单文档实现。可以实现贪吃蛇的基本操作例如控制蛇的移动,食物刷新,分数判断,游戏开始、暂停、继续、结束、重新开始,加载背景音乐等。2. 界面和菜单介绍(1)界面介绍如图,是程序的主界面(2) 功能菜单 如下图,是游戏菜单的下拉选项。包括游戏开始,游戏暂停,游戏继续,游戏结束和重新开始。每个菜单都有相应的快捷键,其中暂停功能还可以通过游戏中按“空格”这个快捷键实现。关于游戏:游戏暂停,游戏结束,游戏失败后会有相应提示框。如下: 三、 源程序模块1.添加的windows消息和系统函数首先在“ClassView”中添加了以下Windows信息 1 WM_KEYDOWN(当一个非系统键被按下时该消息发送给具有键盘焦点的窗口。) 2 WM_TIMER(在指定的时间间隔内反复触发指定窗口的定时器事件。)然后还有 “ADD Virtual Funciton”的OnInitialUpdate()另外添加一个成员函数oninit(),负责贪吃蛇外观的初始化。 2.控件设计以“游戏开始”控件为例介绍,其余类似。ID,和函数如下图: 快捷键: 3.背景音乐实现首先进入音频文件资源,然后在OnInitialUp函数中加入如下代码:PlaySound(LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC|SND_LOOP); 4. 各主要函数void CSnakeView:OnInitialUpdate() /初始化贪吃蛇 PlaySound(LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC|SND_LOOP); /加载背景音乐 / SND_RESOURCE是调用资源函数 SND_LOOP实现循环播放CView:OnInitialUpdate(); Snake0.x=5; Snake0.y=3; Snake1.x=4; Snake1.y=3; Snake2.x=3; Snake2.y=3; Snake0.direct=4; Snake0.len=3; Food.isfood=1;void CSnakeView:Oninit() /该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填充 CDC *pDC=GetDC(); /什么CDC类的,我也不太懂 CBrush DrawBrush=(RGB(100,100,100); CBrush *Drawbrush=pDC-SelectObject(&DrawBrush); for(int i=0;iRectangle(Snakei.x*20,Snakei.y*20,(Snakei.x+1)*20,(Snakei.y+1)*20); pDC-SelectObject(DrawBrush);代码说明: 利用Windows给我们提供的CDC类来进行画图,我们首先用一个指向CDC类的指针去接受与该窗口相关联的DC句柄,然后用定义画刷一个DrawBrush对象,并且用RGB(100,100,100)来给画刷初始化颜色。并且用SelectObject(&DrawBrush);函数把对象画刷选入到设备描述表中,用for循环依次把贪吃蛇的3个节点画出来。 void far rectangle(int left, int top, int right, int bottom);这个函数的的功能根据void CSnakeView:OnStart() /游戏开始 SetTimer(1,1000,NULL); /设置游戏每秒刷新一次void CSnakeView:OnPause() /游戏暂停KillTimer(1); /暂停计时器 AfxMessageBox(暂停游戏.);void CSnakeView:OnContinue() /游戏继续SetTimer(1,10,NULL);void CSnakeView:OnExit() /游戏退出AfxMessageBox(退出游戏.); exit (0) ;void CSnakeView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) /键盘控制函数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; /Snake0代表的是蛇头,对蛇头的方向Snake0.direct进行判断。Case VK_UP:if(Snake0.direct!=2)Snake0.direct=1;break; 意思就是当Snake0.direct的方向此时并不等于“下”的时候,才能做出“上”的操作动作,否则则忽略用户“向上”的操作按键效果 CView:OnKeyDown(nChar, nRepCnt, nFlags); CView:OnKeyDown(nChar, nRepCnt, nFlags);void CSnakeView:OnTimer(UINT nIDEvent) CDC *pDC=GetDC(); CString soure; if(Snake0.len=2)SetTimer(1,370,NULL); if(Snake0.len=3)SetTimer(1,270,NULL); if(Snake0.len=6)SetTimer(1,200,NULL); if(Snake0.len=9)SetTimer(1,100,NULL); soure.Format(得分:%d!,(Snake0.len-3)*10); /撞界判断 if(Snake0.x*20=37|Snake0.y*20=462|Snake0.y*20=462) KillTimer(1); AfxMessageBox(soure); / s=0; /蛇身相撞判断 if(Snake0.len3) for(int sn=Snake0.len-1;sn0;sn-) if(Snake0.x*20=Snakesn.x*20&Snake0.y*20=Snakesn.y*20) KillTimer(1); AfxMessageBox(soure); / s=0; / pDC-SelectStockObject(WHITE_PEN); pDC-Rectangle(SnakeSnake0.len-1.x*20,SnakeSnake0.len-1.y*20,(SnakeSnake0.len-1.x+1)*20,(SnakeSnake0.len-1.y+1)*20); 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); CBrush DrawBrush=(RGB(100,100,100); CBrush *Drawbrush=pDC-SelectObject(&DrawBrush); pDC-Rectangle(Snake0.x*20,Snake0.y*20,(Snake0.x+1)*20,(Snake0.y+1)*20); pDC-SelectObject(DrawBrush); /判断吃豆的条件,撞到就吃 if(Snake0.x*20=Food.x*20&Snake0.y*20=Food.y*20) Snake0.len+; Food.isfood=1; SnakeSnake0.len-1.x=SnakeSnake0.len-2.x; SnakeSnake0.len-1.y=SnakeSnake0.len-2.y; /如果食物被吃了 就生成 if(Food.isfood=1) srand(unsigned)time(NULL); do for(int isfo=Snake0.len-1;isfo=0;isfo-) if(Snake0.x*20=Snakeisfo.x*20&Snake0.y*20=Snakeisfo.y*20) Food.x=rand()%25; Food.y=rand()%25; while(Food.x*2070|Food.y*20430|Food.y*20430); pDC-Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20); Food.isfood=0; CView:OnTimer(nIDEvent);4、 个人小结与体会 本次课程设计从一开始的迷茫的彷徨到最后的成功后的喜悦,可谓收获颇丰。 其中新浪博主泛音的博文对我有很大的帮助,开始我甚至不知道如何设置蛇身的各个参数,只能通过阅读博主的代码进行学习,尤其是Timer函数有些复杂。第一遍做完后感觉不太完善,因此做了些修改,包括更改背景、更改窗口大小、添加背景音乐、添加快捷键、优化图标、优化操控等。 不过程序还有一个问题,当食
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东工程职业技术学院《电力系统稳态分析》2024-2025学年第一学期期末试卷
- 儿童乐园行业发展方案
- 防水涂料热、碱、酸、人工气候老化处理试验记录
- 大学生职业生涯规划与就业创业指导(实践版)笔试题库 图形推理2
- 第三章 指数运算与指数函数(高效培优单元测试-提升卷)数学北师大版2019必修第一册(解析版)
- 秋季道德与法治五年级上册《美丽文字 民族瑰宝》简案
- 职业技术学院毕业设计(论文)与毕业答辩管理规定
- 论社会主义建设在探索曲折中发展
- 函授汉语言文学论文
- 建设工程项目全寿命的集成化管理探究
- 德龙咖啡机 EC680.R 中文说明书
- 《电工(5-3级)技能考核要素细目表及技能考核内容结构表》
- 心肌病基因检测指征
- 港式室内设计风格解析
- 未成年人法制教育体系构建
- 外研社英语一年级起点五年级上册知识点总结 重点句型 课文讲解
- 食品加工企业会计核算流程
- 生物质燃料颗粒可行性研究报告
- 《资产负债表(适用执行民间非营利组织会计制度的组织)》
- 网络安全教师培训会议
- 《发票发票知识培训》课件
评论
0/150
提交评论