




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书 NO.1贪吃蛇程序设计1.程序设计的目的Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了对所学的课程进行加深理解,熟练的掌握JAVA的语法与语句,对其进行应用。通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼我们熟练的应用面向对象的思想和设计方法解决实际问题的能力。使我们通过进行课程设计,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。通过课程设计来对JAVA语言有更深的了解,以及应用。2.设计方案论证2.1系统模块图如图1所示图1系统模块图 沈 阳 大 学课程设计说明书 NO.22.2主要部分流程图如图2所示:图2主要流程图 沈 阳 大 学课程设计说明书 NO.32.3设计思路及具体实现方法2.3.1产生一个窗口(1)定义一个框架,确定大小。其大小使600,400;(2)定义一个贪吃蛇的类,确定其大小比例;(3)在窗口上方定义一个Score得分; (4) 在窗口的下方定义各按钮的位置。2.3.2使贪吃蛇运动起来 通过函数的调用,使贪吃蛇运动起来,用按键来调节贪吃蛇的运动方向,运动的速度。2.3.3定义各功能键的作用(1) PageUp使贪吃蛇加速,减速。并确定其按键位置;(2) PageDown使贪吃蛇减速。并确定其按键位置;(2) ENTER ,R ,S 重新开始游戏,界面回到开始界面;(3) SPACE ,P暂停游戏。2.3.4使贪吃蛇听指挥 (1)加键盘监听器类;(2)添加键盘监听器;(3)定义其按键上,下,左,右;(4)针对不同的键改变贪吃蛇的位置,与重画线程结合产生不同方向运动。通过上下左右来调节。2.3.5进行贪吃蛇类的确定(1)定义背景的颜色为白色;(2)定义贪吃蛇的颜色为黑色;(3)定义食物的颜色为红色。2.3.6食物出现的位置 通过随机函数调用,实现食物的出现,当贪吃蛇吃完一各食物,随即再生成一个食物。2.3.7贪吃蛇身增加一节运用for函数实现,当贪吃蛇每吃到食物,贪吃蛇蛇身就增加一节,然后在框架中又重新出现新的食物。2.3.8得分增加当贪吃蛇每吃到一块食物,贪吃蛇蛇身就增加一节,分数就有次序的增加。在框架的上方有显示。2.3.9贪吃蛇死亡(1)当贪吃蛇撞到框架或自身的时候,则贪吃蛇死亡。然后弹处一个对话框,显示you failed。(2)如果想继续游戏,点击“确定”,再按ENTER ,R ,S 重新开始游戏,界面回到开始界面。2.3.10游戏结束 显示you failed,你取消对话框即退出了贪吃蛇游戏。 沈 阳 大 学课程设计说明书 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 final 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();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(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.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: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 KeyEvent.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.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 = 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, nodeHeight-1); public void updateScore()String s = Score: + snakeModel.score;labelScore.setText(s); void begin() 沈 阳 大 学课程设计说明书 NO.7 if (snakeModel = null | !snakeModel.running) snakeModel = new SnakeModel(this,canvasWidth/nodeWidth,canvasHeight/nodeHeight); (new Thread(snakeModel).start(); public static void main(String args) GreedSnake gs = new GreedSnake(); class SnakeModel implements Runnable GreedSnake 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; int score = 0; int countMove = 0; / UP and DOWN should be even / RIGHT and LEFT should be odd public 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;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 changeDirection(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 = 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 (running) 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; do Random r = new Random(); 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(int i=0; inodeArray.size(); +i)Node n = (Node)nodeArray.get(i);result += + n.x + , + n.y + ;return result; class Node int 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.设计心得体会 这次课程设计历时二个星期多左右,通过这两个星期的学习,发现了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年销售岗位面试攻略及经典预测题解析
- 2025年初中化学特岗教师招聘考试高频考点梳理
- 2025年计算机等级考试四级网络工程师模拟题及答案解析
- 电力基础知识培训资料课件
- 2025年财务管理师考试模拟题及解析
- 2025年人工智能面试模拟题详解及答案
- 2025年市场推广专员招聘笔试模拟题及参考答案集萃
- 2025年国际商务谈判策略与沟通技巧题库
- 2025年煤气工程岗位面试技巧大揭秘模拟题集与答案
- 2025年银行柜员岗位招聘考试模拟卷及答案解析
- 普惠金融业务讲座
- 虚拟健康咨询接受度分析-洞察及研究
- 多发性周围神经病护理查房
- 2025年高警示药品管理试题(附答案)
- 2025年低压电工证考试题及参考答案
- 省政府顾问管理办法
- 消防法制业务培训课件
- 医院药剂科运用PDCA循环降低拆零药品管理不合格率品管圈
- 2025年华住储备干部考试题库
- 安徽省蚌埠市2024-2025学年七年级下学期期末考试英语试卷(含答案无听力原文及音频)
- 高速公路收费员安全教育培训
评论
0/150
提交评论