拼图游戏课程设计报告.doc_第1页
拼图游戏课程设计报告.doc_第2页
拼图游戏课程设计报告.doc_第3页
拼图游戏课程设计报告.doc_第4页
拼图游戏课程设计报告.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

目录0引言11 工作计划21.1主要工作阶段划分21.2工作任务分工22需求分析32.1概述32.2用户分析32.3 约束条件32.4功能需求32.5用户界面需求43设计与实现63.1概述63.2详细设计63.2.1类的抽象及设计63.2.2表结构设计73.3 主要程序文件73.4开发环境以及部署环境要求83.5 主要源码84 测试144.1概述144.2 测试环境144.3测试计划。154.4测试项目及结果155、工作总结155.1工作成果155.2过程分析155.3经验教训及其分析160引言拼图是家喻户晓的益智类小游戏,选择该课题即可完成这门课程的课程设计还可增加学习的趣味性增加我对该课程学习兴趣。选择这个题目一是为了将自己的所学知识加以运用,该程序要用到许多课内所学并且对其加以提高。二是一直以来拼图这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。我希望通过自己的所学知识把它剖析开来,真正的了解它的本质和精髓。虽然我的编程能力不强,但是我有信心通过自己不断的学习和积极查资料,在这次学习中我将从实践和实际的项目中提高自己的编程能力。因此我选择这个题目作为我的课程设计题目。1 工作计划1.1主要工作阶段划分阶段阶段名称时间安排第一阶段:准备工作:需求分析、查资料过程繁琐,需一天半时间第二阶段:编写代码实现任务繁复,需一天时间第三阶段:编译调试运行过程纷繁,需大半天时间第四阶段:改进功能该过程相对比较简单,需半天时间第五阶段:思考总结之前的工作为这部分作了充分的准备工作半天时间1.2工作任务分工阶段名称任务名称任务描述负责人第一阶段准备工作思考该游戏要实现哪些功能大概怎么实现该功能需要具备哪些知识,该阶段是平时的学习中积累及临时突击某个知识点,查资料所得,是程序思想的核心。该游戏需要在mfc,windows上下功夫。苏瑜第二阶段编写代码实现功能首先建立框架:对话框,菜单和载入图片,然后编写主要算法代码:实现图片分块的交换,最后完善程序,是程序形成及实现的关键苏瑜第三阶段编译调试运行编译调试运行,需要有耐心,通常情况下大小错误一大堆需要认真思考和修改,查看程序所要实现功能是否完全实现,是程序正确运行的关键苏瑜第四阶段改进功能对比所查游戏的功能改进改程序,查看还需添加哪些功能,并进行改进编译调试运行,需要完善的思维苏瑜第五阶段思考总结课程设计的最终目的,通过思考实际编程应用,巩固提高所学,并应用于以后的学习实践中。苏瑜2需求分析2.1概述 本程序开发一款简单的拼图游戏,由于能力有限只能实现该游戏的基本内容:3*3,4*4拼图点击空白图片的上下做图片实现交换,另外拼图过程该游戏还为用户提供提示(图片名称)、计步、计时,帮助对话框显示原图的缩略图,即可选择游戏提供的图片还可用户自定义bmp图片,关于对话框显示该游戏的信息。2.2用户分析1软件中选定的图片用户不一定喜欢,应该让用户有选择图片的权利,选择用户细化的图片。2玩游戏本身就是娱乐和比拼的过程,最好提供可以让用户对比的东西,例如本游戏中给用户提供,提示,计时和计步三项。3用户玩该游戏的水平有高低之分,该游戏中设置了3*3和4*4两种选择供不同人水平来选择。4游戏就是享受,汲取快乐,因此该游戏中主要提供色彩温和丰富的卡通动漫图片可供用户选择,可使用户有个好心情。2.3 约束条件 开发一块游戏需要很强的基础知识、开发能力及时间。它包括需求分析、编写代码、编译调试运行、改进功能、思考总结。由于所学知识及时间有限,只能开发这一款比较简单的游戏软件。再加之现在的拼图游戏功能不断在提高,自己做的这些也许很微不足道,但是我会努力尽自己所能编写出更好的程序,实现更多的功能。2.4功能需求1、该游戏软件中game菜单下选择easy和hard分别可进行3*3和4*4拼图:点击白块区域的临块进行交换,直至拼好软件提示“祝贺你,你拼出来了!”2、软件中Picture下提供4个可供选择的图来拼图,当然还可自定义电脑上bmp图片来拼图。3、点击game下的帮助菜单可看到帮助对话框,其中可看到原图的缩略图,点击OK回到原拼图界面,About显示关于对话框。4、选择user下About菜单显示关于对话框。5、拼图游戏界面下方被分为三部分:提示描述栏(“加油”或描述图片内容),计时栏,计算已走步数栏。6、最后user下Exit菜单可退出该游戏2.5用户界面需求拼图游戏界面:不管什么游戏菜单选项是必需的,因此我在该界面中设置游戏、图片和用户三个主菜单下设一下子菜单:选择菜单达到用户需求 注意:1.未开始拼图时帮助菜单不可用 2.开始新游戏时,先点击图片任意处,打乱后开始计时拼图 3.拼图过程中若想查看原图,点击子菜单帮助帮助对话框:帮助用户回想起原图,进行拼图! 注意:显示帮助对话框时game,picture的子菜单不可用,但user还是可以用。自定义图片打开对话框:3设计与实现3.1概述 在准备工作阶段已思考好该游戏需要实现哪些功能,及运用什么实现,画好流程图,做好简单笔记,以便理清思路,提高编写代码时的效率。完成程序后在进行运行、修改、提高。最后进行完整的游戏:选择图片,点击图片任意一处开始拼图(如若忘记原图可点击帮助菜单显示帮助对话框,看完后再按OK继续拼图。)直至结束(若想退出可按exit子菜单。)。3.2详细设计3.2.1类的抽象及设计 在该程序中添加了一个拼图类CPictureDlg,其类内包括拼图界面的各个参数(如格的长宽x、y,步数m_Step,时间count和布尔逻辑IsLong(图片是竖是直),IsHelp(拼图是否开始)。光标,指针等,以及对拼图界面的操作函数(void MoveImage(int num)(用以移动图格的函数)、void SetPos()(初始化Staic 控件的位置)、void SetImage() (把图像COPY到Static控件)、void Rnd()(随机图格的位置)、void ShowItem()(显示帮助对话框)等函数)。通过这些对象,对类进行操作,完成拼图的整个过程。class CPictureDlg : public CDialog public:CPictureDlg(CWnd* pParent = NULL);/ standard constructorCPictureDlg();public: int m_Step; 步数BOOL IsRnd; 随即格的行CStatic m_Image16; 完整图片被分成的9或16格CBitmap bitmap; 该游戏软件为用户提供的可选择拼图的图片HBITMAP hbitmap; 用户自定义的图片CStatic m_Preview; 提前预览INT x; 格的宽度INT y; 格的长度BOOL CanCount; 是否计时int count;计时时间CDC *pkDC; BOOL Easy,Advan; 初始化为简单或难的拼图CMenu *pMainMenu; 主菜单CMenu *pSubMenu; 子菜单CStatusBarCtrl m_wndStatusBar;CString TimeCon; 计时BOOL IsHelp; 拼图是否开始INT Width,Height; 图片的宽度和高度BOOL IsLong; 图片是竖是直protected:(以上是类内所包含的函数在接下来的3.3中会对这些函数加以解释分析DECLARE_MESSAGE_MAP();3.2.2表结构设计 无3.3 主要程序文件该程序中用了较多函数都添加在PictureDig.Cpp文件中下面对其作以下解释:void MoveImage(int num); 用以移动图格的函数void SetPos(); 初始化Staic 控件的位置void SetImage(); 把图像COPY到Static控件UINT MapRand(UINT nMax); 随机函数void Rnd(); 随机图格的位置void ShowItem(); 显示帮助对话框BOOL IsWin(); 判断拼图是否完成函数并显示消息框进行提示void SetPre(); 生成略缩图void OnRun(UINT nBitmapID,UINT nMenuID); 改变菜单、初始化的函数void OnTimer(UINT nIDEvent); 对话框状态及计时函数CString IntToString(INT num); virtual BOOL OnInitDialog(); 初始化对话框函数void OnPaint(); 画图HCURSOR OnQueryDragIcon(); void OnImage0(); 对格进行操作函数,如果光标在该位置上则一动该格 void OnWin(); 快速完成函数void OnEasy(); 进行3*3拼图函数void OnHard(); 进行4*4拼图的函数void OnBegin(); 回复原图函数void OnForHelp(); 显示帮主对话框函数void OnAdvan(); 自定义图片函数void OnPic1(); 显示图片函数void OnExit(); 退出游戏函数void OnAbout(); 关于对话框函数void OnEndHelp(); 重新显示图格函数void OnDlgAbout(); 显示帮助对话框里的关于对话框函数3.4开发环境以及部署环境要求 虚拟机里WindowsXP系统下的vc+6.0编程软件里的mfc编程MFC AppWizard【exe】下编写程序3.5 主要源码显示图片函数void CPictureDlg:OnPic3()OnRun(IDB_BITMAP3,ID_PICTURE3); 通知缓存数据源物体进入了它的运行状态。m_wndStatusBar.SetText(加啡猫,0,0); 为拼图画面下方设置提示 将完整图片分为九或十六格来实现单元格的移动void CPictureDlg:OnImage0() /单击static控件if(IsRnd)MoveImage(0); 如果已开始拼图则移动该格图片else Rnd(); 否则光标继续移动if(IsWin()CanCount=FALSE; 未进行拼图,计时不开始void CPictureDlg:MoveImage(int num) 用以移动图格的函数int xnum,ynum,level;CString m_temp = 已走:;if(Easy) level=8; 如果是简单的则格为9格elselevel=15; 否则为16格WINDOWPLACEMENT wpnum,wp15;m_Imagelevel.GetWindowPlacement(&wp15); GetWindowPlacement指定窗口的位置m_Imagenum.GetWindowPlacement(&wpnum);xnum=wpnum.rcNormalPosition.left;ynum=wpnum.rcNormalPosition.top;if(num!=level)if(wpnum.rcNormalPosition.top=wp15.rcNormalPosition.top& wpnum.rcNormalPosition.left=wp15.rcNormalPosition.left-x) 左移一格m_Imagenum.SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);m_Step+=1;SetWindowPos的作用是:改变当前的尺寸、位置和弹出式子菜单,或顶层窗口。孩子,弹出式菜单,和顶层窗口被要求根据他们的出现在屏幕上。最上层的窗口接收,排名最高的,在第一个窗口秩序。(向右向上向下与向左算法相同,只需稍微改一下就可以。)m_temp+=IntToString(m_Step)+步;m_wndStatusBar.SetText(m_temp,2,0);选择9或16格拼图以下是9格的的实现函数:void CPictureDlg:OnEasy()pSubMenu=pMainMenu-GetSubMenu(0);pSubMenu-CheckMenuItem(ID_HARD,MF_UNCHECKED);设置check-mark属性的未检查状态pSubMenu-CheckMenuItem(ID_EASY,MF_CHECKED);设置check-mark属性检查状态Easy=TRUE;IsRnd=FALSE;count=0;CanCount=FALSE;m_Step=0;CString m_temp = 已走:;m_temp+=IntToString(m_Step)+步;m_wndStatusBar.SetText(m_temp,2,0);将一个字符串对象剪贴板上使用指定的剪贴板对象的格式。命名参数不支持SetPos();/IsWin();m_Image8.ShowWindow(SW_SHOW); 激活窗口,然后把它展览在目前的大小和位置m_wndStatusBar.SetText(加油!,0,0);显示帮主对话框函数:void CPictureDlg:ShowItem()/显示帮助对话框INT count;if(Easy)count=7;else count=14;if(!IsHelp)激活窗口,然后把它展览在目前的大小和位置GetDlgItem(IDC_ENDHELP)-ShowWindow(SW_SHOW);for(int i=0;iGetSubMenu(0);pSubMenu-EnableMenuItem(ID_BEGIN,MF_DISABLED|MF_GRAYED);pSubMenu=pMainMenu-GetSubMenu(1);pSubMenu-EnableMenuItem(ID_PICTURE1,MF_DISABLED|MF_GRAYED);IsHelp=TRUE; 进行拼图后,帮助不可用 else 隐藏这扇窗户,通过回到另一个窗口GetDlgItem(IDC_ENDHELP)-ShowWindow(SW_HIDE);for(int i=0;iGetSubMenu(0);pSubMenu-EnableMenuItem(ID_BEGIN,MF_ENABLED);pSubMenu=pMainMenu-GetSubMenu(1);pSubMenu-EnableMenuItem(ID_PICTURE1,MF_ENABLED);IsHelp=FALSE; 未进行拼图,帮助不可用显示是否完成拼图函数BOOL CPictureDlg:IsWin()/判断是否完成的函数WINDOWPLACEMENT wp;INT con,move;INT win=0;if(IsLong) 如果图片是长方形move=70;elsemove=0;if(Easy)con=2;elsecon=3;for(int a=0;aGetSubMenu(1);pSubMenu-CheckMenuItem(ID_PICTURE1,MF_UNCHECKED);SetPos(); SetImage();if(Easy)m_Image8.ShowWindow(SW_SHOW); 激活窗口,然后把它展览在目前的大小和位置elsem_Image8.ShowWindow(SW_SHOW);m_Image15.ShowWindow(SW_SHOW);m_wndStatusBar.SetText(name,0,0);else if(Result=IDCANCEL)return;计时函数void CPictureDlg:OnTimer(UINT nIDEvent)/Statusbar 计时nIDEvent=10;CString m_temp = 计时:;if(CanCount=TRUE)count+=1; 开始拼图后才开始计时TimeCon=IntToString(count);TimeCon =m_temp+ +TimeCon+ 秒;m_wndStatusBar.SetText(TimeCon,1,0); 拼图界面下方显示计时及所用时间的秒数初始化Staic 控件的位置void CPictureDlg:SetPos()BITMAP bm;INT con,move;m_Step=0;CString m_temp = 已走:;m_temp+=IntToString(m_Step)+步;m_wndStatusBar.SetText(m_temp,2,0);if(!Advan) 如果不是自定义图片则打开该图片高宽等于图片本身的 bitmap.GetObject(sizeof(BITMAP),&bm);Width=bm.bmWidth;Height=bm.bmHeight;if(Easy)x=Width/3;y=Height/3;con=2;else/x=Width/4;y=Height/4;con=3;if(IsLong) 如果图片是长方形move=70;elsemove=0;for(int i=0;i=con;i+)m_Imagei.SetWindowPos(NULL,x*i+move,0,0,0,SWP_NOSIZE); 保持目前的大小m_Imagei.SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE); 保持现在的位置if(!Easy) 如果4*4拼图时for(int l=0;l=3;l+)m_Imagel+12.SetWindowPos(NULL,x*l+move,3*y,0,0,SWP_NOSIZE);m_Imagel+12.SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);SetWindowPos的作用是:改变当前的尺寸、位置和弹出式子菜单,或顶层窗口。弹出式子菜单,和顶层窗口被要求根据他们的出现在屏幕上。4 测试4.1概述 首先测试各个子菜单的功能是否都实现,再玩转整个游戏,看所要实现的功能是否都完全实现,并且检查还有无需要改进的功能。4.2 测试环境虚拟机里WindowsXP系统下的vc+6.0编程软件里的mfc编程MFC AppWizard【exe】单文档下编写程序。4.3测试计划。查看所有要实现的功能,并对其进行修改和完善。精通该游戏,检验该游戏的基本功能是否还存在漏洞。检验其在各个环境下是否能正常运行4.4测试项目及结果项目:1、各个菜单子菜单是否完成各自使命2、拼图过程不会出现错误3、帮助对话框的显示4、帮助对话框和拼图界面不会发生冲突5、提示,计时,计步是否显示正确6、选择不同图片进行拼图,尤其注意自定义图片是否能完整实现结果:经过不断的修改完善所有要是

温馨提示

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

评论

0/150

提交评论