《贪吃蛇JAVA设计报告(共20页).doc》由会员分享,可在线阅读,更多相关《贪吃蛇JAVA设计报告(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上第一章 绪论1.1 开发的背景 随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。 贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。 虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还
2、是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。 1.2 开发的目的在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人没有足够的时间去休闲娱乐,放松自己。这款小型的手机游戏,可以让我们随时随地都能享受游戏,。让我们从繁重的日常生活中解脱出来。游戏的主界面应该力求美观,爽心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的
3、游戏环境。1.3 开发的意义 通过这个游戏可以使玩贪吃蛇的人感到心情轻松,愉悦。使心情得以舒畅,让工作的压力可以得到缓解。给大家一个愉悦的游戏环境。1.4 开发工具简介 Sun Microsystems公司在推出Java语言的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK: Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。 Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。 所有的Java文件编辑、编译、调试、解释运行都
4、是通过使用字符命令来执行操作。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JDK 是整个Java的核心,包括了Java运行环境(Java RuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。 JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就
5、不能用。 最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比SunJDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。第二章 需求分析2.1 需求分析本游戏主要是完成贪吃蛇游戏的基本操作。本游戏需要满足以下几点要求:(1) 利用方向键来改变蛇的运行方向。 (2) 在随机的
6、地方产生食物。 (3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。2.2 可行性分析贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。 贪吃蛇的核心算法是如何实现移动和吃掉食物,在没有碰到食物的时候,把当前运动方向上的下个节点入队,然后把头指针所指的节点出队,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够停止和运行。本次设计主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写
7、的应用程序不用修改就可在不同的软硬件平台上运行。 第三章 系统概要设计3.1 设计目标本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。3.2 系统功能模块本系统共包括1个java源文件和7个类文件。 1. 类之间的关系如图1所示。 贪吃蛇JFramePaintReformUpgrowthIsdeadCheckRun图1类之间的关系2java源文件及其功能如表所示。表1 java源文件及其功能序号文件名主要功能1贪吃蛇该文件为程序入口,含有main方法。2run实现菜
8、单控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏暂停或继续,还有分数等。 3check 该文件实现蛇的结构和具体运动,如判断食物是否和怎样被吃掉及判断后的动作。 4reform该文件实现组成蛇身的单位-食物。5paint该文件实现画板功能,用红蓝间隔画蛇身。 6isdead该文件为记录状态的线程。 7upgrowth该文件为蛇运动以及记录分数的线程。第四章 详细设计与实现4.1 程序设计1.主类贪吃蛇 (1)主类为此程序的入口,定义了贪吃蛇的对象frame,开始运行此程序。 (2)源代码见详细代码。2.类SnakeFrame(1)成员变量见表2表2 主要成员变量成员变量描述变量类型
9、名称状态标签Private JLabelzhuantaiLabel分数标签Private JLabelfenshuLabel蛇面板private JPanelsnakePanel蛇类对象private Snake贪吃蛇菜单条private JMenuBarbar游戏菜单JMenuyouxiMenu帮助菜单JMenubangzhuMenu新菜单项JMenuItemyouxiItem关于菜单项JMenuItemguanyuItem简单单项JMenuItemjiandanItem普通菜单项JMenuItemputongItem困难菜单项JMenuItemKunnanItem开始菜单项JMenuIte
10、mkaishiItem帮助菜单项JMenuItembangzhuItem (2)方法见表3表3 主要方法方法名功能SnakePanel()创建蛇的面板addKeyListener监视器setBounds()设置尺寸JLabel()设置标签JMenu()创建菜单JMenuItem构造菜单项3类贪吃蛇 (1)成员变量见表4表4 主要成员变量成员变量描述变量类型名称是否运动booleanisRun蛇体ArrayListbody食物Reformfood方向intderection分数intFenshu状态intZhuangtai简单public static final intJiandan普通pub
11、lic static final intPutong困难public static final intKuannan运动中public static final intRUNNING左public static final intLEFT上public static final intUP右public static final intRIGHT下public static final intDOWN(2)方法见表5表5 主要方法方法名功能check()判断食物是否被蛇吃掉,如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉Upgrowth()在随机的地方产生食物Reform蛇得到食物 4
12、. 类reform (1)成员变量见表6表6 主要成员变量成员变量描述变量类型名称食物块宽public static final intW食物块高public static final intH横坐标intx纵坐标inty (2)源代码见详细代码。5.类Paint 此类为画蛇的面板类,是粉色蛇身算法的类。 源代码见详细代码。6.类Isdead 此类为线程的子类,实现记录状态的功能。源代码见详细代码。7.类Run 此类为线程的子类,实现蛇运动以及记录分数的功能。源代码见详细代码。4.2 各功能界面截图1、贪吃蛇游戏的基本运行界面(1)生成初始界面: 图1 初始界面(2)游戏菜单栏: 图2 游戏菜
13、单栏(3)困难程度菜单栏: 图3 困难程度菜单栏2、程序开始运行界面(1)鼠标点击游戏按钮,开始游戏 图4游戏初始界面(3)按方向键改变蛇的运行方向,并且碰壁后停止游戏: 图5 游戏运行界面4.3 详细代码代码:import java.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.a
14、wt.event.KeyEvent; import java.awt.event.KeyListener;import javax.swing.JCheckBoxMenuItem;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.KeyStroke;public class 贪吃蛇 extends JFrame implements
15、 ActionListener, KeyListener,Runnable private static final long serialVersionUID = 1L;private String temp = null;private JMenuBar menuBar; public JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu; private JMenuItem kaiShiYouXi,exitItem,tanchisheItem,fenShuItem; private JCheckBoxMenuItem cJianDan,cPuTo
16、ng,cKunNan; private int length = 6; private Toolkit toolkit; private int i,x,y,z,objectX,objectY,object=0,growth=0,time;/bojectX,Yprivate 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
17、=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.println(z+);public 贪吃蛇() setVisible(true);menuBar = new JMenuBar();toolkit=getToolkit(); youXiMenu = new JMenu(游戏);kaiShiYouXi = new JMenuItem(开始游戏);exitItem = new
18、JMenuItem(退出游戏); nanDuMenu = new JMenu(困难程度); cJianDan = new JCheckBoxMenuItem(简单); cPuTong = new JCheckBoxMenuItem(普通); cKunNan = new JCheckBoxMenuItem(困难); fenShuMenu = new JMenu(积分排行); fenShuItem = new JMenuItem(最高记录); guanYuMenu = new JMenu(关于); tanchisheItem = new JMenuItem(关于贪吃蛇); guanYuMenu.a
19、dd(tanchisheItem); nanDuMenu.add(cJianDan); nanDuMenu.add(cPuTong); nanDuMenu.add(cKunNan); fenShuMenu.add(fenShuItem); youXiMenu.add(kaiShiYouXi); youXiMenu.add(exitItem); menuBar.add(youXiMenu); menuBar.add(nanDuMenu); menuBar.add(fenShuMenu); menuBar.add(guanYuMenu); tanchisheItem.addActionListen
20、er(this); kaiShiYouXi.addActionListener(this); exitItem.addActionListener(this); addKeyListener(this); fenShuItem.addActionListener(this); KeyStrokkeyOpen = KeyStroke.getKeyStroke(O,InputEvent.CTRL_DOWN_MASK); kaiShiYouXi.setAccelerator(keyOpen); KeyStroke keyExit = KeyStroke.getKeyStroke(X,InputEve
21、nt.CTRL_DOWN_MASK); exitItem.setAccelerator(keyExit); setJMenuBar(menuBar); setTitle(贪吃蛇); setResizable(false); setBounds(300,200,400,400); validate(); setDefaultCloseOperation(EXIT_ON_CLOSE); public static void main(String args)new 贪吃蛇(); public void actionPerformed(ActionEvent e)if(e.getSource()=k
22、aiShiYouXi)length = 10; life = 0; foods = 0; if(she=null) she=new Thread(this);she.start();temp=运行;else if(she!=null)she=null; she= new Thread(this); she.start();temp=运行;if(e.getSource()=exitItem)System.exit(0);if(e.getSource()=tanchisheItem)JOptionPane.showMessageDialog(this,按方向键使蛇移动); if(e.getSour
23、ce()=fenShuItem)JOptionPane.showMessageDialog(this,最高记录为+fenshu+); public void check()isDead();if(she!=null)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.
24、floor(Math.random()*29)*10+50;this.repaint(); /重绘 void isDead() /判断游戏是否结束的方法 switch(z)case 4: x=x+10;break;case 3 ::x=x-10;break;case 2: y=y+10;break;case 1: y=y-10;break;if(x390|y390)she=null;for(i=1;ilength;i+)if(mi=x&ni=y)she=null; if(x=0|x=400|y=0|y=400)temp=停止;elsetemp=运行;public void upgrowth()
25、 /当生成食物时的方法 if(length50)length+; growth-; time=time-10; reform(); life+=100; if(fenshu0;i-) mi=mi-1; ni=ni-1; switch(z)case 4:m0=m0+10;break;case 3:m0=m0-10;break;case 2:n0=n0+10;break;case 1:n0=n0+10;break; public void keyPressed(KeyEvent e) if(she!=null) if(e.getKeyCode()=KeyEvent.VK_UP) if(z!=2)
26、z=1; check(); else if(e.getKeyCode()=KeyEvent.VK_DOWN) if(z!=1) z=2; check(); else if(e.getKeyCode()=KeyEvent.VK_LEFT) if(z!=4) z=3; check(); else if(e.getKeyCode()=KeyEvent.VK_RIGHT) if(z!=3) z=4; check(); public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) public void paint(Graphi
27、cs g) g.setColor(Color.DARK_GRAY); /设置背景 g.fillRect(0,50,400,400); g.setColor(Color.pink); for(i=0;i=length-1;i+) g.fillRect(mi,ni,10,10); g.setColor(Color.red); /蛇的食物 g.fillRect(objectX,objectY,10,10); g.setColor(Color.yellow); g.drawString(运行状态:+n+this.temp,290,60); g.drawString(当前 分数:+n+this.life
28、,290,75); g.drawString(当前已吃食物数:+n+this.foods,290,90); 第五章 测试5.1 测试的意义系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。 测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。根据测试的概念和目的,在进行信息系统测试时应遵循以基本原则。5.2 测试过程(1)拟定测试计划。在制定测试计
29、划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。(3)根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利用前面介绍的测试用例和设计技术,产生测试设计说明文档,其内容主要有被测项目、输人数据、测试过程、预期输出结果等。 (4)实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编
30、制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。 (5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。 5.3 测试结果程序运行正常,没有发现什么错误,可以运行自如。第六章 心得体会 课程设计就快结束了,我自己认为自己学java没学好,而在整个新技术专题中我觉得贪吃蛇的游戏应该是最简单的。通过这次课程设计,我对java又有了更深刻的认识。也有了更深一步的喜爱,决定一定要努力学好java,并能更好的应用于以后的工作中。这次贪吃蛇的设计,俺做的不
31、是很完美,也没想象中的那么好,但也获得了许多宝贵的经验:1) 在设计程序之前,务必要对自己所要设计的题目和内容有一个系统的,大概的了解,知道所设计的题目和内容包含哪些资源。2) 设计程序采用什么编程语言并不是非常重要,关键是要有一个清晰的思路和一个完整的软件流程图,所有要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路,发现错误也是取得成绩及成绩的一种必经之路。4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白自己的思路,这样也为资料的保存和交流提供了方便。 在以后的工作中,我希望我能把这些经验应用起来。为以后的工作顺利进行,也让自己获得一定的能力,能够拥有一份好的工作。参考文献【 1 】 张鹏、宁莹璋、王雪梅, .海洋出版社,2006。【 2 】 陈晋波、李雪娟、熊飞,手机游戏开发实践.电子工业出版社,2005。目录专心-专注-专业