




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目: 贪吃蛇 专 业:计算机科学与技术 姓 名 学 号:20130516161 指导教师:李 晓 虹2015 年 1 月 7 日一, 系统需求分析 一引言1.编写目的: 此需求分析说明书对贪吃蛇游戏软件做了全面细致的用户需求分析,明确所要开发的游戏软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。 本说明书的预期读者为客户、业务或需求分析人员、测试人员、用户文档编写者、项目管理人员。 2.背景随着科技的发展,现在电脑的功能已不仅仅是简单的聊聊天、收发短信了。更多的电脑用户希望在工作、学习之余通过方便休闲娱乐。因此,为了迎合众多用户的需求并适应现在电脑的规模开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机点按哦,电脑,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。 3.定义 需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足合同、标准,规范或其它正式规定文档所需具有的条件或权能。而且其很强的交互性及简单易行性,可以让人在很短时间内熟悉它的游戏规则,不论用户文化水平如何,都会很轻松的学会使用它。5.开发人员熊青青二, 总体设计1.目标在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人没有足够的时间去休闲娱乐,放松自己。这款小型的手机游戏,可以让我们随时随地都能享受游戏,。让我们从繁重的日常生活中解脱出来。 游戏的主界面应该力求美观,爽心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。 2.用户的特点由于本程序简单易操作,交互性好,对用户没什么特别要求。一般用户经过几分钟练系都可以熟悉本游戏的规则。 3.假定与约束 开发周期14天4.游戏模块1.Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出等功能,分为:游戏主界面模块、游戏控制模块两个模块。 游戏主界面模块:主要包括游戏图形区域界面、游戏开始按钮、暂停按钮、退出按钮。游戏控制模块: 主要完成游戏的开始、暂停、退出等功能。5.对性能的规定本游戏在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。 游戏主界面应该力求美观,赏心悦目。游戏控制模块应做到易懂、易操作,而且准确率高,不易出错。模块划分:5.1.主控模块。5.2.动画音乐模块5.3.画主界面模块5.4.游戏过程模块5.5.游戏结束处理模块5.6.读取记录模块5.7.成绩排序模块5.8.写入文件模块5.9.排行榜模块5.10.退出6.设计的目的6.1复习C+中学习过的基本知识 6.2将学习的C+知识得以系统化 6.3掌握C+中函数设计的方法和结构化设计的思想6.4掌握规范的程序设计思路6.5掌握规范的程序编码格式7.要求描述7.1设计要求(1)基本函数的实现 (2)基本函数模块的实现7.2版式的要求(1)设计面板清晰,结构明确(2)有相应的文字说明(3)有相应的注释7.3报告要求1)模块化程序设计 (2)必须上机调试和测试(3)程序设计的框图,流程图 (4)原程序清单和执行结果 8.贪吃蛇功能描述8.1贪吃蛇的基本玩法:即可以用上、下、左、右键游戏区蛇的运动方向,使之向着有食物的方向运动,并吞吃食物使身体增长,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。3.2调节蛇的运动速度:即用户可以调节蛇的速度来选择不同的难度。 3.3选择关卡功能:即游戏分不同的难度级别,用户可以选择不同的难度级别进行游戏。3.4游戏帮组:即用户可以查看游戏得分、查看英雄榜等。三,详细设计3.1初始化为防止食物总是出现在一个位置上,要设置随机数发生器的种子数,产生真正的随机数。由于还没有画出食物,并设置需要食物,并设置蛇活着。初始时,蛇只有蛇头和1节蛇尾,设置这2节坐标。设定蛇开始的爬行方向左右。3.2随机确定食物位置 由于蛇吃到食物的判断是蛇头的坐标和食物的坐标相等,所以要确保食物出现的位置在10的倍数位置上。先用两个带随机函数的表达式产生一个位于围墙内的x、y坐标,然后用两个while循环将两个坐标值调整到10的倍数上,这样就可以让蛇吃到。3.3循环确定蛇身的新坐标吃到物key=ESC 蛇死 蛇撞墙 蛇死 按键判蛇的位置 接受按键key除蛇尾,增节 延迟10秒吃后处理置蛇死标志 窗蛇身,蛇死循环画蛇结束这里的难点是表示蛇的新位置并消除前一次的图形。采用的方法是每次移动的时候从最后一节开始到第二节,将前一节的坐标值赋给后一节的坐标,移动后只要把最后一节用背景色擦出即可,因为新位置0到n-1节还是要出现在画面上的。这里用一个for循环来确定蛇身的新坐标。 3.4吃到食物后的处理蛇吃到食物后,首先将食物擦除,即用背景色画出该食物,然后给蛇的节数加1,设置需要食物标志,是游戏成绩加10分,如果成绩达到50分的倍数,则给关数加1,并加快游戏速度。3.5 有按键判断蛇的方向 这是一个内嵌的嵌套的条件选择结构,根据安东上下左右键来设定蛇的移动方向。其中1=向右,2=向左,3=向上,4=向下。判断是还考虑相反的方向键无效,比如蛇正在向上爬行,按下一键方向是无效的。四,系统调试调试与测试软件的目标就是发现并改正潜伏的错误。一个程序,必须经过认真的调试和测试,才能尽量减少错误、保证程序满足功能、性能需求,达到最初的设计、使用要求,从而保证程序的开发质量。 详细设计完成后,就可以用C语言根据各个模块的算法来设计程序,每个模块都要设计成一个自定义函数。几个模块可以放在一起构成一个原函数程序文件,也可以一个模块构成一个源程序文件。原程序设计好后,输入到计算机中,并存储到磁盘上;然后对每个源程序文件都进行了独立编译和调试(具体代码可以参看程序清单);并针对不同的模块程序设计测试用例进行单元测试;最后,将几个分别开发的模块组装在一起,形成一个完整的程序,进行集成测试,从而发现并改正了程序程序中存在的一些潜藏的错误,并使程序的容错能力大大增强。算法说明:蛇的活动区是由5733个小方格组成,当这些小方格呈现深灰色时,便表示蛇身。蛇是由n个相邻的方格组成,将这些方格的坐标依蛇头到蛇尾的次序放入到一个数组中便代表了蛇身。当蛇在活动区中游动一格时,所对应的的数组操作为,将新的位置坐标插入到数组的头部,同时将数组中最后一个元素删除。游戏使用四个方向键和A/W/S/D来控制蛇的前进方向,在OnKeyDown()消息处理函数中,根据不同的方向键设置了成员变量m_nDirect的值。当在菜单中选择开始时,启动定时器,游戏开始。在定时器消息处理函数中,根据m_nDirect的值判断出蛇的下一个位置。如果没有超出边界或碰到自身,则蛇可以移动到一个新位置。如果吃到了食物,则在CArray()中只插入而不删除最后一个元素,蛇身长度增加,否则弹出游戏结束对话框,框内显示所用时间和最终得分。菜单栏的项目以实用性为主,另外每个按钮都设置有快捷键,分别为:F1-帮助;F2-开始游戏;F4-关闭窗口,退出游戏4.1蛇撞到墙预期结果:蛇运行时如果撞到墙壁,则游戏结束。 实际运效果:超出左右墙壁后程序结束,但超出上面墙壁后仍然运行,如图6-9所示。错误分析:错误程序段在蛇运行中的条件判断语句中,其判断条件是:if(snake.x0595),即少了上、下两个方向的判断。 修改:在蛇的运行过程中添加两个逻辑表达式,判断蛇是否闯到上下的围墙。代码:if(snake.x0595|snake.y0455) 修改后的程序运行结果与预期的结果一致。4.2蛇头闯到蛇身预期的结果:当蛇得头部与蛇身相撞时,游戏应当结束。 实际运行效果:蛇头撞到蛇身时,程序并不终止。错误分析:在蛇的运行判断的程序出错,其代码如下Fori=3;i 1000#pragma once#endif / _MSC_VER 1000class CMainFrame : public CFrameWndprotected: /serialization类CMainFrame();DECLARE_DYNCREATE(CMainFrame)/ Attributespublic:/ Operationspublic:/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CMainFrame)virtual BOOL PreCreateWindow(CREATESTRUCT& cs);/AFX_VIRTUAL/ Implementationpublic:virtual CMainFrame();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif/ Generated message map functionsprotected:/AFX_MSG(CMainFrame)/ NOTE - the ClassWizard will add and remove member functions here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_MAINFRM_H_1DBDFCE9_E146_4E5B_94B2_601CD8ACDE3F_INCLUDED_)/NO_DEPENDENCIES/ Microsoft Developer Studio generated include file./ Used by Snake.rc/#define IDD_ABOUTBOX 100#define IDR_MAINFRAME 128#define IDR_SNAKETYPE 129#define IDD_highscore 130#define ID_GAME_START 32771#define ID_highscore 32773/ Next default values for new objects/ #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_3D_CONTROLS 1#define _APS_NEXT_RESOURCE_VALUE 131#define _APS_NEXT_COMMAND_VALUE 32774#define _APS_NEXT_CONTROL_VALUE 1004#define _APS_NEXT_SYMED_VALUE 101#endif#endif#include stdafx.h#include Snake.h#include MainFrm.h#include SnakeDoc.h#include SnakeView.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifBEGIN_MESSAGE_MAP(CSnakeApp, CWinApp)/AFX_MSG_MAP(CSnakeApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSG_MAP/ Standard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)END_MESSAGE_MAP()CSnakeApp:CSnakeApp()/构造函数(空函数)/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CSnakeApp objectCSnakeApp theApp;/ CSnakeApp initializationBOOL CSnakeApp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ 3D控制#elseEnable3dControlsStatic();/ 3D静态控制#endif/ Change the registry key under which our settings are stored./ TODO: You should modify this string to be something appropriate/ such as the name of your company or organization.SetRegistryKey(_T(Local AppWizard-Generated Applications);LoadStdProfileSettings(); / Load standard INI file options (including MRU)/ Register the applications document templates. Document templates/ serve as the connection between documents, frame windows and views.CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CSnakeDoc),RUNTIME_CLASS(CMainFrame), / main SDI frame windowRUNTIME_CLASS(CSnakeView);AddDocTemplate(pDocTemplate);/ Parse command line for standard shell commands, DDE, file openCCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);/ Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo)return FALSE;/ The one and only window has been initialized, so show and update it.m_pMainWnd-ShowWindow(SW_SHOW);m_pMainWnd-UpdateWindow();return TRUE;/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/ No message handlers/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ App command to run the dialogvoid CSnakeApp:OnAppAbout()CAboutDlg aboutDlg;aboutDlg.DoModal();/ CSnakeApp message handlers# Microsoft Developer Studio Project File - Name=Snake - Package Owner=# Microsoft Developer Studio Generated Build File, Format Version 6.00# * DO NOT EDIT *# TARGTYPE Win32 (x86) Application 0x0101CFG=Snake - Win32 Debug!MESSAGE This is not a valid makefile. To build this project using NMAKE,!MESSAGE use the Export Makefile command and run!MESSAGE !MESSAGE NMAKE /f Snake.mak.!MESSAGE !MESSAGE You can specify a configuration when running NMAKE!MESSAGE by defining the macro CFG on the command line. For example:!MESSAGE !MESSAGE NMAKE /f Snake.mak CFG=Snake - Win32 Debug!MESSAGE !MESSAGE Possible choices for configuration are:!MESSAGE !MESSAGE Snake - Win32 Release (based on Win32 (x86) Application)!MESSAGE Snake - Win32 Debug (based on Win32 (x86) Application)!MESSAGE # Begin Project# PROP AllowPerConfigDependencies 0# PROP Scc_ProjName # PROP Scc_LocalPath CPP=cl.exeMTL=midl.exeRSC=rc.exe!IF $(CFG) = Snake - Win32 Release# PROP BASE Use_MFC 6# PROP BASE Use_Debug_Libraries 0# PROP BASE Output_Dir Release# PROP BASE Intermediate_Dir Release# PROP BASE Target_Dir # PROP Use_MFC 6# PROP Use_Debug_Libraries 0# PROP Output_Dir Release# PROP Intermediate_Dir Release# PROP Target_Dir # ADD BASE CPP /nologo /MD /W3 /GX /O2 /D WIN32 /D NDEBUG /D _WINDOWS /D _AFXDLL /Yustdafx.h /FD /c# ADD CPP /nologo /MD /W3 /GX /O2 /D WIN32 /D NDEBUG /D _WINDOWS /D _AFXDLL /D _MBCS /Yustdafx.h /FD /c# ADD BASE MTL /nologo /D NDEBUG /mktyplib203 /win32# ADD MTL /nologo /D NDEBUG /mktyplib203 /win32# ADD BASE RSC /l 0x804 /d NDEBUG /d _AFXDLL# ADD RSC /l 0x804 /d NDEBUG /d _AFXDLLBSC32=bscmake.exe# ADD BASE BSC32 /nologo# ADD BSC32 /nologoLINK32=link.exe# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386# ADD LINK32 /nologo /subsystem:windows /machine:I386!ELSEIF $(CFG) = Snake - Win32 Debug# PROP BASE Use_MFC 6# PROP BASE Use_Debug_Libraries 1# PROP BASE Output_Dir Debug# PROP BASE Intermediate_Dir Debug# PROP BASE Target_Dir # PROP Use_MFC 6# PROP Use_Debug_Libraries 1# PROP Output_Dir Debug# PROP Intermediate_Dir Debug# PROP Target_Dir # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D WIN32 /D _DEBUG /D _WINDOWS /D _AFXDLL /Yustdafx.h /FD /GZ /c# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D WIN32 /D _DEBUG /D _WINDOWS /D _AFXDLL /D _MBCS /Yustdafx.h /FD /GZ /c# ADD BASE MTL /nologo /D _DEBUG /mktyplib203 /win32# ADD MTL /nologo /D _DEBUG /mktyplib203 /win32# ADD BASE RSC /l 0x804 /d _DEBUG /d _AFXDLL# ADD RSC /l 0x804 /d _DEBUG /d _AFXDLLBSC32=bscmake.exe# ADD BASE BSC32 /nologo# ADD BSC32 /nologoLINK32=link.exe# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept!ENDIF # Begin Target# Name Snake - Win32 Release# Name Snake - Win32 Debug# Begin Group Source Files# PROP Default_Filter cpp;c;cxx;rc;def;r;odl;idl;hpj;bat# Begin Source FileSOURCE=.MainFrm.cpp# End Source File# Begin Source FileSOURCE=.Snake.cpp# End Source File# Begin Source FileSOURCE=.Snake.rc# End Source File# Begin Source FileSOURCE=.SnakeDoc.cpp# End Source File# Begin Source FileSOURCE=.SnakeView.cpp# End Source File# Begin Source FileSOURCE=.StdAfx.cpp# ADD CPP /Ycstdafx.h# End Source File# End Group# Begin Group Header Files# PROP Default_Filter h;hpp;hxx;hm;inl# Begin Source FileSOURCE=.MainFrm.h# End Source File# Begin Source FileSOURCE=.Resource.h# End Source File# Begin Source FileSOURCE=.Snake.h# End Source File# Begin Source FileSOURCE=.SnakeDoc.h# End Source File# Begin Source FileSOURCE=.SnakeView.h# End Source File# Begin Source FileSOURCE=.StdAfx.h# End Source File# End Group# Begin Group Resource Files# PROP Default_Filter ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe# Begin Source FileSOURCE=.resSnake.ico# End Source File# Begin Source FileSOURCE=.resSnake.rc2# End Source File# Begin Source FileSOURCE=.resSnakeDoc.ico# End Source File# End Group# Begin Source FileSOURCE=.ReadMe.txt# End Source File# End Target# End ProjectMicrosoft Developer Studio Workspace File, Format Version 6.00# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!#Project: Snake=.Snake.dsp - Package Owner=Package=Package=#Global:Package=Package=#if !defined(AFX_SNAKE_H_FC722EA6_22CD_43DD_AD6C_A25ADF306F24_INCLUDED_)#define AFX_SNAKE_H_FC722EA6_22CD_43DD_AD6C_A25ADF306F24_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#include resource.h / main symbols/ CSnakeApp:/ See Snake.cpp for the implementation of this class/class CSnakeApp : public CWinApppublic:CSnakeApp();/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CSnakeApp)public:virtual BOOL InitInstance();/AFX_VIRTUAL/ Implementation/AFX_MSG(CSnakeApp)afx_msg void OnAppAbout();/ NOTE - the ClassWizard will add and remove member functions here./ DO NOT EDIT what you see in these blocks of generated code !/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_SNAKE_H_FC722EA6_22CD_43DD_AD6C_A25ADF306F24_INCLUDED_)Build Log-Configuration: Snake - Win32 Release-Command LinesCreating temporary file C:DOCUME1ADMINI1LOCALS1TempRSPE4.tmp with contents/nologo /MD /W3 /GX /O2 /D WIN32 /D NDEBUG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部队会务保障课件
- 临潭县第一中学2025-2026学年上学期阶段性测试卷高三语文
- 河北省廊坊市文安县第一中学2025-2026学年高二上学期开学考试语文试卷(含答案)
- 2025-2026学年广西来宾中学高二(上)开学物理试卷(含答案)
- 20xx年集团经理个人年终述职报告范文
- 部门安全培训感悟课件
- 福彩财务合规管理-洞察及研究
- 达尔文学说课件
- 车队驾驶员安全培训课件
- 基于区块链技术的法兰供应链溯源管理在质量风险追溯中的实践困境
- 智慧养猪解决方案演示课件
- 最新中医骨伤科学考试题库及答案
- 产品形态设计课件完整
- 德国巴斯夫抗氧剂和紫外线吸收剂
- SG-A088接地装置安装工程工检验批质量验收记录
- 《芯片原理与技术》课件微流控芯片
- HY_T 0330-2022 海滩养护与修复工程验收技术方法
- 混凝土外观质量缺陷及治理措施PPT课件
- 十四条经络养生课件
- 麻醉医师资格分级授权管理能力评价与再授权制及程序培训考核试题及答案
- 钢结构厂房监理实施细则
评论
0/150
提交评论