1、Java贪吃蛇报告第xx小组:贪吃蛇游戏项目小组成员及分工姓名角色负责功能组长设计与编码测试 主要完成模式选择窗口和游戏主窗口菜单栏下拉菜单的设计与程序编写,贪吃蛇游戏界面布局,游戏的操作步骤设计。程序的调试 主要完成游戏主窗口的设计与编程,设计贪吃蛇的移动方向键设置,得分规则等,以及最后程序的调试。 主要完成主菜单窗口的设计和程序编写,界面的设计布局,游戏主窗口界面背景设置,按钮的图片设置等。一、实验环境操作系统:Windows 7编程环境:Eclipse、JDK二、实验内容与完成情况(主要介绍项目总体功能分析与说明。)贪吃蛇小游戏的JAVA程序是利用上 、下 、左、右 方向键来改变蛇的运动
2、方向,按空键暂停游戏,按enter键重新开始。长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常进行游戏。以不同的速度和不同方向吃到食物所获得的分数也不相同。窗口功能说明:设计了三个窗口,分别是游戏主窗口,主菜单窗口,模式选择窗口。菜单栏分别为:游戏菜单(重新开始)和帮助菜单以及返回(返回主菜单)。其中,按返回菜单按钮后会显示主菜单,其包括游戏开始、设置、退出游戏三项按钮选择;如果按“设置”按钮会进入“模式选择”窗口。而模式选择窗口菜单包括了初级、中级、高级、返回按钮。1、功能1(主菜单窗口)(1)主菜单窗口主要是提供“游戏开始
3、”、“设置”和“退出”按钮。“游戏开始”按钮按下后会进入“游戏主窗口”开始游戏; “设置”按钮是调用“模式选择”窗口对游戏贪吃蛇的速度进行设置; “退出”按钮按下则会直接退出游戏。(2)功能1实现的流程图实现的效果图如下:(3)功能1(主菜单窗口)代码:package Swing;import class setMenu extends JFrame private int speed1 = 200;public static int speed = 200; */ public static void main(String args) (new Runnable() public void
4、 run() try setMenu frame = new setMenu(speed); (frame); (true); catch (Exception e) (); ); /* * Create the frame. */ public setMenu(int speed2) speed1=speed2; public void SsetMenu(final setMenu frame) setTitle(主菜单); setDefaultCloseOperation; setBounds(100, 100, 250, 350); contentPane = new JPanel();
5、 (new Color(102, 204, 102); (new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); (null); */ public static void main(String args) (new Runnable() public void run() try setMenu frame = new setMenu(speed); (frame); (true); catch (Exception e) (); ); /* * Create the frame. */ public setMenu(int sp
6、eed2) speed1=speed2; public void SsetMenu(final setMenu frame) setTitle(主菜单); setDefaultCloseOperation; setBounds(100, 100, 250, 350); contentPane = new JPanel(); (new Color(102, 204, 102); (new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); (null); dd(labelScore, ; (this); (); (false);tart()
7、; / main():主函数 public static void main(String args) Game gs = new Game(200); Override public boolean imageUpdate(Image arg0, int arg1, int arg2, int arg3, int arg4, int arg5) / TODO Auto-generated method stub return false; / Node:结点类class Node int x; int y; Node(int x, int y) = x; = y; / SnakeModel:
8、贪吃蛇模型class SnakeModel implements Runnable Game gs; boolean matrix;/ 界面数据保存在数组里 LinkedList nodeArray = new LinkedList(); Node food; int maxX;/ 最大宽度 int maxY;/ 最大长度 int direction = 2;/ 方向 boolean running = false; int timeInterval = 200;/ 间隔时间(速度) double speedChangeRate = ;/ 速度改变程度 boolean paused = fal
9、se;/ 游戏状态 int score = 0; int countMove = 0; / UP和DOWN是偶数,RIGHT和LEFT是奇数 public static final int UP = 2; public static final int DOWN = 4; public static final int LEFT = 1; public static final int RIGHT = 3; / GreedModel():初始化界面 public SnakeModel(Game gs, int maxX, int maxY,int speed_snake) timeInterv
10、al = speed_snake;/速度 = gs; = maxX; = maxY; matrix = new booleanmaxX; for (int i = 0; i 20 10 : maxX / 2;/蛇头位置,长度 / for (int i = 0; i initArrayLength; +i) int x = maxX / 2 + i; / int y = maxY / 2; / (new Node(x, y); matrixxy = true;/ 蛇身处置true food = createFood(); matrix = true;/ 食物处置true / changeDire
11、ction():改变运动方向 public void changeDirection(int newDirection) if (direction % 2 != newDirection % 2) / 检查方向冲突 direction = newDirection; / moveOn():贪吃蛇运动函数 public boolean moveOn() Node n = (Node) ();/获取蛇头的位置 int x = ; int y = ; / / switch (direction) case UP: y-; break; case DOWN: y+; break; case LEFT
12、: x-; break; case RIGHT: x+; break; if (0 = x & x maxX) & (0 = y & y 0 scoreGet : 10; countMove = 0; food = createFood(); matrix = true; return true; else return false;/ 撞到身体 else / 什么都没有碰到 (new Node(x, y);/ 加上头部 matrixxy = true; n = (Node) ();/ 去掉尾部 matrix = false; countMove+; return true; return f
13、alse;/ 越界(撞到墙壁) / run():贪吃蛇运动线程 public void run() running = true; while (running) try (timeInterval); catch (Exception e) break; if (!paused) if (moveOn() / 未结束 (); else / 游戏结束 (null, GAME OVER, Game Over, ; break; running = false; / createFood():生成食物及放置地点 private Node createFood() int x = 0; int y
14、= 0; do Random r = new Random(); x = (maxX); y = (maxY); while (matrixxy); return new Node(x, y); / speedUp():加快蛇运动速度 public void speedUp() timeInterval *= speedChangeRate; / speedDown():放慢蛇运动速度 public void speedDown() timeInterval /= speedChangeRate; / changePauseState(): 改变游戏状态(暂停或继续) public void
15、changePauseState() paused = !paused; 三、功能测试对系统的所有功能模块进行测试并截图显示,并对出现的问题(及其现象)和解决办法予以记录。游戏主界面:点击“菜单”菜单出现“重新开始”下拉菜单,点击后游戏重新开始点击“帮助”菜单出现“游戏说明”下拉菜单当蛇碰到边界或者碰到自身蛇体,游戏结束。主菜单窗口:模式选择窗口: 对出现的问题(及其现象)和解决办法予以记录:1、开始在程序编写时没规定游戏主窗口的大小,当用鼠标拉大窗口后,出现了蛇在移动时没碰触到边界就出现游戏失败的弹出框即游戏结束。经过查看程序和在网上找资料了解到是由于没有对主窗口设定一定的窗口大小导致的。解
16、决办法为:public static final int DEFAULT_WIDTH = 500; public static final int DEFAULT_HEIGHT = 400; (new Dimension(DEFAULT_WIDTH-10, DEFAULT_HEIGHT-10 );/490*3902、在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,程序出错。发现是因为我们只做了简单的抛出异常操作,使程序运行后效果不出来,经过老师在上课时教的用try-catch去捕捉异常,将抛出一个Exception类的异常对象。try(timeInterval);catch(Exception
17、e)break;3、通过在网上查找资料参考学习到Swing中弹出对话框实现显示出信息、提出问题、警告、用户输入参数等功能并显示一个带有OK 按钮的模态对话框。JOptionPane类其中封装了很多的方法,很方便。在这些模式对话框中使用了showMessageDialog()显示信息对话框以及showOptionDialog()显示选择性的对话框 等。 四、项目总结每个小组成员单独完成,内容包括项目分析、开发和团队合作过程中的经验和教训,如:遇到的困难及解决方法、主要技术的使用等。 设计程序采用什么编程语言并不是最重要的,关键是要有一个清晰的思路和一个完整的软件流程图,所有要先把设计原理与思路搞
18、清楚,再把流程图画出来。在编码过程中使用不了解的函数还可以查资料或翻书来了解功能和执行语法。在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”不仅提高代码感,也培养做事细心的习惯,温故和矫正中发现问题,更好的完善程序。还有要养成养成注释程序的习惯,一个程序的完美与否不仅是实现功能,还是能清晰快速地明白编写者的思路,这样使资料的保存和交流方便。五、个人课程总结报告在基于原来的Java学习上了解了更细致的Java学习和编程思路,老师的讲解很细致,原来学习Java没想过功能语法上,在课堂学习中渐渐更加深对各函数语法的理解有助于日后在编码时更准确的应用这些工具。在学习的过程中也发现Java的语言功能远不止目前所学到的这些,课堂之后自己还要继续去发掘,不会的东西还有太多,需要不断去了解积累更新,Java的编程才能更得心应手。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1