贪吃蛇Java程序代码.doc_第1页
贪吃蛇Java程序代码.doc_第2页
贪吃蛇Java程序代码.doc_第3页
贪吃蛇Java程序代码.doc_第4页
贪吃蛇Java程序代码.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/文件一package greedysnake_cx;public class Node int x=0; int y=0; int nodewidth; int nodeheight; Node(int x,int y) this.x=x; this.y=y; /文件二package greedysnake_cx;/* * 实现一个greedysnake的模型,具有功能: * 1)移动,moveOn()从director参数中获取方向信息,如果方向定义的下一个点的逻辑值是true,检查是不是food,是则将food添加到 * 列表的头部,snake继续移动,不是则停止移动(撞到蛇尾巴了) * 2)加速,speedUp()将现成的停滞时间间隔interval按照一定的比率 speedRate进行扩大 * 3)减速,speedDown(). * * 该类实现Runnable接口, * */定义snake的模型import java.util.*;import javax.swing.*;public class SnakeModel implements Runnable private GreedSnake gs; /给每一个矩阵点确立一个boolean值 boolean matrix; private int maxX; private int maxY; /设置一个节点的列表; LinkedList nodeArray = new LinkedList(); Node food=null; int direction=UP; int score=0; /定义方向 public final static int LEFT=1; public final static int UP=2; public final static int RIGHT=3; public final static int DOWN=4; private int interval=200; /停顿时间的间隔 boolean pause=false; /定义暂停 private double speedRate=0.5; /定义速度的变更幅度 /constructor public SnakeModel(GreedSnake gs,int maxx,int maxy) this.gs=gs; this.maxX=maxx; this.maxY=maxy; /this.matrix=null; / /init matrix; matrix=new booleanmaxX; /*不初始化是不行滴 for(int i=0;imaxX;i+) matrixi=new booleanmaxY;/将矩阵的每一行定义成列的集合 Arrays.fill(matrixi, false);/使用java.util.Arrays的static方法fill,将matrix数组里面的元素全部定义成false /至此,矩阵里面所有的点的boolean值都是flase /for(int j=0;jmaxY;j+) /matrixij=false; / / /init nodeArray int initlength=10; for(int i=0;i= 0 & x = 0 & y maxY) if(matrixxy)/当蛇头转至一个bool值为true的点时 if(x=food.x&y=food.y)/该点是食物 nodeArray.addFirst(food); /吃掉补上 food=createFood(); matrixfood.xfood.y=true; score+=10; return true; else /该点不是食物,(蛇尾巴) return false; else nodeArray.addFirst(new Node(x,y); matrixxy=true; Node nn=(Node)nodeArray.removeLast();/移除并且返回列表中的最后一个元素 matrixnn.xnn.y=false; return true; return false; /end moveOn public void run() boolean running=true; while(running) try Thread.sleep(interval); catch(InterruptedException e) e.printStackTrace(); if(!pause) if(moveOn() gs.repaint(); else JOptionPane.showMessageDialog(null, sorry myboy,GAME OVER!, message, JOptionPane.INFORMATION_MESSAGE); running=false; /*boolean running=true; while(running) try Thread.sleep(interval); catch (InterruptedException e) e.printStackTrace(); if(!pause) if(moveOn() gs.repaint(); else JOptionPane.showMessageDialog(null,i am sorry ,you failed!,message,JOptionPane.INFORMATION_MESSAGE); break; /end while running=false;/当且仅当失败退出的时候; */ /获取当前游戏得分 public int getScore() return this.score; /加速 public void speedUp() interval*=speedRate; /减速 public void speedDown() interval/=speedRate; /设置暂停 public void chagePause() pause=!pause; /设置方向 public void chageDirection(int newdirection) if(direction % 2 != newdirection % 2) direction=newdirection; /生成食物 private Node createFood() /* * 创建一个随机数的生成器,这个是java.util.Random类 * 与java.lang.Math类中的random()方法有不一样的地方,彼方法返回一个01之间的随机数 * */ Random random=new Random(); int foodx=random.nextInt(maxX); int foody=random.nextInt(maxY); Node food=new Node(foodx,foody); return food; /文件三package greedysnake_cx;/* * 在repaint()方法中,绘画上下文对象是从canvas对象使用getContentPane()获取的! * */import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class GreedSnake implements KeyListener Canvas canvas; private JLabel jlabel; private JPanel jpanel; private JFrame jframe; SnakeModel snakemodel; private final static int canvaswidth=400; private final static int canvasheight=300; private final static int nodewidth=10; private final static int nodeheight=10; /construction GreedSnake() jframe=new JFrame(The Greed Sanke!); jframe.setLayout(new BorderLayout(); Container cp=jframe.getContentPane(); /在jframe面板中添加各种组件 jlabel=new JLabel(welcome); jlabel.setText(Welcome my friend! Enjoy your self!); cp.add(jlabel,BorderLayout.NORTH); canvas=new Canvas(); canvas.setSize(canvaswidth,canvasheight); canvas.addKeyListener(this); /给空白面板添加键盘时间监听器! cp.add(canvas,BorderLayout.CENTER); jpanel=new JPanel(); jpanel.setLayout(new BorderLayout(); JLabel label=new JLabel(Pass enter or r or s to start,JLabel.CENTER); jpanel.add(label,BorderLayout.NORTH); JLabel label2=new JLabel(Pass space to pause this game!,JLabel.CENTER); jpanel.add(label2,BorderLayout.CENTER); JLabel label3=new JLabel(Pass pageUp or pageDown to up or down the speed of the snake!,JLabel.CENTER); jpanel.add(label3,BorderLayout.SOUTH); cp.add(jpanel,BorderLayout.SOUTH); /给顶层容器设置时间监听、可视化、关闭按钮的设定 jframe.addKeyListener(this); jframe.pack(); jframe.setVisible(true); jframe.setResizable(false); jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); begin(); /end construction public void begin() /开启一个SnakeModel的进程,并且开始改进程 snakemodel=new SnakeModel(this,canvaswidth/nodewidth,canvasheight/nodeheight); (new Thread(snakemodel).start(); void repaint() int score=snakemodel.getScore(); jlabel.setText(您的得分是:+score); Graphics g=canvas.getGraphics();/pay attention! g.setColor(Color.white); g.fillRect(0, 0, canvaswidth, canvasheight); g.setColor(Color.blue); LinkedList list=snakemodel.nodeArray; for(int i=0;ilist.size();i+) Node nn=(Node)list.get(i); paintingNode(g,nn); /绘制food g.setColor(Color.green); Node foodnode=new Node(snakemodel.food.x,snakemodel.food.y); paintingNode(g,foodnode); public void paintingNode(Graphics gg,Node n) /* * 使用Graphics 的fillRect方法,填充一个矩形, * 矩形的起点需要乘以一个NODE的长宽,以避免重叠 * */ gg.fillRect(n.x*nodewidth, n.y*nodeheight,nodewidth-1,nodeheight-1); public void keyPressed(KeyEvent e) /按下某一个键时,调用此方法 int keycode=e.getKeyCode(); /* if(keycode=KeyEvent.VK_ENTER|keycode=KeyEvent.VK_R) begin(); */ switch(keycode) case KeyEvent.VK_LEFT: snakemodel.chageDirection(SnakeModel.LEFT); break; case KeyEvent.VK_UP: snakemodel.chageDirection(SnakeMod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论