1、(3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。2.2 可行性分析贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。 贪吃蛇的核心算法是如何实现移动和吃掉食物,在没有碰到食物的时候,把当前运动方向上的下个节点入队,然后把头指针所指的节点出队,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够停止和运行。本次设计主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修
2、改就可在不同的软硬件平台上运行。第三章 系统概要设计3.1 设计目标本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。3.2 系统功能模块本系统共包括1个java源文件和7个类文件。 1. 类之间的关系如图1所示。图1类之间的关系2java源文件及其功能如表所示。表1 java源文件及其功能序号文件名主要功能1贪吃蛇该文件为程序入口,含有main方法。2run实现菜单控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏暂停或继续,还有分数等。 3check 该文
3、件实现蛇的结构和具体运动,如判断食物是否和怎样被吃掉及判断后的动作。 4reform该文件实现组成蛇身的单位-食物。5paint该文件实现画板功能,用红蓝间隔画蛇身。 6isdead该文件为记录状态的线程。 7upgrowth该文件为蛇运动以及记录分数的线程。第四章 详细设计与实现4.1 程序设计1.主类贪吃蛇 (1)主类为此程序的入口,定义了贪吃蛇的对象frame,开始运行此程序。 (2)源代码见详细代码。2.类SnakeFrame(1)成员变量见表2表2 主要成员变量成员变量描述变量类型名称状态标签Private JLabelzhuantaiLabel分数标签fenshuLabel蛇面板p
4、rivate JPanelsnakePanel蛇类对象private Snake菜单条private JMenuBarbar游戏菜单JMenuyouxiMenu帮助菜单bangzhuMenu新菜单项JMenuItemyouxiItem关于菜单项guanyuItem简单单项jiandanItem普通菜单项putongItem困难菜单项KunnanItem开始菜单项kaishiItem帮助菜单项bangzhuItem(2)方法见表3表3 主要方法方法名功能SnakePanel()创建蛇的面板addKeyListener监视器setBounds()设置尺寸JLabel()设置标签JMenu()创建菜
5、单构造菜单项3类贪吃蛇 (1)成员变量见表4表4 主要成员变量是否运动booleanisRun蛇体ArrayListbody食物Reformfood方向intderection分数Fenshu状态Zhuangtai简单public static final intJiandan普通Putong困难Kuannan运动中RUNNING左LEFT上UP右RIGHT下DOWN(2)方法见表5表5 主要方法check()判断食物是否被蛇吃掉,如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉Upgrowth()在随机的地方产生食物蛇得到食物 4. 类reform (1)成员变量见表6表6 主要成员变
6、量食物块宽W食物块高H横坐标x纵坐标y5.类Paint 此类为画蛇的面板类,是粉色蛇身算法的类。 源代码见详细代码。6.类Isdead 此类为线程的子类,实现记录状态的功能。源代码见详细代码。7.类Run 此类为线程的子类,实现蛇运动以及记录分数的功能。4.2 各功能界面截图1、贪吃蛇游戏的基本运行界面(1)生成初始界面: 图1 初始界面(2)游戏菜单栏:图2 游戏菜单栏(3)困难程度菜单栏:图3 困难程度菜单栏2、程序开始运行界面(1)鼠标点击游戏按钮,开始游戏 图4游戏初始界面(3)按方向键改变蛇的运行方向,并且碰壁后停止游戏:图5 游戏运行界面4.3 详细代码代码:import java
7、.awt.Color;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.JCheckBoxMenuItem;import javax.swing.JFrame;import j
8、avax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.KeyStroke;public class 贪吃蛇 extends JFrame implements ActionListener, KeyListener,Runnable private static final long serialVersionUID = 1L;private String temp = null;private JMe
9、nuBar menuBar;public JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;private JMenuItem kaiShiYouXi,exitItem,tanchisheItem,fenShuItem;private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;private int length = 6;private Toolkit toolkit;private int i,x,y,z,objectX,objectY,object=0,growth=0,time;/bojectX,Y
10、private int m=new int50;private int n=new int50;private static Thread she = null;private int life=0;private int foods = 0;private int fenshu=0;public void run()time=800;for(i=0;i=length-1;i+)mi=90-i*10;ni=60; x=m0;y=n0;z=4;while(she!=null)check();tryThread.sleep(time);catch(Exception ee)System.out.p
11、rintln(z+);public 贪吃蛇() setVisible(true);menuBar = new JMenuBar();toolkit=getToolkit();youXiMenu = new JMenu(游戏kaiShiYouXi = new JMenuItem(开始游戏exitItem = new JMenuItem(退出游戏nanDuMenu = new JMenu(困难程度cJianDan = new JCheckBoxMenuItem(简单cPuTong = new JCheckBoxMenuItem(普通cKunNan = new JCheckBoxMenuItem(困
12、难fenShuMenu = new JMenu(积分排行fenShuItem = new JMenuItem(最高记录guanYuMenu = new JMenu(关于tanchisheItem = new JMenuItem(关于贪吃蛇guanYuMenu.add(tanchisheItem);nanDuMenu.add(cJianDan);nanDuMenu.add(cPuTong);nanDuMenu.add(cKunNan);fenShuMenu.add(fenShuItem);youXiMenu.add(kaiShiYouXi);youXiMenu.add(exitItem);men
13、uBar.add(youXiMenu);menuBar.add(nanDuMenu);menuBar.add(fenShuMenu);menuBar.add(guanYuMenu);tanchisheItem.addActionListener(this);kaiShiYouXi.addActionListener(this);exitItem.addActionListener(this);addKeyListener(this);fenShuItem.addActionListener(this);KeyStrokkeyOpen = KeyStroke.getKeyStroke(O,Inp
14、utEvent.CTRL_DOWN_MASK);kaiShiYouXi.setAccelerator(keyOpen);KeyStroke keyExit = KeyStroke.getKeyStroke(XexitItem.setAccelerator(keyExit);setJMenuBar(menuBar);setTitle(贪吃蛇setResizable(false);setBounds(300,200,400,400);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);public static void main(String a
15、rgs)new 贪吃蛇();public void actionPerformed(ActionEvent e)if(e.getSource()=kaiShiYouXi)length = 10;life = 0;foods = 0;if(she=null) she=new Thread(this);she.start();temp=运行;else if(she!she=null;she= new Thread(this);if(e.getSource()=exitItem)System.exit(0);if(e.getSource()=tanchisheItem)JOptionPane.sho
16、wMessageDialog(this,按方向键使蛇移动if(e.getSource()=fenShuItem)最高记录为+fenshu+public void check()isDead();if(growth=0)reform(); /得到食物 elseupgrowth(); /生成食物 if(x=objectX&y=objectY)object=0;growth=1;toolkit.beep();if(object=0)object=1;objectX=(int)Math.floor(Math.random()*39)*10;objectY=(int)Math.floor(Math.ra
17、ndom()*29)*10+50;this.repaint(); /重绘 void isDead() /判断游戏是否结束的方法 switch(z)case 4: x=x+10;break;case 3 ::x=x-10;case 2: y=y+10;case 1: y=y-10;if(x390|y390)for(i=1;length;if(mi=x&ni=y)if(x=0|x=400|y=0|y=400)停止public void upgrowth() /当生成食物时的方法 if(length50)length+;growth-;time=time-10;life+=100;if(fenshu
18、0;i-) mi=mi-1;ni=ni-1;case 4:m0=m0+10;case 3:m0=m0-10;n0=n0+10;public void keyPressed(KeyEvent e) =null) if(e.getKeyCode()=KeyEvent.VK_UP) if(z!=2) z=1;else if(e.getKeyCode()=KeyEvent.VK_DOWN) =1) z=2;else if(e.getKeyCode()=KeyEvent.VK_LEFT) =4) z=3;else if(e.getKeyCode()=KeyEvent.VK_RIGHT) =3) publ
19、ic void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) public void paint(Graphics g) g.setColor(Color.DARK_GRAY); /设置背景 g.fillRect(0,50,400,400);g.setColor(Color.pink);i+) g.fillRect(mi,ni,10,10);g.setColor(Color.red); /蛇的食物 g.fillRect(objectX,objectY,10,10);g.setColor(Color.yellow);g.draw
20、String(运行状态:+n+this.temp,290,60);当前 分数:+this.life,290,75);当前已吃食物数:+this.foods,290,90);第五章 测试5.1 测试的意义系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。 测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。根据测试的概念和目的,在进行信息系统测试时应遵循以基本原则。5.2 测试过程(1)拟定测试计划。在制定测试计划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。(3)根据测试大纲设计和生成
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1