1、郑州科技学院 课程设计说明书 课程名称:_ Java程序设计课程设计 _ 设计题目:_ 贪吃蛇小游戏设计 系(院):_ 信息工程学院 专业班级:12计算机科学与技术(嵌入式)1班 说 明1. 课程设计进行期间,学生应按教学计划,将每天的学习情况(包括学习内容、遇到的问题及解决方法、心得体会等)如实进行记录。2. 结束时,根据课程设计内容和学习记录编写课程设计说明书。3. 指导教师应综合考虑学生的学习态度、设计质量、答辩情况等,给出评语和成绩。课程设计成绩评定表评定项目内容满分评分总分学习态度学习认真,态度端正,遵守纪律。10设计情况认真查阅资料,勤学好问,独立思考,分析解决问题的能力较强。40
2、说明书质量设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;工作量等达到课程设计任务书规定的要求;图、表、文字表达准确规范,内容完善。40答辩情况回答问题准确,基本概念清楚,有理有据,有一定深度。10总成绩采用五级分制;优、良、中、及格、不及格。90分以上为优秀;80-89为良好;70-79为中等;60-69为及格;60分以下为不及格。指导教师评语: 签 名: 年 月 日郑州科技学院Java程序设计课程设计 设计(论文)题目: 贪吃蛇小游戏 所 在 院: 信息工程学院 专 业 班 级: 12计算机科学与技术(嵌入 式方向)1班 2014年12月26日郑州科技学院课程设计(论文)任务书
3、设计题目: 贪吃蛇小游戏 专业班级: 12计算机科学与技术(嵌入式)1班 主要内容:设计贪吃蛇游戏主要包含:类、窗口(JFarm)、程序命令和判断命令。采用图形用户界面,通过菜单选择相应的操作,直观且操作简单。编辑平台选用Eclipse 。所用到的知识点有:类的基本构成,异常处理,图形用户界面,文件操作和数据库。基本要求:按照内容要求,设计完整的贪吃蛇小游戏。要求调试通过,不存在漏洞,方便用户操作。功能的实现上力求容错能力要强且提示信息完备。完成期限: 2014年12月22日 指导教师签名: 评审小组负责人签名: 摘 要 近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等
4、优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。JBuilder是Borland公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。 “贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。 本文在介绍Java相关技
5、术和国内外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。概要设计给出二个功能模块的主框架以及六个类模块的函数调用关系;详细设计介绍了Java标准运行环境的配置,重点给出各个类模块的程序流程图以及表,列表介绍了各个类包含的变量、使用的方法,展示了游戏的界面。本文还介绍了游戏软件的程序调试过程和功能测试结果。关键词:java;贪吃蛇;eclipse目录引 言3一、系统开发环境41.1 开发工具41.2 应
6、用环境5二、系统需求分析52.1需求分析52.2 可行性分析5三、系统概要设计63.1 设计目标63.2 系统功能模块6四、系统详细设计84.1 程序设计84.2 各功能界面截图11五、系统测试135.1 测试的意义135.2 测试过程145.3 测试结果15参考文献15引 言“贪吃蛇”游戏是一个经典的游戏,它因简单的操作、很强的娱乐性而广受欢迎。对于程序来说贪吃蛇制作相对简单,而且逻辑性强,通常是要步入游戏开发这个队伍前必练的项目。贪吃蛇这个游戏的制作方法对于以前的我而言是很神秘的,我希望通过我自己所学的知识和自己的努力把它剖析起来。正是由于这个想法,本文基于java技术和Eclipse开发
7、环境,设计并实现了一个操作简单、界面美观的“贪吃蛇”游戏。由于自己初次编写程序,时间的紧迫和自己的能力有限,编写的贪吃蛇游戏还是相对简单,但就整个游戏来说,目的是通过本游戏的设计与实现,达到学习java技术和熟悉软件开发流程的目的。我相信在以后通过自己不断的努力我会在编程这条路上越走越远。本文首先介绍了java技术,对java技术进行了概述,然后对开发工具进行了选择,又进行了需求分析进而通过java语言设计出了贪吃蛇这个经典的小游戏,为了保证代码的正确性和可靠性最后还进行了系统测试。一、系统开发环境1.1 开发工具 Sun Microsystems公司在推出Java语言的同时,推出了一套开发工
8、具JDK。Sun提供的基于字符模式的Java开发工具包JDK: Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。 Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JDK 是整个Java的核心,包括了Java运行环境(Java Runtime
9、Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。 最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比SunJDK包含的JVM高出许多。但不管怎么说,我们还是需要先把Sun JDK掌握好。1.2 应用环境(1)操作系统:Solaris、WindowsXP、Windows 95等(2). 应用软件:jdk1.5二、系统需求分析2.1需求分析本系
10、统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求:(1) 利用方向键来改变蛇的运行方向。 (2) 空格键暂停或继续游戏,并在随机的地方产生食物。 (3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。2.2 可行性分析贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。 贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。实现贪吃
11、蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。 本次设计我将主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。 由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。三、系统概要设计3.1 设计目标本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变
12、成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。3.2 系统功能模块本系统共包括1个java源文件和7个类文件。 1、类之间的关系如图1所示。 SnakeGameSnakeFrameSnakeRunnableStatusRunnableSnakePanelNodeSnake 图1类之间的关系2.java源文件及其功能如表所示。表1 java源文件及其功能序号文件名主要功能1SnakeGame该文件为程序入口,含有main方法。2SnakeFrame实现菜单控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏暂停或继续,还有分数等。 3Snake 该文件实现蛇的结构和具体运动,如判断食物
13、是否和怎样被吃掉及判断后的动作。 4Node该文件实现组成蛇身的单位-食物。5SnakePanel该文件实现画板功能,用红蓝间隔画蛇身。 6StatusRunnable该文件为记录状态的线程。 7SnakeRunnable该文件为蛇运动以及记录分数的线程。四、系统详细设计4.1 程序设计1.主类SnakeGame (1)主类为此程序的入口,定义了SnakeFrame的对象frame,开始运行此程序。 (2)源代码见文件SnakeGame.Java2.类SnakeFrame(1)成员变量见表2表2 主要成员变量成员变量描述变量类型名称蛇面板private JPanelsnakePanel速度标签
14、private JLabelspeedLabel蛇类对象private Snakesnake菜单条private JMenuBarbar游戏菜单JMenugameMenu帮助菜单JMenuhelpMenu速度菜单JMenuspeedMenu新菜单项JMenuItemnewItem暂停菜单项JMenuItempauseItem关于菜单项JMenuItemaboutItem慢菜单项JMenuItemslowItem中间菜单项JMenuItemmidItem快菜单项JMenuItemfastItem开始菜单项JMenuItembeginItem帮助菜单项JMenuItemhelpItem(2)方法见
15、表3表3 主要方法方法名功能SnakePanel()创建蛇的面板addKeyListener监视器setBounds()设置尺寸JLabel()设置标签JMenu()创建菜单JMenuItem构造菜单项3.类Snake(1)成员变量见表4表4 主要成员变量成员变量描述变量类型名称是否运动booleanisRun蛇体ArrayListbody食物Nodefood方向intderection分数intscore状态intstatus速度intspeed慢public static final intSLOW中public static final intMID快public static fina
16、l intFAST运动中public static final intRUNNING已暂停public static final intPAUSED游戏结束public static final intGAMEOVER左public static final intLEFT(1)方法见表5表5 主要方法方法名功能isEaten()判断食物是否被蛇吃掉,如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉isCollsion()判断是否碰撞makeFood()在随机的地方产生食物changeDerection(int newDer)改变运行方向move()蛇在运行中所采取的措施4.类Node(
17、1)成员表量见表6表6 主要成员变量成员变量描述变量类型名称食物块宽public static final intW食物块高public static final intH横坐标intx纵坐标inty(2)源代码见文件SnakeGame.java5.类SnakePanel 此类为画蛇的面板类,是实现红蓝间隔画蛇身算法的类。6.类StatusRunnable 此类为线程的子类,实现记录状态的功能。 源代码见文件SnakeGame.java 7.类SnakeRunnable 此类为线程的子类,实现蛇运动以及记录分数的功能。 源代码见文件SnakeGame.java4.2 各功能界面截图1、贪吃蛇游
18、戏的基本运行界面(1)生成初始界面: 图1 初始界面(1)游戏菜单栏: 图2 游戏菜单栏2.程序开始运行界面(1)鼠标点击New Game按钮,开始游戏(红色方块为食物,蓝黄相间为初始的蛇体): 图3 游戏开始运行界面(2)按空格键,游戏开始运行,蛇开始移动,并且吃到一次食物即红色方块后就变成蛇体:图4 吃到东西变换五、系统测试5.1 测试的意义系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。 测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现
19、错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。根据测试的概念和目的,在进行信息系统测试时应遵循以基本原则。5.2 测试过程(1)拟定测试计划。在制定测试计划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。(3)根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利用前面介绍
20、的测试用例和设计技术,产生测试设计说明文档,其内容主要有被测项目、输人数据、测试过程、预期输出结果等。 (4)实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。 (5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。 5.3 测试结果程序运行正常,没有发现什么错误。参考文献(1)耿祥义,张跃平. Java2实用教程(第三版).清华大学出版社,200
21、6。(2)陈昊鹏同译者作品 .Java编程思想(第4版).机械工业出版社,2007。(3)卜照斌同译者作品 段来盛 赖伶 等.Java 2编程详解.电子工业出版社,2001。源程序代码: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.awt.event.KeyE
22、vent; 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 ActionListe
23、ner, KeyListener,Runnable /* * */private static final long serialVersionUID = 1L;private JMenuBar menuBar; private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu; private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem; private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan; private int length = 6
24、; 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 Thread she = null; private int life=0; private int foods = 0; private int fenshu=0; public void run() time=500; for(i=0;i=length-1;i+) mi=90-i*10;
25、ni=60; x=m0; y=n0; z=4; while(she!=null) check(); try Thread.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 JMenuItem(退出游戏); nanDuMenu
26、 = new JMenu(困难程度); cJianDan = new JCheckBoxMenuItem(简单); cPuTong = new JCheckBoxMenuItem(普通); cKunNan = new JCheckBoxMenuItem(困难); fenShuMenu = new JMenu(积分排行); fenShuItem = new JMenuItem(最高记录); guanYuMenu = new JMenu(关于); zuoZheItem = new JMenuItem(关于作者); guanYuMenu.add(zuoZheItem); nanDuMenu.add(
27、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); zuoZheItem.addActionListener(this); kaiShiYouXi.addActionListe
28、ner(this); exitItem.addActionListener(this); addKeyListener(this); fenShuItem.addActionListener(this); KeyStroke keyOpen = KeyStroke.getKeyStroke(O,InputEvent.CTRL_DOWN_MASK); kaiShiYouXi.setAccelerator(keyOpen); KeyStroke keyExit = KeyStroke.getKeyStroke(X,InputEvent.CTRL_DOWN_MASK); exitItem.setAc
29、celerator(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()=kaiShiYouXi) length = 6; life = 0
30、; foods = 0; if(she=null) she=new Thread(this); she.start(); else if(she!=null) she=null; she= new Thread(this); she.start(); if(e.getSource()=exitItem) System.exit(0); if(e.getSource()=zuoZheItem) JOptionPane.showMessageDialog(this, 12计嵌+nn n); if(e.getSource()=fenShuItem) JOptionPane.showMessageDi
31、alog(this,最高记录为+fenshu+); public void check() isDead(); if(she!=null) if(growth=0) reform(); /得到食物 else upgrowth(); /生成食物 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.random()*29)*10+50;
32、this.repaint(); /重绘 void isDead() /判断游戏是否结束的方法 if(z=4) x=x+10; else if(z=3) x=x-10; else if(z=2) y=y+10; else if(z=1) y=y-10; if(x390|y390) she=null; for(i=1;ilength;i+) if(mi=x&ni=y) she=null; public void upgrowth() /当蛇吃到东西时的方法 if(length50) length+; growth-; time=time-10; reform(); life+=100; if(fe
33、nshu0;i-) mi=mi-1; ni=ni-1; if(z=4) m0=m0+10; if(z=3) m0=m0-10; if(z=2) n0=n0+10; if(z=1) n0=n0-10; public void keyPressed(KeyEvent e) if(she!=null) if(e.getKeyCode()=KeyEvent.VK_UP) if(z!=2) z=1; check(); else if(e.getKeyCode()=KeyEvent.VK_DOWN) if(z!=1) z=2; check(); else if(e.getKeyCode()=KeyEven
34、t.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(Graphics g) g.setColor(Color.DARK_GRAY); /设置背景 g.fillRect(0,50,400,400); g.setColor(Color.white); 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.white); g.drawString(当前 分数+this.life,6,60); g.drawString(当前已吃食物数+this.foods,6,72); 第 19 页 共 25 页