版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
贪吃蛇试验汇报21143049信计1212許圣
概述本次課程设计我运用MFC制作了一种贪吃蛇游戏,顾客可以通過上下左右控制蛇的移動方向,游戏會根据贪吃蛇身体的長度自動增長难度。在游戏過程中,會记录运行時间和所得分数,我還添加了bmp格式的图片作為游戏背景。功能描述2.1设计思绪本软件重要由三個模块构成,它們分别是蛇运行模块,初始化处理模块和显示模块。它們的作用分别是,初始化处理:初始化蛇頭位置与第一种點位置;蛇运行模块:控制蛇的上下左右运行,并對蛇的运行状态進行判断,根据(吃點、未吃點、死亡等)状态進行不一样的子程序模块处理以及游戏者与否能晋级的判断;显示模块:根据對蛇和點子的目前状态進行動画显示。重要有如下环节:定义蛇类和食物类,初始化贪吃蛇各项组员变量,包括图像的出目前屏幕的初始位置,長度,以及蛇的行走方向。食物类的定义包括出現的初始位置,以及食物与否被吃掉的判断。用数组初始化長度為4的贪吃蛇,并且默认出現一种食物。在CView类上运用MFC提供的Windows消息中WM_TIMER消息,运用OnTimer()函数让系统提供一种時钟节拍,更新游戏详细游戏实現,包括蛇撞到自已和围墙都将使游戏結束,判断吃豆等,其中還包括根据蛇的長度来進行游戏难度的变化。详细键盘游戏操作运用到Windows消息响应中的WM_KEYDOWN,用OnKeyDown()来响应玩家的实际操作。添加了bmp格式的图片作為游戏背景。整体流程图如下图1。
设置自動移動定期器和增長食物定期器设置自動移動定期器和增長食物定期器游戏開始桌面初始化初始化蛇頭和蛇移動方向随机初始化一种食物到桌面蛇移動蛇吃食?蛇增長继续?蛇死亡?桌面上随机生成食物退出程序是是否否图1:系统流程图
2.2功能简介运行程序,出現围墙界面,一条蛇在密闭的围墙内,在围墙内随机出現一种食物,出現bmp格式图片的背景。點击“游戏->游戏開始”,游戏開始。還可暂停游戏继续游戏開始後,界面右下角會同步游戏得分。通過四個方向键控制蛇的运動方向,吃掉随机出現的豆子,若不小心碰到墙壁或者与自身相交,则该轮游戏結束。游戏會根据蛇身的長度自動调整难易程度。详细设计3.1重要函数voidCSnakeView::OnDraw(CDC*pDC)//显示背景图片voidCSnakeView::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)//按照顾客的按键来控制蛇的移動voidCSnakeView::OnTimer(UINTnIDEvent)//根据蛇的長度来進行SetTimer()函数的定义,可以根据長度来進行游戏难度的设定。//撞界判断//蛇身相撞判断//抹掉蛇行走的痕迹//判断吃豆的条件,撞到就吃//假如食物被吃了就生成voidCSnakeView::oninit()//進行贪吃蛇外观的初始化voidCSnakeView::OnGameStart()//開始游戏voidCSnakeView::IniAim()//初始化目的的位置voidCSnakeView::IniGame()//初始化游戏voidCSnakeView::ReDisplay(CPointpPoint)boolCSnakeView::ReadBmp(char*bmpName)3.2重要功能简介:3.2.1背景图片加载:定义变量和函数用于讀取bmp图片做准备:BITMAPINFOHEADERhead; unsignedchar*pBmpBuf; boolReadBmp(char*bmpName);定义ReadBmp函数用于讀取bmp格式的图片,在初始化的時候调用该函数ReadBmp("BootPic.bmp"),来讀取背景图片。在OnDraw函数中实現對图片的刷新:CRectrec; GetClientRect(&rec); SetStretchBltMode(pDC->m_hDC,HALFTONE); SetBrushOrgEx(pDC->m_hDC,0,0,NULL); StretchDIBits(pDC->m_hDC,rec.left,rec.top,rec.Width(),rec.Height(),0,0,head.biWidth,head.biHeight,pBmpBuf,(BITMAPINFO*)&head,DIB_RGB_COLORS,SRCCOPY);3.2.2初始化游戏:重要初始化蛇的初始化位置,实物的初始化位置:voidCSnakeView::IniGame(){ m_nLeft=20; m_nTop=20; m_nWidth=40; m_nHeight=30; m_nSize=10; m_nGameStatus=0; m_nDirect=1; m_nCount=0; m_aBody.RemoveAll(); m_aBody.Add(CPoint(2,7)); m_aBody.Add(CPoint(2,6)); m_aBody.Add(CPoint(2,5)); m_aBody.Add(CPoint(2,4)); m_nTime=0; m_nTime1=0; IniAim();}3.2.3控制游戏操作:键盘消息是顾客通過键盘发出的消息,是用来控制蛇的爬行方向。這個消息将會用到OnKeyDown()函数。OnKeyDown()函数根据顾客按下的按键执行對应的語句块,即通過if判断語句来实現。下面以RIGHT键為例進行阐明。當按下RIGHT键後,函数执行第一种if分支,在该分支中,首先判断蛇与否是向左走的,假如蛇是向左走的,则按右键無效,由于蛇不能“穿過”自已的身体。在满足蛇不是向左走的条件後,進入该分支,启動与该方向對应的時钟函数SetTimer,SetTimer()通過不一样的ID号来执行OnTimer的不一样分支,同步杀死其他時钟函数,并對蛇的运行方向做重新標识。voidCSnakeView::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags){ //TODO:Addyourmessagehandlercodehereand/orcalldefault switch(nChar) { case38: m_nDirect=4; break; case40: m_nDirect=3; break; case37: m_nDirect=2; break; case39: m_nDirect=1; break; } CView::OnKeyDown(nChar,nRepCnt,nFlags);}voidCSnakeView::OnTimer(UINTnIDEvent){ //TODO:Addyourmessagehandlercodehereand/orcalldefault m_nTime1++; if(m_nTime1==10) { m_nTime++; m_nTime1=0; Invalidate(); } CPointuPoint=m_aBody.GetAt(0); intuTag=0; switch(m_nDirect) { case1: uPoint.y++; if(uPoint.y>=m_nWidth) uTag=1; break; case2: uPoint.y--; if(uPoint.y<0) uTag=1; break; case3: uPoint.x++; if(uPoint.x>=m_nHeight) uTag=1; break; case4: uPoint.x--; if(uPoint.x<0) uTag=1; break; } if(uTag==0) { for(inti=0;i<=m_aBody.GetUpperBound();i++) { CPointuPoint1=m_aBody.GetAt(i); if(uPoint1.x==uPoint.x&&uPoint1.y==uPoint.y) { uTag=1; break; } } } if(uTag==0) { m_aBody.InsertAt(0,uPoint); ReDisplay(uPoint); if(uPoint.x==m_pAim.x&&uPoint.y==m_pAim.y) { m_nCount++; IniAim(); Invalidate(); } else { CPointuPoint1=m_aBody.GetAt(m_aBody.GetUpperBound()); m_aBody.RemoveAt(m_aBody.GetUpperBound()); ReDisplay(uPoint1); } } else { KillTimer(1); AfxMessageBox("Fail!!!"); } CView::OnTimer(nIDEvent);}试验成果贪吃蛇進入界面如下图所示贪吃蛇的玩法如图数字键盘下的方向键分别為上下左右,進行控制,使蛇頭触碰到食物。游戏結束界面如上图所示,游戏結束後,會显示游戏的最终得分。總結這次課程设计,我选择用MFC编写一种贪食蛇的程序。在编写程序之前,我只有很少的有关MFC的程序设计知识,因此,在刚開始,我碰到了诸多困难。為此,我在网上看了許多有关贪食蛇的算法,测试他人的代码==,并學以致用。才開始写我的贪食蛇,整合學习的東西并且加了诸多附加功能。這次課程设计锻炼了我的動手能力。通過完毕贪食蛇游戏的程序设计,累积了我的实际编程經验,也提高了我独立处理問題的能力。由于所學有限,經验局限性,代码常常出現錯误,最终终于可以對的的运行。但在過程中碰到了不少問題。例如在贪吃蛇行進中急转死亡的bug。食物生成不出来的問題食物長在蛇的身上--。。。,界面优化插入图片當做背景的問題,最终通過查阅资料、請教他人修改了参数才得以处理。此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中建新员工入职一百天成长
- 室内设计色彩分析
- 心脏疾病医疗科普
- 耳鼻喉科咽喉炎康复指南
- 风湿免疫科类风湿关节炎康复训练指南培训方案
- 生产业务的会计制度设计
- 景观设计转正工作汇报与规划
- 预防医学科疫苗接种管理详细指南
- 豆奶包装设计
- Spark日志处理案例分析课程设计
- 2026年CAAC无人机理论考试题库及答案(轻巧夺冠)
- 2026届江苏南通市高三语文二模作文导写
- 甲状腺功能亢进症诊疗中国指南(2026 版)
- 期末复习课件2025-2026学年统编版八年级历史下册
- FEV咨询-2025中国汽车产业分析报告 2025 China automotive industry analysis report
- 2026河北邯郸市劳动就业服务局招聘公益性岗位人员考试参考题库及答案解析
- 2026贵州贵阳贵安卫生健康系统事业单位招聘231人考试备考试题及答案解析
- 2025四川省成都市中考物理试题(解析版)
- 2026年哈三中高三下学期三模数学试卷及答案
- 2026年传统工艺短视频拍摄技巧
- 2025年新疆八年级地理生物会考真题试卷(含答案)
评论
0/150
提交评论