




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 号: 课 程 设 计课程名称可视化编程(VC)学 院计算机科学与技术学院专 业软件工程班 级姓 名指导教师岑 丽20132014学年 第2学期目录基于MFC的贪吃蛇游戏设计与实现.1一课设要求.1二简单操作及功能说明.1三模块功能说明.24 运行结果.75 设计过程中自己所遇到的问题及相应的解决方法和解决过程.86 心得体会.107 参考资料.108 附录(主要代码).11基于MFC的贪吃蛇游戏设计与实现1 课设要求:1. 游戏界面设计2. 食物的初始化3.游戏开始以及具体实现2 简单操作及功能说明:这是基于MFC的一个简单的贪吃蛇游戏的制作。他的具体实现在CView类中实现。上图为运行的结果。(1)有两个简单的选项。游戏的开始(start追寻荣耀吧);暂停(歇一会儿呗。);继续(继续圣战吧兔宝宝!);离开(先撤了)。由于这部分功能没什么用,就让他失效了。(2)能够实现简单的上下左右操作。3 模块说明与介绍:1. 游戏开始功能void CSnakeView:OnStart() SetTimer(1,2500,NULL); AfxMessageBox(准备好 游戏马上开始!);2. 游戏暂停功能void CSnakeView:OnPause() KillTimer(1); AfxMessageBox(stop the game );3. 游戏继续功能void CSnakeView:OnContinue() SetTimer(1,500,NULL);4. 游戏退出功能void CSnakeView:OnExit() AfxMessageBox(我会想念你的主人.); exit(0);5. 撞界判断if(Snake0.x*20=37|Snake0.y*20=462|Snake0.y*20=462) KillTimer(1); AfxMessageBox(soure); / s=0; 6.蛇身相撞判断if(Snake0.len3)for(int sn=Snake0.len-1;sn0;sn-)if(Snake0.x*20=Snakesn.x*20&Snake0.y*20=Snakesn.y*20KillTimer(1);AfxMessageBox(soure);/s=0;7.行走方向判断 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(255,192,203); CBrush *Drawbrush=pDC-SelectObject(&DrawBrush);pDC-Rectangle(Snake0.x*20,Snake0.y*20,(Snake0.x+1)*20,(Snake0.y+1)*20);pDC-SelectObject(DrawBrush);8.判断吃豆的条件,撞到就吃 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; 9.如果食物被吃了 就生成 if(Food.isfood=1) srand(unsigned)time(NULL); dofor(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; 4 运行结果开始游戏食物的初始化碰壁死 显示得分咬到自己死 显示得分5 设计过程中遇到的问题及相应的解决方法和解决过程。第一次做贪吃蛇,可以说是问题很多,在网上高人的指导和同学的帮助下,还是遇到过这些问题。(1) 蛇和食物的全局变量定义完后,由于对MFC的各个类不了解,一时不知道放在哪个代码中。后来意识到游戏的功能在cview中实现的,就把变量定义放入了csnakeview中。(2) 游戏的继续与退出功能。void CSnakeView:OnExit() AfxMessageBox(我会想念你的主人.); exit(0);void CSnakeView:OnContinue() SetTimer(1,500,NULL);之前定义两个功能的顺序刚好反一下,结果编译出来的结果一直错误。试着改了很多参数都没有用。后来才发现不是顺序的问题,是游戏继续功能的类向导忘记建立了。(3) 先前想把蛇身与食物的颜色区分开,但是发现运行之后,蛇身的初始颜色与之后的颜色不一样,最后还是把蛇身与食物改成了相同的颜色。(4) 修改窗口左上角图标。先前不知道如何修改图标,就在IDR_MAINFRAME中手画图标,看了网上的教程之后,就用ico修改了一个图标引入Icon中,并且在IDD_ABOUTBOX中也一并修改了图标,但是执行之后发现图标变是变了,变成可执行文件的标准图标了。后来把Icon中原有的图标删除后,重命名新的图标,把他改成原来图标的名字,就成功了。6 心得体会由于平时上课不够认真,自己课下看书经常找不到重点,这导致我在做课程设计时磕磕盼盼,开始做的时候,一发现编译错误,又不知道错在哪里,就把类里面的代码挨个点开,漫无边际的检查错误,看了半天没发现错误在哪里,也不认识代码讲的是什么,经过慢慢的摸索和不断的错误,不懂就问同学,上网查资料,终于完成了。我觉得课程设计是一个很好的学习契机,他是从功能和应用出发的,从功能和应用我们可以知道我们需要掌握哪些知识,让我们直接从实践中学习,发现错误,并针对应用去学习,并改正错误,而且这样会让我们对知识有更深的印象和记忆,这也是对上课知识的补充和强化,更贴近应用领域,提高了我们动手实践的能力。在这次课程设计中,我完成了贪吃蛇这一个小游戏,但是更多的,我知道了如何从功能和应用出发去完成MFC小游戏,也知道发现问题后,解决一类问题的方法,而不是一个问题,我觉得这是别的地方很难学来的,在这次课程设计学习后,我感觉真的收获很大。七参考资料:1.Visual c+ 面向对象与可视化程序设计(第2版) 清华大学出版社 黄维通编著2./renyhui/article/details/21463517(MFC对话框贪吃蛇小游戏)3./s/blog_6cbbf04b0100m49k.html(手把手教MFC贪吃蛇)附录:程序的主要代码/ snakeView.cpp : implementation of the CSnakeView class#include stdafx.h#include snake.h#include snakeDoc.h#include snakeView.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifstruct Snake int x,y; int len; int direct;Snake50;struct Food int x; int y; int isfood;Food;/ CSnakeViewIMPLEMENT_DYNCREATE(CSnakeView, CView)BEGIN_MESSAGE_MAP(CSnakeView, CView)/AFX_MSG_MAP(CSnakeView)ON_WM_KEYDOWN()ON_WM_TIMER()ON_WM_RBUTTONDOWN()ON_COMMAND(IDM_START, OnStart)ON_COMMAND(IDM_PAUSE, OnPause)ON_COMMAND(IDM_CONTINUE, OnContinue)ON_COMMAND(IDM_EXIT, OnExit)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CSnakeView construction/destructionCSnakeView:CSnakeView()/ TODO: add construction code hereCSnakeView:CSnakeView()BOOL CSnakeView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CSnakeView drawingvoid CSnakeView:OnDraw(CDC* pDC)CSnakeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here CBrush backBrush(RGB(123,104,238); CBrush* pOldBrush = pDC-SelectObject(&backBrush); CRect rect; pDC-GetClipBox(&rect); pDC-PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY); pDC-SelectObject(pOldBrush); pDC-Rectangle(19,19,501,501); oninit();/ CSnakeView printingBOOL CSnakeView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CSnakeView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CSnakeView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ CSnakeView diagnostics#ifdef _DEBUGvoid CSnakeView:AssertValid() constCView:AssertValid();void CSnakeView:Dump(CDumpContext& dc) constCView:Dump(dc);CSnakeDoc* CSnakeView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CSnakeDoc);return (CSnakeDoc*)m_pDocument;#endif /_DEBUG/ CSnakeView message handlersvoid CSnakeView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) switch(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);void CSnakeView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call default 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(bravo!score:%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(255,192,203); 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);void CSnakeView:OnRButtonDown(UINT nFlags, CPoint point) CString str; str.Format(%d,%d,point.x,point.y); AfxMessageBox(str); CView:OnRButtonDown(nFlags, point); CView:OnRButtonDown(nFlags, point); CView:OnRButtonDown(nFlags, point);void CSnakeView:oninit() CDC *pDC=GetDC(); CBrush DrawBrush=(RGB(255,192,203); CBrush *Drawbrush=pDC-SelectObject(&DrawBrush); for(int i=0;iRectangle(Snakei.x*20,Snakei.y*20,(Snakei.x+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车行业行政年终总结报告
- 教师用餐补充协议书7篇
- 《腊八粥》沈从文课件
- 公司生产安全培训总结课件
- 《老人与海》书评课件
- 分包安全用电协议模板6篇
- 山西2025年招标采购从业人员考试(招标采购专业实务初级)试题库及答案
- 羚萌直播运营工作总结
- 铁路安全管控条例解读
- 电影拍摄著作权合同5篇
- 水利水电三检表全 (一)
- 《高铁信号连锁设备》课件-(一) 平面布置图的识读
- 志愿者招募与管理优化路径-全面剖析
- 塔拉韦斯特弗《你当像鸟飞往你的山》中英互译
- 产品质量管理及控制作业指导书
- 前端工作总结答辩
- 公积金提取申请书
- 全国2024年10月自学考试财务报表分析(一)试题和答案
- 教师网络安全专项培训
- 「见新机·聚增长」2025哔哩哔哩手机PC行业白皮书
- 公司博士后工作站管理制度(5篇)
评论
0/150
提交评论