C++课程设计-吃豆子游戏程序.doc_第1页
C++课程设计-吃豆子游戏程序.doc_第2页
C++课程设计-吃豆子游戏程序.doc_第3页
C++课程设计-吃豆子游戏程序.doc_第4页
C++课程设计-吃豆子游戏程序.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

桂林电子科技大学课程设计报告用纸面向对象程序设计课程设计题 目: 吃豆子游戏程序 院 系: 数学与计算科学学院 专 业: 信息与计算科学 姓名学号: 指导老师: 日 期: 2014 年 12 月 30 日心得体会:通过这次课程设计,我从对MFC的陌生到能熟练运用基本的函数,了解其编程的具体实现方法,我对于面象对向编程有了更深刻的认识,通过四个人的团队合作,我从主持谐调各方面工作,如听取各方面意见,看成员整理好的资料,到担任代码编写,学会了团队合作的重要性,团队合作在写大的程序时比单个人完成有很大的优点。我会继续在面向对象编程上下功夫,因为学无止境。摘 要MFC是Windows编程的面向对象化,是对Windows函数的简单封装,使用MFC编程可以在短时间内编写一个Windows程序,而不必写大量Windows代码,所以我使用MFC编写了一个吃豆子程序,该程序实现了一个能过使用方向键控制消除屏幕上存在的豆子的功能,当用户按键盘向上、下、左、右键或每格一秒钟,嘴的状态发生改变,或是从一个方向张开向另一个方向,或是由张开变成闭合状态,从而实现嘴一张一合前进,当嘴所经过位置有豆子,豆子被消除而不再出现,所有豆子被“吃”完时,程序弹出对话框“You win ,Exit?”,用户点确定后可退出程序。实现方法:嘴的张开与闭合分别用MFC的Pie和Ellipse函数实现,豆子被存储在一个标记数组中,豆子被吃时数组相应元素标记为零。在OnDraw()函数中画出每个豆子和嘴的原始位置,在响应键盘上下左右方向虚拟键VK_UP、VK_DOWN、VK_LEFT、VK_RIGTH的函数中控制豆子移动和嘴的方向,程序开始时在响应WM_CREATE消息的函数中设置一个TIMER,方向键消息和TIMER消息统一由一个判断函数处理从而实现自动前进时的沿当前方向前进。关键字:程序设计 豆子 MFC AbstractMFC is a Windows-based object-oriented programming, it is a simple package of Windows function , using the MFC programming can make us write a Windows program in a short time, without having to write a lot of Windows code, so I use MFC written a eat-beans program ,in this program we can use the arrow keys to control the mouth to move to eliminating the beans on the screen, when the user presses the keyboard up, down, left, right, or each time one second goes by, the state of the mouth changed, it change from one direction to another direction, or from an opening state to a closed state. So we can obtain a mouth moving forward with its lips keeping closing and opening, if a bean is in the way of the mouth, it will be eliminated by setting its element in the mark array as zero. when all beans have bean eaten, a dialog box prompts: You win, Exit?, after the user clicks OK , the game terminates. Implementation method: We can use the MFCs Pie function to draw a open mouth, while the Ellipse function to draw the closed mouth, all beans would be stored in a 2d array, if it exist ,we mark the corresponding element nonzero ,mouth and all beans can be drew in the OnDraw function of MFC, the mouth present direction can be changed by the direction message updated in the VK_UP, VK_DOWN, VK_LEFT, VK_RIGTHs and the self-define TIMERs response function, after that ,we can judge the next position the mouth should go according to the direction message, thus we get a mouth moving with its mouth open and closing alternately.Key words: programming Eat-beans MFC目 录引言CRC分析过程陈述程序介绍与展示程序测试.结果分析与总结参考文献引言在本次课程设计中,课题组主要是想通过吃豆子游戏的开发,让自身在软件开发的知识水平提升一个档次,特别是对软件开发形成一种概念,同时加强培养团队合作意识。这个课设的要求是要课题组用MFC编写一个吃豆子的小游戏,这个游戏是用方向键控制一个”小怪兽”移动并吃掉界面上的所有的“小豆子”,随后经历了一个星期的分析与讨论后,课题组正式进入课题系统实质性的开发阶段。课题组把程序开发的过程分为程序分析、程序设计、程序实现和程序测试四个阶段,在程序分析中,对程序进行了可行性分析、需求分析以及功能分析,在结束这阶段的工作后转入系统设计阶段;在系统设计中,主要是明确整个程序的界面模块、算法实现、以及极限问题等;系统的实现,历经一个半月,主要是实现系统设计中的所有模块功能;最后利用了一周的时间对程序中的各个模块进行了测试,最终完成系统的测试;在完成开发工作后,课题组的任务立刻转向课设论文的写作,课题组各成员课设论文的写作内容原则上就是其在设计开发中所承担的主要任务,最后总结成了本篇论本。一、 CRC分析过程陈述CEatBeanView类:dispose()对TIMER发送的消息和向上,向下,向左,向右键来响应判断的主要处理函数Draw_All_Beans()画所有的存在的豆子Draw_One_Bean(int,int)画一个豆子Draw_Background_Blocks画 背 景 网 格Draw_Main()负 责 画 程 序 运 行 中 个 一 个 帧 , 包 括 画 背 景 , 画 所 有 豆 子 , 画 嘴 Draw_Mouth ()画 嘴Draw_Mouth_Closing ()画嘴关的状态Draw_Mouth_Open()画嘴开的状态Draw_One_Bean()画 以 (x,y)为 坐 标 的 豆 子Draw_Segment()画 一 条 线 段Generate_All_Rand_Beans生 成 随 机 的 所 有 豆 子 用 于 初 始 化Generate_Rand_Array生 成 乱 序 随 机 数 组Generate_Rand_Positive_Integer生 成 最 大 值 为 max的 正 整 数OnCreateWM_CREATE消息响应函数OnDraw用于在程序客户区绘图其中dispose()函数用得最多。OnMoveleft,OnMoveright都调用dispose()函数来处理消息。按键向上,向下,向左,向右,消息响应函数:函数功能void OnMoveleft();向左键的消息处理函数void OnMoveright();向右键的消息处理函数void OnMovedown();向下键的消息处理函数void OnMoveup();向上键的消息处理函数void OnCreate();WM_CREATE消息处理函数void OnTimer ();WM_TIMER的消息处理函数void OnTimetogo ();自定义消息WM_TIMETOGO的消息处理函数嘴的图形是一个圆形与一个扇形交替显示,圆形表示嘴闭合的情况,扇形表示嘴张开的形状;绘制圆形和扇形的函数为CDC类的成员函数Ellipse和Pie;豆子可以存储在一个数组中,数组的数据是每个豆子圆心的坐标;在OnDraw()函数中画出每个豆子和嘴的原始位置,键盘上下左右方向键的虚拟键码分别为VK_UP、VK_DOWN、VK_LEFT、VK_RIGTH,在程序开始时的WM_CREATE的响应函数中设置一个TIMER,在CView的派生类中对方向键和TIMER消息用统一函数处理,dispose中处理为:若是TIMER消息则嘴前进方向与当前方向一致再处理前进,若是方向消息则嘴前进方向为方向键所指方向。1.3 功能说明一、 UML类图数据、分析此程序的设计按面向对象的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。本游戏实现了一个能过使用方向键控制消除屏幕上存在的物体(即所谓嘴)来到达另一个地方来消除另一地方存在的物体即所谓豆子,嘴有张合状态,张开时可以有四个方向的张开,类似一个大嘴巴。闭合时就是一个圆形。嘴若是接受方向消息时,方向消息与当前方向不一致,则嘴在转向过后保持开的状态。当所有豆子被吃完后,弹出对对话框显示:“You win,Exit?”,用户写确定后可退背景画法实现先实现画一条线段的函数void CEatBeanView:Draw_Segment(int pax,int pay,int pbx,int pby)CDC *pDC = GetDC();pDC-MoveTo(b1paxpay);pDC-LineTo(b1pbxpby);,再画横向和纵向的各从1到length+1和width+1的线段,从而实现画背景网络:豆子画法实现1、 嘴张开实现嘴张开有四个方向,要实现可以使用CDC类的Pie函数画一个张开角度为2700的扇形。void CEatBeanView:Draw_Mouth_Open(int x, int y)CDC*pDC = GetDC();CBrush*p;p = (CBrush*)pDC-SelectStockObject(LTGRAY_BRUSH);switch(Current_Direction)/*查 看 当 前 嘴 的 方 向 */case u:/*方 向 向 上 的 情 况 */pDC-Pie(bx, by, bx+1, by+1,bx+1, by+1, bx, by+1);break;case l:/*方 向 向 左 的 情 况 */pDC-Pie(bx, by, bx+1, by+1,bx, by+1, bx, by);break;case d:/*方 向 向 下 的 情 况 */pDC-Pie(bx, by, bx+1, by+1,bx, by, bx+1, by);break;case r:/*方 向 向 右 的 情 况 */pDC-Pie(bx, by, bx+1, by+1,bx+1, by, bx+1, by+1);break;2、 画嘴巴的实现画嘴巴的关闭可以用Ellipse函数.void CEatBeanView:Draw_Mouth_Closing(int x, int y)CDC*pDC = GetDC();CBrush *p;p = (CBrush*)pDC-SelectStockObject(LTGRAY_BRUSH);pDC-Ellipse(bx,by,bx+1,by+1);3、 画豆子的实现画一个豆子的实现:void CEatBeanView:Draw_One_Bean(int x, int y)CDC*pDC = GetDC();CBrush *p;p = (CBrush*)pDC-SelectStockObject(LTGRAY_BRUSH);pDC-Ellipse( bx,by, bx+1, by+1);画所有豆子:void CEatBeanView:Draw_All_Beans()for (i = 1; i length + 1; i+)for (j = 1; j = 1 & pre_position.x = 1 & pre_position.y = width)是则判断下一点是否有豆子, if(Beans_Arraypre_position.xpre_position.y=1) nbeans-;将下一点的豆子所在标记数组元素标记置零, Beans_Arraypre_position.xpre_position.y = 0; 设置下一点到达区域:pre_rect.bottom = bpre_position.y;pre_rect.top = bpre_position.y+1;pre_rect.left = bpre_position.x;pre_rect.right = bpre_position.x+1; 再设置嘴位置为下一点预到达位置(因确定不越界):Mouth_Position = pre_position; 当方向消息不是当前消

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论