ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:194.21KB ,
资源ID:9560839      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9560839.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java贪吃蛇.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java贪吃蛇.docx

1、java贪吃蛇武汉理工大学华夏学院课程设计报告书课程名称: Java 课程设计 题 目: Java贪吃蛇 系 名: 信息工程系 专业班级: 软件2111 姓 名: 郭和朋 学 号: 10225611102 指导教师: 2013年 01 月 18 日课程设计任务书学生姓名: 郭和朋 专业班级: 软件2111 指导教师: 詹春华 工作单位: 信息系 设计题目: 贪吃蛇游戏的设计与实现初始条件:掌握基本的Java程序设计基础。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)主要任务:1 完成一个贪吃蛇游戏;2 该游戏具备:计分、暂停、加速、减速等功能;设计报告撰写格式

2、要求:1、 写出游戏中用到的主要数据结构的设计;2、 写出游戏界面用到的主要技术;3、 写出贪吃蛇模型类的设计思想;4、 其他程序中用到的主要技术;5、 本次课程设计的感受。时间安排:2013-1-14-2013-1-192013-1-19 系统验收;2013-1-192013-1-22 提交课程设计报告;指 导 教 师 签 字: 2013 年 1 月 14 日系 主 任 签 字: 年 月 日1.设计任务与要求1.1设计任务设计一个贪吃蛇的游戏 功能要求:能够显示贪吃蛇的运动,能通过键盘控制贪吃蛇的运行,能够处理蛇在运行中个各种情况,以及其它的辅助功能;要提供主要的设计思路、数据结构的设计。

3、设计任务要完成设计、编码、测试等过程,给出设计思路、设计说明书、主要代码的 说明、使用说明书。源代码以及可运行的贪吃蛇游戏。1.2具体要求具体内容如下: 设计任务与要求 总体方案与说明 面向对象的设计(主要类的设计) 源程序清单与注释 软件主要模块流程图 问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想); 小结与体会 附录: 源程序(必须有简单注释) 使用说明 参考资料 2.总体方案与说明2.1总体方案我设计的贪吃蛇主要利用键盘控制蛇的前进移动方向,是否吃到食物,是否撞墙以及是否暂停、开始游戏等。当吃到食物的时候,蛇就自动长大一格,在游戏中可进行暂

4、停和开始操作。中途若是撞到墙或是撞到自己,同样也结束。背景和蛇的颜色可随时更换。2.2系统模块根据总体方案,我把贪吃蛇游戏分为:游戏界面设置(即绘图)、贪吃蛇蛇身及运动设置和游戏龙之设置三大模块来设计。 2.2.1游戏界面设置游戏界面设置包括:游戏区设置、游戏帮助信息设置、游戏分数查看区。游戏界面使用简单和直观的布局设计,游戏区放置在界面的主题位置上,在游戏区上部放置分数,在游戏区下部放置使用说明帮助,具体设计效果如图2-1所示。图2.1游戏主题界面设计效果2.2.2贪吃蛇蛇身及运动设置贪吃蛇的蛇身设置是整个游戏设计的关键。它的基本思路是:去掉蛇尾,显示并移动出蛇头外蛇身,根据蛇身的运动方向,

5、决定蛇头的位置,完成蛇头吃食物的处理操作,显示蛇头。图2.2 贪吃蛇撞墙后效果而蛇运动的四个方向,则通过按键来控制。蛇吃到一个食物,就加分。每次食物出现的位置不能在蛇身上,如果蛇在运动的过程中撞到自己或者撞墙,则游戏结束,具体效果如图2.2所示,图2.2就是蛇撞到墙之后,提示游戏结束。2.2.3游戏控制设置 游戏控制设置就是控制游戏的暂停与开始。设置PageUp(加速), PageDown(减速)按键来控制速度,设置空格或着p按键来暂停进行中的游戏,设置ENTER或着R或者S按键来开始暂停的游戏。3.面向对象的设计贪吃蛇游戏各模块及程序流程有若干类实现,下面阐述各个类的设计与实现。3.1 Gr

