版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE徐州师范大学物电学院课程设计报告课程名称:计算机程序设计实训题目:AngryBirds记忆翻牌游戏专业班级:11物41学生姓名:杨国栋学生学号:11224024日期:2013.12.28指导教师:赵纪平物电学院教务部印制说明:1、报告中的第一、二、三项由学生在课程设计开始前填写,由指导教师指导并确认签字。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩,并填写成绩评定表。3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。答辩小组成员应由2人及以上教师组成。答辩后学生根据答辩情况填写答辩记录表。4、报告正文字数一般应不少于3000字,也可由指导教师根据本门课程设计的情况另行规定。5、平时表现成绩低于6分的学生,取消答辩资格,其该课程设计成绩按不及格处理。6、课程设计完成后,由指导教师根据完成情况写出总结。7、此表格式为徐州师范大学物理与电子工程学院提供的基本格式,指导教师可根据本门课程设计的特点及内容做适当的调整。一、课程设计目的、任务和内容要求:《计算机语言程序设计》是一门以编程实践为主的专业课,目的在于培养学生利用计算机语言进行软件开发所必需的基本思想和基本技能,进一步提高综合应用计算机语言的各种编程知识和技巧进行程序设计的能力,通过本次课程设计,学生应能达到具备设计功能较为复杂的应用程序的能力,同时培养学生自主学习和独立创新的精神。任务如下:1.进行需求分析和概要设计,给出流程图。2.写出详细设计,熟悉其中采用的关键技术。3.给出具体的编码实现并调试。4.写课程设计报告提交源程序。内容要求:设计并完成软件系统。要求:1.应具有简洁友好的用户界面。2.要求软件系统的功能完整。3.要求程序具备正确性,可读性和运行的高效性。
二、进度安排:第1~3天:查找资料,进行需求分析和概要设计;第4~6天:各模块的详细设计;第7~12天:软件实现与调试;第13~14天:写课程设计报告并提交源程序。三、主要参考文献:1.郑阿奇.Vc++实用教程(第四版).电子工业出版社,20112.孙鑫.VC++深入详解.电子工业出版社.3.侯俊杰.深入浅出MFC.华中科技大学出版社.20014.陈元琰等.vc++6.0实用技术与案例.清华大学出版社.2001指导教师签字:年月日徐州师范大学物理与电子工程学院课程设计报告-PAGE14-徐州师范大学物理与电子工程学院课程设计报告-PAGEI-目录摘要………………………,Abstract…………………,...1绪论…….…….………..1.1设计背景………………,1.2设计目的…………………..………….,.1.3设计意义………………..,1.4需解决的问题…………,,,1.5风险评估………………..2设计方案简述………..………………..2.1需求分析…………………..………….…2.2市场分析…………………..………….…2.3系统总体设计……………..………….…2.4各子类系统设计………………………..3详细设计……………..…..3.1类与结构…………………..………….…3.1系统生成的类…………..………….……4设计结果及分析………………..…….………………...4.1测试总结……….………………..………4.2测试记录…………………..………….…4.3技术难点…………………5总结……..…………………..………….…参考文献…….………………..………………..………….…摘要记忆翻牌游戏的设计能有效的是玩家在休闲时间达到放松的目的,在深入的学习了vc++实用教程后,同时,在对休闲游戏市场的分析,用其MFC做一个此类的小游戏,不仅是对自己学习的检验,使自己得到锻炼的机会,增强编程能力,为以后找工作奠定扎实的基础。关键词:记忆翻牌;游戏;编程;MFC。AbstractMemoryflopgamedesigncaneffectivelybeplayersintheleisuretimetorelaxpurpose,in-depthstudyofthevc++,Afterthepracticalcourse,whileinthecasualgamemarketanalysis,withitsMFCtodoakindofsmallgameisnotonlyatestoftheirownlearning,sothattheycanreceivetrainingopportunitiestoenhancetheprogrammingabilitytolayasolidfoundationtofindajobforthefuture.Keywords:Memoryflopgame;Game;Programming;MFC。-PAGE1-1绪论1.1设计背景在大多数小组都选择计算器等一些应用程序的情况下,我选择了制作游戏,而在休闲游戏中,翻牌类游戏涉及较少,所以我选择记忆翻牌游戏软件。由于市场上的翻牌游戏大体都是一样的框架,所以我做出几点创新:1.进行人机对战。2.增加难度选择。加强了游戏的耐玩性,增强了市场上的竞争能力。在刚接触MFC的情况下,依然选择了并不熟悉翻牌游戏的制作,更多的是因为希望迎接挑战。1.2设计目的“记忆翻牌游戏”将重点放在放松精神和训练短时记忆力上,以期获得大众的青睐,缓解大众的疲劳,是大众得到休闲娱乐,同时检验自己对于vc++的学习,增强自己的编程能力,达到实战的目的。1.3设计意义目前市面上有不少类似的小游戏,需要有独到之处才能吸引受众的眼球。选择了目前热度较高的“愤怒的小鸟”作为整个游戏的背景,辅以一些欢快的音乐。只要令玩家放松,休闲,则增强市场竞争力。1.4需解决的问题在开发的过程中,将会碰到几个难点:1.为避免玩家很快玩腻,设置了难度等级;2.为了给游戏增加挑战性,设置了电脑AI玩家,并且电脑会具备记忆能力;3.对于翻开相同的牌时,设计把它消除。 对于第一个难点:需要响应玩家在对话框中点击的按钮消息,在绘制区域的时候选择矩形的排列和个数。对于第二个难点:需要设计在玩家点击翻牌指令后,插入一个延时函数,再获得一张卡片的坐标,存入一个用于记录计算机翻过的牌的数组,并对之前存入数组的牌逐个检索,分别对有或没有与此次翻牌内容相同的牌进行处理。有相同的牌之后将会在下次选择这两张牌。对于第三个难点:要能够比较两次翻牌的结果,并能分别处理,是消除还是重新绘制。1.5风险评估此类小游戏的市场竞争较为激烈,因而此软件的推出可能会陷入竞争利润的泥潭,埋没在大量同类游戏之中。同时,此游戏较为简单易玩,同时具有很强的吸引力,可能会导致部分青少年沉迷其中,消耗大量宝贵时间,耽误学业2设计方案简述2.1需求分析目前市面上有不少类似的小游戏,所以吸引用户就必须靠程序的特别之处。因而我们选择了目前热度较高的“愤怒的小鸟”作为整个游戏的背景,并配以轻松欢快的音乐以取得放松的效果,从而满足用户在闲余时间放松精神的需求。2,2市场分析随着工作和生活压力的增大,人们的精神始终处于高度紧张状态,疲劳感和记忆力衰退顺之成为大众当今面临的几个主要问题之一,因而我们这个“记忆翻牌游戏”将重点放在放松精神和训练短时记忆力上,以期获得大众的青睐。2.3系统总体设计游戏能够实现人机互动,玩家通过点击翻牌与电脑AI进行比赛。在此游戏中实现了难度等级的设定,玩家可以根据自己的喜好选择牌堆的数量。游戏操作中,实现了翻牌数量最大为两张,并在翻出相同的牌之后进行消去,不符合时翻回的功能。在整个游戏过程中进行积分统计,在消去所有的牌之后将玩家与电脑AI的得分比较,决出胜负。整个游戏精心设计了好看的画面和欢快的音乐,有着更好的休闲娱乐的效果。24各子系统设计1.窗口显示:显示选择界面,游戏界面(牌的翻转、图片、文字与背景),游戏结束后结果界面。2.Manager管理:构造并显示牌堆,AI智能翻牌,判断翻牌是否消除,得分统计,判断结果。3.音乐效果。3详细设计3.1类与结构1.classManager//游戏整体管理类{public: voidShowCurrentGUI(CDC*pDC,CWnd*pWnd);//显示得分 intSingleCardShow(CDC*pDC,CPointpoint,CWnd*pWnd);//显示牌面 intGetCardNums();//获取牌的序号 intGetColumns();//获取牌的列号 intGetRows();//获取牌的行号 Manager():rows(0),columns(0),CardNums(0),CardDouble(NULL),pCardActiveList(NULL),pCardList(NULL),pRobotRememberList(NULL),DoubleFlag(0),MatchedCardPairNums(0),MismatchedCardPairNums(0),Created(false),ClientScore(0),IsRobotChance(false){}//构造函数 voidCreate(intx,inty);//根据玩家选择生成牌堆结构 virtual~Manager();//析构函数 boolRobotDoMatch(CDC*pDC,CWnd*pWnd);//电脑AI进行选牌 boolIsRobotChance;//判断电脑是否选牌private: voidShowResult();//显示结果 voidGetRand(intdown,intup,int&n);//获取随机翻牌的随机数 intClientScore;//玩家得分 voidDrawRect(CDC*pDC,boolactive,intcolumn=0,introw=0);//显示单张牌区域 boolIsCardMatch(Card*pCardDouble);//判断是否匹配 intGetRand();//获取随机数,范围为[1,CardNums) boolCreated;//是否已经构造游戏 intMatchedCardPairNums;//已匹配牌的号码 intMismatchedCardPairNums;//未匹配牌的号码 intDoubleFlag;//连续点击不同图片的个数 Card*pCardList;//记录已翻出的牌 Card*pCardActiveList;//记录正在翻出的牌 Card*pRobotRememberList;//电脑AI记录翻开的牌 Card*CardDouble;//记录进行比较配对的牌 introws;//行号 intcolumns;//列号 intCardNums;//牌号};2.classNewDialog:publicCDialog//窗口类,继承CDialog类{public: intcolumns;//列号 introws;//行号 NewDialog(CWnd*pParent=NULL);//构造函数protected: CBrushm_brush;//画刷 DECLARE_MESSAGE_MAP()};3.structCard{ Card():row(0),column(0),ID(0){} voidSetPrimitive(){row=0;column=0;ID=0;}//设置为翻转原始图片 voidSetDisappear(){row=0;column=0;ID=-1;}//设置以翻转消除图片 introw;//行号 intcolumn;//列号 intID;//临时图片的ID};3.2系统生成的类4.classCAboutDlg:publicCDialog//继承CDialog生成的CAboutDlg类{public: CAboutDlg();//DialogData //{{AFX_DATA(CAboutDlg) enum{IDD=IDD_ABOUTBOX}; //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //{{AFX_MSG(CAboutDlg) //Nomessagehandlers //}}AFX_MSG DECLARE_MESSAGE_MAP()};5.classCMainFrame:publicCFrameWnd//继承CFrameWnd生成的CMainFrame类{ protected://createfromserializationonly CMainFrame(); DECLARE_DYNCREATE(CMainFrame)//Attributespublic://Operationspublic://Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CMainFrame) virtualBOOLPreCreateWindow(CREATESTRUCT&cs); //}}AFX_VIRTUAL//Implementationpublic: virtual~CMainFrame();#ifdef_DEBUG virtualvoidAssertValid()const; virtualvoidDump(CDumpContext&dc)const;#endifprotected://controlbarembeddedmembers //CStatusBarm_wndStatusBar; //CToolBarm_wndToolBar;//Generatedmessagemapfunctionsprotected: //{{AFX_MSG(CMainFrame) afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct); //}}AFX_MSG DECLARE_MESSAGE_MAP()};6.classCPairClientApp:publicCWinApp//继承CWinApp生成的CPairClientApp类{public: CPairClientApp();//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CPairClientApp) public: virtualBOOLInitInstance(); //}}AFX_VIRTUAL//Implementation //{{AFX_MSG(CPairClientApp) afx_msgvoidOnAppAbout(); //NOTE-theClassWizardwilladdandremovememberfunctionshere. //DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG DECLARE_MESSAGE_MAP()};7.classCPairClientDoc:publicCDocument//继承CDocument生成的CPairClientDoc类{protected://createfromserializationonly CPairClientDoc(); DECLARE_DYNCREATE(CPairClientDoc)//Attributespublic://Operationspublic://Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CPairClientDoc) public: virtualBOOLOnNewDocument(); virtualvoidSerialize(CArchive&ar); //}}AFX_VIRTUAL//Implementationpublic: virtual~CPairClientDoc();#ifdef_DEBUG virtualvoidAssertValid()const; virtualvoidDump(CDumpContext&dc)const;#endifprotected://Generatedmessagemapfunctionsprotected: //{{AFX_MSG(CPairClientDoc) //NOTE-theClassWizardwilladdandremovememberfunctionshere. //DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG DECLARE_MESSAGE_MAP()};8.classCPairClientView:publicCView//继承CView生成的CPairClientView类{protected://createfromserializationonly CPairClientView(); DECLARE_DYNCREATE(CPairClientView)//Attributespublic: CPairClientDoc*GetDocument();//Operationspublic://Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CPairClientView) public: virtualvoidOnDraw(CDC*pDC);//overriddentodrawthisview virtualBOOLPreCreateWindow(CREATESTRUCT&cs); protected: virtualBOOLOnPreparePrinting(CPrintInfo*pInfo); virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo); virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo); //}}AFX_VIRTUAL//Implementationpublic: ManagermyManager; virtual~CPairClientView();#ifdef_DEBUG virtualvoidAssertValid()const; virtualvoidDump(CDumpContext&dc)const;#endifprotected://Generatedmessagemapfunctionsprotected: //{{AFX_MSG(CPairClientView) afx_msgBOOLOnEraseBkgnd(CDC*pDC); afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint); afx_msgvoidOnNewGame();afx_msg LRESULTOnMyMessage(WPARAMwParam,LPARAMlParam); afx_msgvoidOnTimer(UINTnIDEvent); //}}AFX_MSG DECLARE_MESSAGE_MAP()private: boolIsNewGame; voidDrawLineBG(CDC*pDC);};9.classCResultDialog:publicCDialog//继承CDialog生成的CResultDialog类{//Constructionpublic: voidShowDlg(CStringresult); CResultDialog(CWnd*pParent=NULL);//standardconstructor//DialogData //{{AFX_DATA(CResultDialog) enum{IDD=IDD_DIALOG_RESULT}; CStatic m_result; //}}AFX_DATA//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CResultDialog) protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //Generatedmessagemapfunctions //{{AFX_MSG(CResultDialog) virtualvoidOnOK(); virtualBOOLOnInitDialog(); afx_msgvoidOnTimer(UINTnIDEvent); afx_msgBOOLOnEraseBkgnd(CDC*pDC); afx_msgHBRUSHOnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor); //}}AFX_MSG DECLARE_MESSAGE_MAP()private: CStringresult; CBrushm_brush;};4设计结果及分析4.1测试记录编号测试名称严重程度解决情况1测试难度等级的正确应用正确2测试点击翻牌的效果能否正确显示一般已解决3测试相同牌被翻出后能否正常消去正确4测试人机交战中电脑能否正常翻牌一般已解决5测试电脑能否记忆已翻过得牌正确6测试电脑与玩家对战时能否正常计分正确4.2测试总结总结的多次测试,有时并不是多大的错误,说不定只是一个字母或者符号的错,但就是这小小的一环却依然对整个程序有着很大的影响。因此,在编写程序时就变得无比小心,现在的小心是减少以后的工作量。问题是需要去寻找的,而测试也是对知识的考验,在测试时将知识与实践融汇,同时也学会了合作与科研的精神。在此才意识到测试的重要性,并对程序的制作的整个过程都学会了大胆创新,细致工作。4.3技术难点1.电脑AI的编写:电脑要记住已经翻开的牌并将相同的牌翻出。解决方法:参考一些有AI的程序,想出用数组存取坐标的方法,最后参考一些有AI的程序完善编写。2.窗口的动画效果。解决办法:参考一些书籍和网上的教程,解决了用控件显示动画效果的问题。3.相同牌的消去效果。解决办法:经过同学和老师的帮助,并结合不断调试的改进,成功完成了消去效果。5总结在这一次课程设计中,虽然是各自为战,自己做自己的课题,但是,在实际中仍然是需要老师和同学的帮助的。第一次的一个人做一个课程设计,其一是这一块是比较新的知识额,需要在完成课题之前要大量参考文献,因为每一个课题有其自己鲜明的特点;其二是限于刚刚上手MFC,有许多代码上的不熟悉没时间也不可能在刚刚开始学习时就完全解决,必须一边写代码,一边借鉴一些功能相仿的程序的写法,有的甚至还要与所做程序同样含有某一类功能,如图片处理。还有,第一次编程还要注意各模块的借口问题,某一模块的函数是否能满足别的模块的功能,如通过重载drawrect函数实现最开始的初始化牌堆和每次点击牌的显示结果。还
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行风险控制岗位面试题及答案
- 特殊血型(如Rh阴性)患者的输血策略
- 专用仪器仪表项目可行性分析报告范文
- 网络工程师岗位面试题及答案详解
- 财务报表的异常数据识别与处理考试题
- 切鱼机建设项目可行性分析报告(总投资14000万元)
- 深度解析(2026)《GBT 18589-2001焦化产品蒸馏试验的气压补正方法》(2026年)深度解析
- 特殊凝血功能异常患者内镜知情同意策略
- 医药行业财务分析面试题及答案详解
- 物联网远程监护:基层重症资源下沉方案
- 2025内蒙古鄂尔多斯东胜区消防救援大队招聘乡镇(街道)消防安全服务中心专职工作人员招聘3人考试笔试模拟试题及答案解析
- 2025济宁市检察机关招聘聘用制书记员(31人)笔试考试参考试题及答案解析
- 2025年安全总监年终总结报告
- 安顺市人民医院招聘聘用专业技术人员笔试真题2024
- 厨师专业职业生涯规划与管理
- 2025年10月自考00688设计概论试题及答案
- 六西格玛设计实例
- 海南槟榔承包协议书
- 工业交换机产品培训
- 2025浙江温州市龙港市国有企业招聘产业基金人员3人笔试历年备考题库附带答案详解试卷3套
- 《十五五规划》客观测试题及答案解析(二十届四中全会)
评论
0/150
提交评论