淮海工学院计算机工程学院课程设计报告设计名称�面向对象课程设计选题名称�益智类小游戏的设计与实现姓名�杜海涛学号�080915211专业班级�海洋092系�院��计算机工程学院设计时间�2011.12.19~2012.1.1设计地点�软件实验室、教室指导教师评语�签名�年月日成绩�面向对象课程设计报告第2页�共27页1�课程设计目的设计目的�《面向对象程序设计》是一门实践性很强的计算机专业基础课程�课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解�掌握使用Java语言进行面向对象设计的基本方法�提高运用面向对象知识分析实际问题、解决实际问题的能力�提高学生的应用能力。2�课程设计任务与要求�2.1设计题目如下�益智类小游戏的设计与实现通过多线程和多媒体技术�实现游戏过程中的人机交互和界面动画方案。2.2设计要求课程设计可选用Eclipse、JBuilder、NetBeans等作为开发平台以提高开发效率�通过资料查阅和学习尽可能熟练掌握其中一种集成开发环境。认真完成需求分析�建议采用UML建模技术进行系统的分析设计�在画出系统用例图和类图�并将UML图复制到设计报告中。认真按时完成课程设计报告�课程设计报告内容包括�课程设计目的、设计任务与要求、设计说明书、设计成果和设计心得五个部分�具体要求见设计报告模板。通过这次设计�要求掌握以下内容�1�面向对象技术中的继承与多态�重载和覆盖�机制、各种修饰符的使用2�类、包、接口的定义与使用3�常用工具类与算法的实现�数组、向量、字符串、链表�4�java.awt、javax.swing中常用标准GUI组件及相应的事件处理5�Java的异常处理机制6�Java的数据库连接技术7�Java的多线程技术与动画制作8�Java的网络编程面向对象课程设计报告第3页�共27页3�课程设计说明书本次设计要达到的目标分别从以下模块进行阐述�游戏主界面模块�游戏的主界面是进入游戏后�能够给玩家第一感官的部分�主要包括游戏图形区域界面、游戏的速度选择更新界面、游戏分数的显示更新界面、新生方块的预览、游戏开始按钮、暂停游戏按钮、退出游戏按钮以及游戏排行榜按钮。从很大程度上决定了玩家对游戏的兴趣问题�因此�游戏的主界面应该力求美观�爽心悦目。游戏控制模块�这个模块是游戏的中心环节�主要完成控制游戏的开始、暂停、退出等功能。为了能够给玩家一个很好的游戏环境�这部分应该做到易懂、易操作。1.4设计实现功能和目标本设计所开发的是基于Java的一个贪吃蛇游戏软件�主要实现游戏的开始、暂停、退出、等功能�分为:游戏主界面模块、游戏控制模块以二个模块。性能�本软件在设计方面本着方便、实用及娱乐性高的宗旨�在对界面进行设计的过程中�始终坚持清晰明了�在性能方面能够实现效率高�不易出错等优点。游戏主界面模块�主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮。游戏的主界面应该力求美观�爽心悦目。游戏控制模块�面向对象课程设计报告第4页�共27页主要完成控制游戏的开始、暂停、退出等功能�这部分应该做到易懂、易操作而且准确率高�不易出错。1.5游戏设计环境本次课程设计所涉及和实现的是用Java编程语言开发的贪吃蛇游戏。本次设计的系统环境及工具如下�运行环境�windowsxp编程语言�Java3.分析与设计�1�游戏处理流程。本次游戏处理流程如图1所示。进入游戏画面单机“开始”按钮�游戏开始�蛇开始随即出现键盘操作�“左移”“右移”“向下”“向上”没有吃到实物且蛇碰到边界或者自身游戏中途欲退出�游戏结束单击游戏界面上的“×”面向对象课程设计报告第5页�共27页�2�功能模块设计。软件开发过程中的功能模块设计�主要解决实现该游戏需求的程序模块设计问题。包括如何把该游戏划分成若干个模块�决定各个模块之间的接口、模块之间传递的信息�以及模块结构的设计等。�3�游戏功能本系统主要完成一下几个方面的功能�1.游戏控制功能——包括游戏的开始、暂停、退出2.界面布局3.其他辅助功能�4�总设计模块的划分根据游戏游戏需求中游戏所要实现的功能�整个游戏分为二个模块进行具体的设计�如图2所示。�5�游戏煮界面模块游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。游戏界面主框架的主要结构如图3所。图1游戏流程设计贪吃蛇游戏游戏主界面模块游戏控制模块图2游戏总设计模块游戏的主界面框架游戏图形区域界面�即游戏画布�游戏控制按钮界面面向对象课程设计报告第6页�共27页�6�游戏控制模块游戏控制模块主要通过主界面上的按钮来控制游戏的开始、游戏的暂停、游戏的退出这三个功能。在这个模块中�需要给各个按钮或文本框加入代码�来对上述的功能加以进一步的实现。游戏控制模块的主要框架如图4所示。1.游戏开始控制�单击“begin”按钮�游戏画布既有移动的贪吃蛇出现�游戏正式开始2.游戏退出控制�单击“×”按钮�退出游戏。�7�类模块设计1.类模块之间的关系通过对功能要求的分析�将贪吃蛇游戏功能划分为6个类模块�他们的关系如图5所示。图3游戏主界面框架游戏控制模块游戏的的开始功能游戏的退出功能图4游戏控制模块框架Snake�主类�SnakeFrame�用户界面类�面向对象课程设计报告第7页�共27页�8�各类模块设计概要1Snake类Snake类该类包含main方法�为应用程序的主类。该类用来创建游戏的用户界面�整个程序从该类的main方法开始执行。SnakeFrame类用来设计游戏的用户界面。SnakePanel类设置游戏运行状态�设置蛇头颜色�背景颜色�随机块颜色�移动以及分数更新�实现上下左右移动的方法接口。SnakeModel类设置初始化蛇的形状和运行方向�设置随机块的位置�判断游戏是否出界�以及出界后的处理�设置方向的更新。ArrayIndex类用来得到坐标�设置坐标以及判断运行方向相同或相反。ArrayIndexReadOnly类用来得到坐标�以及判断运行方向相同或相反。�9�详细设计1.程序的主要结构�本次所设计贪吃蛇游戏程序的主结构如图6所示。SnakePabel�游戏界面及内容�SnakeModel�游戏内容�AnayIndexReadOnly�方向�AnayIndex�游戏方向�图5贪吃蛇之间的关系初始化初始化失败面向对象课程设计报告第8页�共27页2.类模块流程图GreedSnake类SnakeFrame进入时间等待状态开始请求退出正常退出不正常退出相关事件返回图6贪吃蛇程序主结构创建SnakeFrame窗口类的一个实例设置关闭窗口按键和窗口高度宽带图7GreedSnake类程序流程图第一菜单及菜单变量创建菜单及菜单项将组件注册给事件监听者面向对象课程设计报告第9页�共27页SnakePanel类处理给予菜单动作时间图8SnakeFrame类程序流程图设置蛇头身体�随机块和初始运行方向变量处理游戏动作设置蛇头、背景、随机块颜色实现移动接口实现按键接口面向对象课程设计报告第10页�共27页SnakeModel类定义数据成员图9SnakePanel类程序流程图设置函数坐标和方向设置初始化状态设置贪吃蛇界面并初始化游戏是否与运行方向相反保持原来方向按指示方向运动蛇是否吃了随机块是否出界是否相交移动�把蛇头加到蛇身体里面并且把尾巴移出重设置蛇头和蛇身�重新生产随即块游戏结束游戏结束YYYYNNNN面向对象课程设计报告第11页�共27页ArrayIndexReadOnly类ArrayIndex类构造函数得到坐标设置与运行方向相同和相反的表示方法图11ArrayIndexReadOnly类程序流程图是否吃了足够的果实游戏结束�“你赢了”图10SnakeModel类程序流程图Y面向对象课程设计报告第12页�共27页4�课程设计成果设置X�Y坐标设置与运行方向相同或相反的表示方法图12ArrayIndex类程序流程图面向对象课程设计报告第13页�共27页打开贪吃蛇游戏后�出现如图14所示界面。点击“开始”出现如图15界面。图14面向对象课程设计报告第14页�共27页按“↑↓←→”控制蛇的方向�如图16所示。图15面向对象课程设计报告第15页�共27页蛇碰到边界则游戏结束�出现“游戏结束”�如图17所示。蛇碰到自己的身体则游戏结束�如图17所示。图16面向对象课程设计报告第16页�共27页本次实验部分源程序代码�importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassSnakeextendsJFrame{privateJPanelcontentPane;//窗体内容网格privateJButtonbtnStart=newJButton(开始);//游戏开始按钮privateJButtonbtnPause=newJButton(暂停);//游戏暂停按钮privateJButtonbtnExit=newJButton(退出);//游戏退出按privateJPanelpnlTop=newJPanel();//顶部按钮和分数面板privateJPanelpnlLeft=newJPanel();//左侧面板privateJPanelplayPanel=newJPanel();//游戏区面板privateBorderLayoutborderLayout1=newBorderLayout();//容器布局管理器图17面向对象课程设计报告第17页�共27页privateBorderLayoutborderLayout2=newBorderLayout();privateGridLayoutrbtnLayout=newGridLayout(10,1,1,1);privatestaticfinalintUP=1,LEFT=2,DOWN=3,RIGHT=4;//蛇运动方向privatestaticfinalintROWS=30;//游戏区行数privatestaticfinalintCOLS=50;//游戏区列数privatebooleanisPause=false;//游戏暂停标志privatebooleanisEnd;//游戏结束标志privateSnakeBodysnake;//贪食蛇privateintscore=0;//当前得分SnakeThreadthread=newSnakeThread();//游戏主线程privateGridLayoutgrid1=newGridLayout(ROWS,COLS,0,0);//游戏区布局privateJButton[][]blocks;//游戏区的所有方块JPaneljPanel2=newJPanel();JLabeljLabel1=newJLabel(得分�);JLabellblScroe=newJLabel(0);ButtonGroupbuttonGroup1=newButtonGroup();JRadioButtonrbtnLow=newJRadioButton(初级,true);JRadioButtonrbtnMid=newJRadioButton(中级);JRadioButtonrbtnHigh=newJRadioButton(高级);publicSnake(){super(贪食蛇游戏);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);contentPane=(JPanel)this.getContentPane();contentPane.setLayout(borderLayout2);this.setResizable(false);this.setSize(newDimension(512,414));keyActionkeyAct=newkeyAction();this.addKeyListener(keyAct);btnStart.addKeyListen