6、eedSnake类该类包含六个主要的功能方法,分别是: (1)构造函数public GreedSnake(),主要用来设置用户控制界面。 (2)public void keyPressed()方法,主要用来对游戏的按键操作进行处理。 (3)void repaint()主要用来绘制游戏界面包括蛇和食物。 (4)private void drawNode()主要用来绘制某一结点。 (5)public void updateScore()方法主要用来改变积分器。 (6)void begin()方法用来控制游戏的开始界面。3.2.SnakeModel类该类包含多个功能方法,分别是: (1)构造函数pu

7、blic SnakeModel(),该方法主要用来初始化游戏界。其中matrix用来存储地图上面的信息,如果什么也没有设置为false,如果有食物或蛇,设置为true;nodeArray,一个LinkedList,用来保存蛇的每 一节;food用来保存食物的位置;而Node类是保存每个位置的信息。 (2)public void changeDirection()方法主要用来改变蛇的运动方向,changeDirection(int newDirection) ,用来改变蛇前进的方向,而且只是 保存头部的前进方向,因为其他的前进方向已经用位置来指明了。其中newDirection必须和原来的dir

8、ection不是相反方向,所以相反方向的值用了同样的奇偶性。在测试的时候使用了direction%2!=newDirection%2 进行判断。 (3)public boolean moveOn()方法使实现蛇运动的函数,其中moveOn()用来更新蛇的位置,对于当前方向,把头部位置进行相应改变。如果越界,结束;否则,检测是否遇到食物(加头部)或身体(结束);如果什么都没有,加上头部,去掉尾部。由于用了LinkedList数据结构,省去了相当多的麻烦。 (4)public void run()方法主要用来完成游戏主体运行流程控制功能。 (5)private Node createFood()方

9、法用来生成食物及放置地点。 (6)public void speedUp()和()两个方法对蛇运行的速度进行控制。 (7)public void changePauseState() 方法用来改变游戏的状态,是“暂停”还是“继续”。3.3.Node类 该类只有一个方法Node(),该方法用来定义蛇的结点部分。4.软件主要模块流程图软件的主要模块流程如下图4.1所示。 图4.1 软件主要模块流程图5.源程序清单与注释 5.1 GreedSnake.java package snake;import java.awt.BorderLayout;import java.awt.Canvas;impo

10、rt java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Iterator;import java.util.LinkedList;import javax.swing.*;public class GreedSnake implements KeyListener JFrame mainFrame; Canvas paintCanvas; JLabel

11、 labelScore; SnakeModel snakeModel = new SnakeModel(this, canvasWidth / nodeWidth, canvasHeigth / nodeHeigth); public static final int canvasWidth = 300; public static final int canvasHeigth = 300; public static final int nodeWidth = 10; public static final int nodeHeigth = 10;public GreedSnake() ma

