1、贪吃蛇java课程设计贪吃蛇程序设计课程设计说明书 NO.1贪吃蛇程序设计1.程序设计的目的Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了对所学的课程进行加深理解,熟练的掌握JAVA的语法与语句,对其进行应用。通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念与其面向对象的特性,锻炼我们熟练的应用面向对象
2、的思想和设计方法解决实际问题的能力。使我们通过进行课程设计,把所学课程与相关知识加以融会贯通,全面掌握Java语言的编程思想与面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。通过课程设计来对JAVA语言有更深的了解,以与应用。2.设计方案论证2.1系统模块图如图1所示图1系统模块图沈 阳 大 学课程设计说明书 NO.22.2主要部分流程图如图2所示:图2主要流程图沈 阳 大 学课程设计说明书 NO.32.3设计思路与具体实现方法2.3.1产生一个窗口(1)定义一个框架,确定大小。其大小使600,400;(2)定义一个贪吃蛇的类,确定其大小比例;(3)在窗口上方定义一个Score得分;
3、(4) 在窗口的下方定义各按钮的位置。使贪吃蛇运动起来 通过函数的调用,使贪吃蛇运动起来,用按键来调节贪吃蛇的运动方向,运动的速度。定义各功能键的作用(1) PageUp使贪吃蛇加速,减速。并确定其按键位置;(2) PageDown使贪吃蛇减速。并确定其按键位置;(2) ENTER ,R ,S 重新开始游戏,界面回到开始界面;(3) SPACE ,P暂停游戏。使贪吃蛇听指挥(1)加键盘监听器类;(2)添加键盘监听器;(3)定义其按键上,下,左,右;(4)针对不同的键改变贪吃蛇的位置,与重画线程结合产生不同方向运动。通过上下左右来调节。进行贪吃蛇类的确定(1)定义背景的颜色为白色;(2)定义贪吃
4、蛇的颜色为黑色;(3)定义食物的颜色为红色。食物出现的位置 通过随机函数调用,实现食物的出现,当贪吃蛇吃完一各食物,随即再生成一个食物。贪吃蛇身增加一节运用for函数实现,当贪吃蛇每吃到食物,贪吃蛇蛇身就增加一节,然后在框架中又重新出现新的食物。得分增加当贪吃蛇每吃到一块食物,贪吃蛇蛇身就增加一节,分数就有次序的增加。在框架的上方有显示。贪吃蛇死亡(1)当贪吃蛇撞到框架或自身的时候,则贪吃蛇死亡。然后弹处一个对话框,显示you failed。(2)如果想继续游戏,点击“确定”,再按ENTER ,R ,S 重新开始游戏,界面回到开始界面。游戏结束显示you failed,你取消对话框即退出了贪吃
5、蛇游戏。沈 阳 大 学课程设计说明书 NO.42.4设计的源代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;public class GreedSnake implements KeyListenerJFrame mainFrame;Canvas paintCanvas;JLabel labelScore;SnakeModel snakeModel = null;public static final int canvasWidth = 600;public static f
6、inal int canvasHeight = 400;public static final int nodeWidth = 10;public static final int nodeHeight = 10;public GreedSnake() mainFrame = new JFrame(GreedSnake);Container cp = mainFrame.getContentPane();labelScore = new JLabel(Score:);cp.add(labelScore, BorderLayout.NORTH);paintCanvas = new Canvas(
7、);paintCanvas.setSize(canvasWidth+1,canvasHeight+1);paintCanvas.addKeyListener(this);cp.add(paintCanvas, BorderLayout.CENTER);JPanel panelButtom = new JPanel();panelButtom.setLayout(new BorderLayout();JLabel labelHelp;labelHelp = new JLabel(PageUp, PageDown for speed;, JLabel.CENTER);panelButtom.add
8、(labelHelp, BorderLayout.NORTH);labelHelp = new JLabel(ENTER or R or S for start;, JLabel.CENTER);panelButtom.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
9、.addKeyListener(this);mainFrame.pack();mainFrame.setResizable(false);mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainFrame.setVisible(true);沈 阳 大 学课程设计说明书 NO.5begin();public void keyPressed(KeyEvent e)int keyCode = e.getKeyCode();if (snakeModel.running)switch(keyCode)case KeyEvent.VK_UP
10、:snakeModel.changeDirection(SnakeModel.UP);break;case KeyEvent.VK_DOWN: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_ADD:case KeyEven
11、t.VK_PAGE_UP:snakeModel.speedUp();break;case KeyEvent.VK_SUBTRACT:case KeyEvent.VK_PAGE_DOWN:snakeModel.speedDown();break;case KeyEvent.VK_SPACE:case KeyEvent.VK_P:snakeModel.changePauseState();break;default:if (keyCode = KeyEvent.VK_R |keyCode = KeyEvent.VK_S |keyCode = KeyEvent.VK_ENTER)snakeModel
12、.running = false;沈 阳 大 学课程设计说明书 NO.6begin();public void keyReleased(KeyEvent e)public void keyTyped(KeyEvent e)void repaint()Graphics g = paintCanvas.getGraphics();/draw backgroundg.setColor(Color.WHITE);g.fillRect(0,0,canvasWidth,canvasHeight);/ draw the snakeg.setColor(Color.BLACK);LinkedList na =
13、 snakeModel.nodeArray;Iterator it = na.iterator();while(it.hasNext()Node n = (Node)it.next();drawNode(g,n);/ draw the foodg.setColor(Color.RED);Node n = snakeModel.food;drawNode(g,n);updateScore();private void drawNode(Graphics g, Node n)g.fillRect(n.x*nodeWidth, n.y*nodeHeight, nodeWidth-1, nodeHei
14、ght-1);public void updateScore()String s = Score: + snakeModel.score;labelScore.setText(s);void begin()沈 阳 大 学课程设计说明书 NO.7if (snakeModel = null | !snakeModel.running)snakeModel = new SnakeModel(this,canvasWidth/nodeWidth,canvasHeight/nodeHeight);(new Thread(snakeModel).start();public static void mai
15、n(String args)GreedSnake gs = new GreedSnake();class SnakeModel implements RunnableGreedSnake gs;boolean matrix;LinkedList nodeArray = new LinkedList();Node food;int maxX;int maxY;int direction = 2;boolean running = false;int timeInterval = 200;double speedChangeRate = 0.75;boolean paused = false;in
16、t score = 0;int countMove = 0;/ UP and DOWN should be even/ RIGHT and LEFT should be oddpublic static final int UP = 2;public static final int DOWN = 4;public static final int LEFT = 1;public static final int RIGHT = 3;public SnakeModel(GreedSnake gs, int maxX, int maxY)this.gs = gs;this.maxX = maxX
17、;this.maxY = maxY;/ initial matirx沈 阳 大 学课程设计说明书 NO.8matrix = new booleanmaxX;for(int i=0; i 20 ? 10 : maxX/2;for(int i = 0; i initArrayLength; +i)int x = maxX/2+i;int y = maxY/2;nodeArray.addLast(new Node(x, y);matrixxy = true;food = createFood();matrixfood.xfood.y = true;public void changeDirectio
18、n(int newDirection)if (direction % 2 != newDirection % 2)direction = newDirection;public boolean moveOn()Node n = (Node)nodeArray.getFirst();int x = n.x;int y = n.y;switch(direction)case UP:y-;break;case DOWN:y+;break;case LEFT:x-;break;case RIGHT:沈 阳 大 学课程设计说明书 NO.9x+;break;if (0 = x & x maxX) & (0
19、 = y & y 0? scoreGet : 10;countMove = 0;food = createFood();matrixfood.xfood.y = true;return true;elsereturn false;elsenodeArray.addFirst(new Node(x,y);matrixxy = true;n = (Node)nodeArray.removeLast();matrixn.xn.y = false;countMove+;return true;return false;public void run()running = true;while (run
20、ning)tryThread.sleep(timeInterval);沈 阳 大 学课程设计说明书 NO.10catch(Exception e)break;if(!paused)if (moveOn()gs.repaint();elseJOptionPane.showMessageDialog(null,you failed,Game Over,JOptionPane.INFORMATION_MESSAGE);break;running = false;private Node createFood()int x = 0;int y = 0;doRandom r = new Random()
21、;x = r.nextInt(maxX);y = r.nextInt(maxY);while(matrixxy);return new Node(x,y);public void speedUp()timeInterval *= speedChangeRate;public void speedDown()timeInterval /= speedChangeRate;public void changePauseState()沈 阳 大 学课程设计说明书 NO.11paused = !paused;public String toString()String result = ;for(in
22、t i=0; inodeArray.size(); +i)Node n = (Node)nodeArray.get(i);result += + n.x + , + n.y + ;return result;class Nodeint x;int y;Node(int x, int y)this.x = x;this.y = y;3设计结果与分析 本设计是在JCreator +JDK平台上开发、调试运行的,运行的结果截图如下几个图所示。图3程序运行起始界面沈 阳 大 学课程设计说明书 NO.12图3游戏开始界面图4游戏进行中界面图4游戏进行中界面沈 阳 大 学课程设计说明书 NO.134.设计
23、心得体会这次课程设计历时二个星期多左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。通过对Java的程序设计,感觉到自己在知识的理解上有很大的不足,对知识的掌握程度还是不那么的深入。在这个课程设计中,融入了太多的汗水,就因为付出了很多,才感觉到这个课程设计所给我带来的深刻意义。在知识的海洋里,我们应该勇于发现问题,积极的去探索问题,不应该遇到比较棘手的问题就对自己放松,对自己就降低了要求。这个课程设计就是我自己的辛辛苦苦的劳动成果,所以当我顺利的完成了这个课程设计的时候,我的心情使无比的激动。重拾教材与实验手册
24、,对知识系统而全面进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟诸多平时学习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的灵感。在此过程中,有太多的艰辛,有太多的坎坷。正是有了老师的耐心辅导,还有同学们的辛苦帮助,我才能这么顺利的完成这个课程设计。所以我要谢谢他们每个人。我想说:为完成这次课程设计我们确实很辛苦,但苦中仍有乐,和同学这十几天的一起完成课程设计的日子,让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的实习,我感觉我和同学们之间的距离更加近了。5参考文献1陈德志、冯智圣. Java程序设计习题解析M. : 冶金工业,2004.7:101-1882 李向明,姜遇姬. Java程序设计教程M. : 人民邮电大学, 2004.6:2042603 刘其红. Java程序设计实例教程M. : 冶金, 2004.7:51-1274 朱喜福. Java程序设计M. : 清华大学, 2005.3:120150沈 阳 大 学
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1