当前位置:文档之家› 贪吃蛇的设计与实现

贪吃蛇的设计与实现


6
退出
正常退 出
图 6 贪吃蛇程序主结构
2.类模块流程图
GreedSnake 类
创建 SnakeFrame 窗口类的一个实 例
设置关闭窗口按键和窗口高度宽 带 图 7GreedSnake 类程序流程图
SnakeFrame 第一菜单及菜单变量 创建菜单及菜单项
将组件注册给事件监听者 处理给予菜单动作时间 图 8SnakeFrame 类程序流程图
设置与运行方向相同 和相反的表示方法 图 11 ArrayIndexReadOnly 类程序流程图
ArrayIndex 类 设置 X,Y 坐标
设置与运行方向相同 或相反的表示方法 图 12 ArrayIndex 类程序流程图
9
四、应用程序
打开贪吃蛇游戏后,出现如图 14 所示界面
图 14 点击“begin”出现如图 15 界面。
} public void keyPressed(KeyEvent e) //按下键盘方向键
14
{ if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右键 { if(fangxiang!=1)//如果先前方向不为左 fangxiang=0; } else if(e.getKeyCode()==KeyEvent.VK_LEFT) { if(fangxiang!=0) fangxiang=1; } else if(e.getKeyCode()==KeyEvent.VK_UP) { if(fangxiang!=3) fangxiang=2; } else if(e.getKeyCode()==KeyEvent.VK_DOWN) { if(fangxiang!=2) fangxiang=3; }
ArrayIndex 类 用来得到坐标,设置坐标以及判断运行方向相同或相反。 ArrayIndexReadOnly 类 用来得到坐标,以及判断运行方向相同或相反。
三、逻辑设计
1.程序的主要结构:
本次所设计贪吃蛇游戏程序的主结构如图 6 所示。
初始化
初始化失败
不正常退出
进入时间等待状 态
返回
相关事件
开始请求
} class MyWindow extends Frame implements ActionListener//自定义窗口类 { MyPanel my; Button btn; Panel panel; MyWindow() { super("GreedSnake"); my=new MyPanel(); btn=new Button("begin"); panel=new Panel(); btn.addActionListener(this); panel.add(new Label("begin 后请按 Tab 键选定蛇")); panel.add(btn); panel.add(new Label("按上下左右键控制蛇行动")); add(panel,BorderLayout.NORTH); add(my,BorderLayout.CENTER); setBounds(100,100,610,500); setVisible(true);
游戏控制模块
能游






退


始 功
功 能
图 4 游戏控制模块框架
1. 游戏开始控制:单击“begin”按钮,游戏画布既有移动的贪吃蛇出现,游戏
正式开始
2. 游戏退出控制:单击“×”按钮,退出游戏。
(7)类模块设计
1.类模块之间的关系
通过对功能要求的分析,将贪吃蛇游戏功能划分为 6 个类模块,他们的关系如图
13
} } class MyPanel extends Panel implements KeyListener,Runnable//自定义面 板类,继承了键盘和线程接口 { Button snake[]; //定义蛇按钮 int shu=0; //蛇的节数 int food[]; //食物数组 boolean result=true; //判定结果是输 还是赢 Thread thread; //定义线程 static int weix,weiy; //食物位置 boolean t=true; //判定游戏是否结束 int fangxiang=0; //蛇移动方向 int x=0,y=0; //蛇头位置 MyPanel() { setLayout(null); snake=new Button[20]; food=new int [20]; thread=new Thread(this); if(shu==15) //如果蛇节数等于 15 则胜利 { t=false; result=true; repaint(); } }
2、测试结果 程序运行正常,没有发现什么错误。
六、部分源程序代码
import java.awt.*; import java.awt.event.*; public class GreedSnake //主类 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new MyWindow();
SnakeFrame 类 用来设计游戏的用户界面。
SnakePanel 类 设置游戏运行状态,设置蛇头颜色,背景颜色,随机块颜色,移动以及分数更新, 实现上下左右移动的方法接口。
SnakeModel 类 设置初始化蛇的形状和运行方向,设置随机块的位置,判断游戏是否出界,以及 出界后的处理,设置方向的更新。
游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏
的退出按钮。游戏界面主框架的主要结构如图 3 所。
游戏的主界面框架
(面游












面游 戏 控 制 按 钮 界
图 3 游戏主界面框架
4
(6)游戏控制模块 游戏控制模块主要通过主界面上的按钮来控制游戏的开始、游戏的暂停、游戏的 退出这三个功能。在这个模块中,需要给各个按钮或文本框加入代码,来对上述 的功能加以进一步的实现。游戏控制模块的主要框架如图 4 所示。
5 所示。 图 5 贪吃蛇之间的关系
GreedSnake ( 主 类)SnakeFramFra bibliotek (用户界面 类)
SnakeModel (游戏内 容)
SnakePabel (游戏界面及内
容)
AnayIndexReadOnly( 方 向)
AnayIndex ( 游 戏 方 向)
5
(8)各类模块设计概要 1.GreedSnake 类 GreedSnake 类 该类包含 main 方法,为应用程序的主类。该类用来创建游戏的用户界面,整个 程序从该类的 main 方法开始执行。
(4)实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试 周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用 例,对被测软件或设备进行完整的测试。
(5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行 概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用 的修改方法,各项修改预计的工作量及修改的负责人员。
本系统主要完成一下几个方面的功能: 1. 游戏控制功能——包括游戏的开始、暂停、退出 2. 界面布局 3. 其他辅助功能
(4)总设计模块的划分 根据游戏游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设 计,如图 2 所示。
贪吃蛇游戏
游戏主界面模 块
(5)游戏煮界面模块
游戏控制模块
图 2 游戏总设计模 块
即块
Y 游戏结束
游戏结束
Y
是否与运行 方向相反
N 按指示方向运 动
蛇是否吃了 随机块
N 是否出界
N 是否相交
N
8
移动,把蛇头加到蛇身 体里面并且把尾巴移 出
是否吃了足 够的果实
Y 游戏结束,“你赢了” 图 10SnakeModel 类程序流程 图
ArrayIndexReadOnly 类
构造函数得到坐标
SnakePanel 类 设置蛇头身体,随机块和 初始运行方向变量
处理游戏动作
设置蛇头、背景、随机块 颜色 7
实现移动接 口
实现按键接口
定义数据成 员 图 9SnakePanel 类程序流程图
SnakeModel 类 设置函数坐标和方向
设置初始化状态 设置贪吃蛇界面并初始化游戏
Y 保持原来方 向
重设置蛇头和蛇 身,重新生产随 Y
开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的 内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。
(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中 针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。
(3)根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利 用前面介绍的测试用例和设计技术,产生测试设计说明文档,其内容主要有被测 项目、输人数据、测试过程、预期输出结果等。
进入游戏画 面 单机“begin”按钮,游戏 开始,蛇开始随即出现
键盘操作: “左移” “右移” “向下” “向上”
没有吃到实 物且蛇碰到 边界或者自 身
游戏中途欲退 出,
单击游戏界 面上的“×”
游戏结束
图 1 游戏流程设 计
3
(2)功能模块设计。 软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问 题。包括如何把该游戏划分成若干个模块,决定各个模块之间的接口、模块之间 传递的信息,以及模块结构的设计等。 (3)游戏功能
相关主题