12、inFrame = new JFrame(GreedSnake); Container cp = mainFrame.getContentPane(); labelScore = new JLabel(Score: ); cp.add(labelScore, BorderLayout.NORTH); / paintCanvas = new Canvas(); paintCanvas.setSize(canvasWidth + 1, canvasHeigth + 1); paintCanvas.addKeyListener(this); cp.add(paintCanvas, BorderLay

13、out.CENTER); / JPanel panelButtom = new JPanel(); panelButtom.setLayout(new BorderLayout(); JLabel labelHelp; labelHelp = new JLabel(PageUp,PageDown for speed:, JLabel.CENTER); panelButtom.add(labelHelp, BorderLayout.NORTH); labelHelp = new JLabel(Enter or R or S for start:, JLabel.CENTER); panelBut

14、tom.add(labelHelp, BorderLayout.CENTER); labelHelp = new JLabel(SPACE or P for pause, JLabel.CENTER); panelButtom.add(labelHelp, BorderLayout.SOUTH); cp.add(panelButtom, BorderLayout.SOUTH); mainFrame.addKeyListener(this); mainFrame.pack(); mainFrame.setResizable(false); mainFrame.setDefaultCloseOpe

15、ration(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); begin(); public void keyTyped(KeyEvent e) public void keyPressed(KeyEvent e) int keyCode = e.getKeyCode(); if (snakeModel.running) switch (keyCode) case KeyEvent.VK_UP: snakeModel.changeDirection(snakeModel.UP); break; case KeyEvent.VK_DOWN:

16、snakeModel.changeDirection(snakeModel.DOWN); break; case KeyEvent.VK_LEFT: snakeModel.changeDirection(snakeModel.LEFT); break; case KeyEvent.VK_RIGHT: snakeModel.changeDirection(snakeModel.RIGHT); break; case KeyEvent.VK_PAGE_UP: snakeModel.speedUP(); break; case KeyEvent.VK_PAGE_DOWN: snakeModel.sp

17、eedDOWN(); break; case KeyEvent.VK_P: snakeModel.changePauseState(); break; else if (keyCode = KeyEvent.VK_ENTER | keyCode = KeyEvent.VK_R | keyCode = KeyEvent.VK_S) /snakeModel.running=false; begin(); public void keyReleased(KeyEvent e) void repaint() Graphics g = paintCanvas.getGraphics(); /绘制背景 g

18、.setColor(Color.WHITE); g.fillRect(0, 0, canvasWidth, canvasHeigth); /画蛇 g.setColor(Color.BLACK); LinkedList na = snakeModel.nodeArray; Iterator it = na.iterator(); while (it.hasNext() Node n = (Node) it.next(); drawNode(g, n); getScore(); / g.setColor(Color.RED); Node n = snakeModel.food; drawNode(

19、g, n); void begin() if (!snakeModel.running) snakeModel = new SnakeModel(this, canvasWidth / nodeWidth, canvasHeigth / nodeHeigth); (new Thread(snakeModel).start();/ JOptionPane.showMessageDialog(ip,游戏结束,lost,JOptionPane.INFORMATION_MESSAGE);/ / (new Thread(snakeModel).start(); void drawNode(Graphic

20、s g, Node n) g.fillRect(n.x * nodeWidth, n.y * nodeHeigth, nodeWidth - 1, nodeHeigth - 1); String getScore() String s = Score: + snakeModel.score; labelScore.setText(s); return s; public static void main(String args) GreedSnake gs = new GreedSnake(); 5.2 SnakeModel.javapackage snake;import java.util

21、.*;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JOptionPane;public class SnakeModel implements Runnable private static class JOptionpane private static int INFORMAIION_MESSAGE; public JOptionpane() GreedSnake gs; boolean matrix; /界面数据保存在此数组 LinkedList nodeArray =

22、 new LinkedList(); Node food; int maxX; int maxY; int score = 0; boolean running = false; int timeInterval = 200; int direction = 2; double speedChangeRate = 0.2; boolean paused = false;/游戏状态 public static final int UP = 2; public static final int DOWN = 4; public static final int LEFT = 1; public s

23、tatic final int RIGHT = 3; public SnakeModel(GreedSnake gs, int maxX, int maxY) this.gs = gs; this.maxX = maxX; this.maxY = maxY; matrix = new booleanmaxX; for (int i = 0; i 20 ? 10 : maxX / 2; for (int i = 0; i = 0 & x = 0 & y maxY) if (matrixxy) if (x = food.x & y = food.y) score = score + 1; node

24、Array.addFirst(food); food = createFood(); matrixfood.xfood.y = true; return true; else / score=score+0; return false; else nodeArray.addFirst(new Node(x, y); matrixxy = true; n = (Node) nodeArray.removeLast(); matrixn.xn.y = false; return true; running = false; return false; int getScore() Node n =

25、 (Node) nodeArray.getFirst(); int x = n.x; int y = n.y; if (x = food.x) & (y = food.y) score = score + 1; return score; public void speedUP() timeInterval = (int) (timeInterval * (1 - speedChangeRate); public void speedDOWN() timeInterval = (int) (timeInterval * (1 + speedChangeRate); public void ch

26、angeDirection(int newDirection) if (direction % 2 != newDirection % 2) direction = newDirection; public void changePauseState() paused = !paused; public void run() running = true; while (running) try Thread.sleep(timeInterval); catch (InterruptedException ex) Logger.getLogger(SnakeModel.class.getNam

27、e().log(Level.SEVERE, null, ex); if (!paused) if (moveOn() / gs.repaint(); else running = false; break; JOptionPane.showMessageDialog(null, GAME END, Game End, JOptionpane.INFORMAIION_MESSAGE); 5.3 Node.javapackage snake;public class Node int x; int y; public Node(int x,int y) this.x=x; this.y=y; 参考文献:1 耿祥义、张跃平.Java2实用教程.北京:清华大学出版社.2006 2黄明 梁旭、周绍斌.Java课程设计北京:电子工业出版社.2006 3谢希仁.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1