您好,欢迎访问三七文档
1《项目工程实践》课程结题报告课题名称贪吃蛇的设计与实现分数日期:__2015__年_5_月_20_日2目录目录................................................................................................................................2一、需求分析................................................................................................................3二、概要设计................................................................................................................3三、逻辑设计................................................................................................................6四、应用程序..............................................................................................................10五、测试........................................................................................错误!未定义书签。六、部分源程序代码3一、需求分析本系统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求:(1)利用方向键来改变蛇的运行方向。(2)空格键暂停或继续游戏,并在随机的地方产生食物。(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。二、概要设计(1)游戏处理流程。本次游戏处理流程如图1所示。图1游戏流程设计进入游戏画面单机“begin”按钮,游戏开始,蛇开始随即出现键盘操作:“左移”“右移”“向下”“向上”没有吃到实物且蛇碰到边界或者自身游戏中途欲退出,游戏结束单击游戏界面上的“×”4(2)功能模块设计。软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问题。包括如何把该游戏划分成若干个模块,决定各个模块之间的接口、模块之间传递的信息,以及模块结构的设计等。(3)游戏功能本系统主要完成一下几个方面的功能:1.游戏控制功能——包括游戏的开始、暂停、退出2.界面布局3.其他辅助功能(4)总设计模块的划分根据游戏游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。(5)游戏煮界面模块游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。游戏界面主框架的主要结构如图3所。贪吃蛇游戏游戏主界面模块游戏控制模块图2游戏总设计模块游戏的主界面框架游戏图形区域界面(即游戏画布)游戏控制按钮界面图3游戏主界面框架5(6)游戏控制模块游戏控制模块主要通过主界面上的按钮来控制游戏的开始、游戏的暂停、游戏的退出这三个功能。在这个模块中,需要给各个按钮或文本框加入代码,来对上述的功能加以进一步的实现。游戏控制模块的主要框架如图4所示。1.游戏开始控制:单击“begin”按钮,游戏画布既有移动的贪吃蛇出现,游戏正式开始2.游戏退出控制:单击“×”按钮,退出游戏。(7)类模块设计1.类模块之间的关系通过对功能要求的分析,将贪吃蛇游戏功能划分为6个类模块,他们的关系如图5所示。游戏控制模块游戏的的开始功能游戏的退出功能图4游戏控制模块框架GreedSnake(主类)SnakeFrame(用户界面类)SnakePabel(游戏界面及内容)SnakeModel(游戏内容)AnayIndexReadOnly(方向)AnayIndex(游戏方向)图5贪吃蛇之间的关系6(8)各类模块设计概要1.GreedSnake类GreedSnake类该类包含main方法,为应用程序的主类。该类用来创建游戏的用户界面,整个程序从该类的main方法开始执行。SnakeFrame类用来设计游戏的用户界面。SnakePanel类设置游戏运行状态,设置蛇头颜色,背景颜色,随机块颜色,移动以及分数更新,实现上下左右移动的方法接口。SnakeModel类设置初始化蛇的形状和运行方向,设置随机块的位置,判断游戏是否出界,以及出界后的处理,设置方向的更新。ArrayIndex类用来得到坐标,设置坐标以及判断运行方向相同或相反。ArrayIndexReadOnly类用来得到坐标,以及判断运行方向相同或相反。三、逻辑设计1.程序的主要结构:本次所设计贪吃蛇游戏程序的主结构如图6所示。初始化进入时间等待状态开始请求退出正常退出不正常退出相关事件返回初始化失败72.类模块流程图GreedSnake类SnakeFrameSnakePanel类图6贪吃蛇程序主结构创建SnakeFrame窗口类的一个实例设置关闭窗口按键和窗口高度宽带图7GreedSnake类程序流程图第一菜单及菜单变量创建菜单及菜单项将组件注册给事件监听者处理给予菜单动作时间图8SnakeFrame类程序流程图设置蛇头身体,随机块和初始运行方向变量处理游戏动作设置蛇头、背景、随机块颜色8SnakeModel类实现移动接口实现按键接口定义数据成员图9SnakePanel类程序流程图设置函数坐标和方向设置初始化状态设置贪吃蛇界面并初始化游戏是否与运行方向相反保持原来方向按指示方向运动蛇是否吃了随机块是否出界是否相交重设置蛇头和蛇身,重新生产随即块游戏结束游戏结束YYYYNNNN9ArrayIndexReadOnly类ArrayIndex类构造函数得到坐标设置与运行方向相同和相反的表示方法图11ArrayIndexReadOnly类程序流程图设置X,Y坐标设置与运行方向相同或相反的表示方法图12ArrayIndex类程序流程图移动,把蛇头加到蛇身体里面并且把尾巴移出是否吃了足够的果实游戏结束,“你赢了”图10SnakeModel类程序流程图Y10四、应用程序打开贪吃蛇游戏后,出现如图14所示界面点击“begin”出现如图15界面。图14图1511按“↑↓←→”控制蛇的方向,如图16所示。吃了足够的果实游戏结束,出现“youwin”,如图16所示。图16图1612蛇碰到边界则游戏结束,出现“gameover”,如图17所示。蛇碰到自己的身体则游戏结束,如图18所示。图1713五、测试1、测试过程(1)拟定测试计划。在制定测试计划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。(3)根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利用前面介绍的测试用例和设计技术,产生测试设计说明文档,其内容主要有被测项目、输人数据、测试过程、预期输出结果等。(4)实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。(5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。2、测试结果程序运行正常,没有发现什么错误。六、部分源程序代码importjava.awt.*;importjava.awt.event.*;publicclassGreedSnake//主类{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubnewMyWindow();14}}classMyPanelextendsPanelimplementsKeyListener,Runnable//自定义面板类,继承了键盘和线程接口{Buttonsnake[];//定义蛇按钮intshu=0;//蛇的节数intfood[];//食物数组booleanresult=true;//判定结果是输还是赢Threadthread;//定义线程staticintweix,weiy;//食物位置booleant=true;//判定游戏是否结束intfangxiang=0;//蛇移动方向intx=0,y=0;//蛇头位置MyPanel(){setLayout(null);snake=newButton[20];food=newint[20];thread=newThread(this);if(shu==15)//如果蛇节数等于15则胜利{t=false;result=true;repaint();}}}publicvoidkeyPressed(KeyEvente)//按下键盘方向键15{if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右键{if(fangxiang!=1)//如果先前方向不为左fangxiang=0;}elseif(e.getKeyCode()==KeyEvent.VK_LEFT){if(fangxiang!=0)fangxiang=1;}elseif(e.getKeyCode()==KeyEvent.VK_UP){if(fangxiang!=3)fangxiang=2;}elseif(e.getKeyCode()==KeyEvent.VK_DOWN){if(fangxiang!=2)fangxiang=3;}}publicvoidkeyTyped(KeyEvente){}publicvoidkeyReleased(KeyEvente){}publicvoidpaint(Graphicsg)//在面板上绘图{intx1=this.getWidth()-1;16inty1=this.getHeight()-1;g.setColor(Color.red);g.fillOval(weix,weiy,10,10);//食物g.drawRect(0,0,x1,y1);//墙if(t==false&&result==false)g.drawString(GAMEOVER!,250,200);//输出游戏失败elseif(t==false&&result==true)g.drawString(YOUWIN!,250,200);//输出游戏成功}}classMyWindowextendsFrameimplementsActionListener//自定义窗口类{MyPanelmy;Buttonbtn;Panelpanel;MyWindow(){super(GreedSnake);my=newMyPanel();btn=newButton(begin);panel=newPanel();btn.addActionListener(this);panel.add(newLabel(begin后请按Tab键选定蛇));panel.add(btn);panel.add(newLabel(按上下左右键控制蛇行动));add(panel,BorderLayout.NORTH);add(my,BorderLayout.CENTER);setBounds(100,100,610,500);setVisible(true);17validate();addWindowLis
本文标题:贪吃蛇的设计与实现
链接地址:https://www.777doc.com/doc-5010841 .html