• 300.50 KB
  • 2022-04-22 13:33:18 发布

贪吃蛇小游戏开发毕业论文.doc

  • 32页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'贪吃蛇小游戏开发毕业论文目录摘要.....................................................................I1.引言.....................................................................21.1开发工具.....................................................................21.2应用环境.....................................................................22.系统需求分析.....................................................................32.1需求分析.....................................................................32.2可行性分析..................................................................33.系统概要设计.....................................................................43.1设计目标.....................................................................43.2系统功能模块................................................................44.系统详细设计......................................................................64.1程序设计.....................................................................64.2程序源代码..................................................................104.3各功能界面截图.............................................................235.系统测试..........................................................................295.1测试的意义..................................................................295.2测试过程....................................................................295.3测试结果....................................................................30参考文献...........................................................................31致谢...............................................................................3231 1.引言1.1开发工具SunMicrosystems公司在推出Java语言的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK:Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就不能用。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(JavaVirtualMachine)运行效率要比SunJDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。但不管怎么说,我们还是需要先把SunJDK掌握好。1.2应用环境(1).操作系统:Solaris、WindowsNT、Windows95等(2).应用软件:jdk1.531 2.系统需求分析2.1需求分析本系统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求:(1)利用方向键来改变蛇的运行方向。(2)空格键暂停或继续游戏,并在随机的地方产生食物。(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。2.2可行性分析贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。本次设计我将主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。31 3.系统概要设计3.1设计目标本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。3.2系统功能模块本游戏系统共包括1个java源文件和7个类文件。1.类之间的关系如图1所示。SnakeGameSnakeFrameSnakeRunnableStatusRunnableSnakePanelNodeSnake图1类之间的关系31 2.java源文件及其功能如表所示。表1java源文件及其功能序号文件名主要功能1SnakeGame该文件为程序入口,含有main方法。2SnakeFrame实现菜单控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏暂停或继续,还有分数等。3Snake该文件实现蛇的结构和具体运动,如判断食物是否和怎样被吃掉及判断后的动作。4Node该文件实现组成蛇身的单位-食物。5SnakePanel该文件实现画板功能,用红蓝间隔画蛇身。6StatusRunnable该文件为记录状态的线程。7SnakeRunnable该文件为蛇运动以及记录分数的线程。31 4.系统详细设计4.1程序设计1.主类SnakeGame(1)主类为此程序的入口,定义了SnakeFrame的对象frame,开始运行此程序。(2)源代码见文件SnakeGame.Java2.类SnakeFrame(1)成员变量见表2表2主要成员变量成员变量描述变量类型名称状态标签PrivateJLabelstatusLabel分数标签PrivateJLabelscoreLabel蛇面板privateJPanelsnakePanel速度标签privateJLabelspeedLabel蛇类对象privateSnakesnake菜单条privateJMenuBarbar游戏菜单JMenugameMenu帮助菜单JMenuhelpMenu速度菜单JMenuspeedMenu新菜单项JMenuItemnewItem暂停菜单项JMenuItempauseItem关于菜单项JMenuItemaboutItem慢菜单项JMenuItemslowItem中间菜单项JMenuItemmidItem快菜单项JMenuItemfastItem开始菜单项JMenuItembeginItem帮助菜单项JMenuItemhelpItem31 (2)方法见表3表3主要方法方法名功能SnakePanel()创建蛇的面板addKeyListener监视器setBounds()设置尺寸JLabel()设置标签JMenu()创建菜单JMenuItem构造菜单项3.类Snake(1)成员变量见表4表4主要成员变量成员变量描述变量类型名称是否运动BooleanisRun蛇体ArrayListBody食物NodeFood方向IntDerection分数IntScore状态IntStatus速度Intspeed慢publicstaticfinalintSLOW中publicstaticfinalMID31 int快publicstaticfinalintFAST运动中publicstaticfinalintRUNNING已暂停publicstaticfinalintPAUSED游戏结束publicstaticfinalintGAMEOVER左publicstaticfinalintLEFT上publicstaticfinalintUP右publicsta icfinalintRIGHT下publicstaticfinalintDOWN(2)方法见表5表5主要方法方法名功能isEaten()判断食物是否被蛇吃掉,如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉isCollsion()判断是否碰撞makeFood()在随机的地方产生食物changeDerection(intnewDer)改变运行方向31 move()蛇在运行中所采取的措施4.类Node(1)成员变量见表6表6主要成员变量成员变量描述变量类型名称食物块宽publicstaticfinalintW食物块高publicstaticfinalintH横坐标intX纵坐标intY(2)源代码见文件SnakeGame.java5.类SnakePanel此类为画蛇的面板类,是实现红蓝间隔画蛇身算法的类。源代码见文件源代码见文件SnakeGame.java6.类StatusRunnable此类为线程的子类,实现记录状态的功能。源代码见文件SnakeGame.java7.类SnakeRunnable此类为线程的子类,实现蛇运动以及记录分数的功能。31 4.2程序源代码importjava.awt.Color;importjava.awt.Component;importjava.awt.Graphics;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.util.ArrayList;importjavax.swing.BorderFactory;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JPanel;publicclassSnakeGame{publicstaticvoidmain(String[]args){SnakeFrameframe=newSnakeFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}//----------记录状态的线程classStatusRunnableimplementsRunnable{publicStatusRunnable(Snakesnake,JLabelstatusLabel,JLabelscoreLabel){this.statusLabel=statusLabel;this.scoreLabel=scoreLabel;this.snake=snake;31 }publicvoidrun(){Stringsta="";Stringspe="";while(true){switch(snake.status){caseSnake.RUNNING:sta="Running";break;caseSnake.PAUSED:sta="Paused";break;caseSnake.GAMEOVER:sta="GameOver";break;}statusLabel.setText(sta);scoreLabel.setText(""+snake.score);try{Thread.sleep(100);}catch(Exceptione){}}}privateJLabelscoreLabel;privateJLabelstatusLabel;privateSnakesnake;}//----------蛇运动以及记录分数的线程classSnakeRunnableimplementsRunnable{publicSnakeRunnable(Snakesnake,Componentcomponent){this.snake=snake;31 this.component=component;}publicvoidrun(){while(true){try{snake.move();component.repaint();Thread.sleep(snake.speed);}catch(Exceptione){}}}privateSnakesnake;privateComponentcomponent;}classSnake{booleanisRun;//---------是否运动中ArrayListbody;//-----蛇体Nodefood;//--------食物intderection;//--------方向intscore;intstatus;intspeed;publicstaticfinalintSLOW=500;publicstaticfinalintMID=300;publicstaticfinalintFAST=100;publicstaticfinalintRUNNING=1;publicstaticfinalintPAUSED=2;publicstaticfinalintGAMEOVER=3;publicstaticfinalintLEFT=1;publicstaticfinalintUP=2;publicstaticfinalintRIGHT=3;publicstaticfinalintDOWN=4;31 publicSnake(){speed=Snake.SLOW;score=0;isRun=false;status=Snake.PAUSED;derection=Snake.RIGHT;body=newArrayList();body.add(newNode(60,20));body.add(newNode(40,20));body.add(newNode(20,20));makeFood();}//------------判断食物是否被蛇吃掉//-------如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉privatebooleanisEaten(){Nodehead=body.get(0);if(derection==Snake.RIGHT&&(head.x+Node.W)==food.x&&head.y==food.y)returntrue;if(derection==Snake.LEFT&&(head.x-Node.W)==food.x&&head.y==food.y)returntrue;if(derection==Snake.UP&&head.x==food.x&&(head.y-Node.H)==food.y)returntrue;if(derection==Snake.DOWN&&head.x==food.x&&(head.y+Node.H)==food.y)returntrue;elsereturnfalse;}31 //----------是否碰撞privatebooleanisCollsion(){Nodenode=body.get(0);//------------碰壁if(derection==Snake.RIGHT&&node.x==280)returntrue;if(derection==Snake.UP&&node.y==0)returntrue;if(derection==Snake.LEFT&&node.x==0)returntrue;if(derection==Snake.DOWN&&node.y==380)returntrue;//--------------蛇头碰到蛇身Nodetemp=null;inti=0;for(i=3;i