亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

源代碼--Java寫小游戲,吞食蛇

2019-11-18 12:03:17
字體:
來源:轉載
供稿:網友

  java新手,簡單的吞食蛇游戲,一邊寫一邊查書,寫了半天才弄出來
  
  沒法把jar文件附在文章后面,想試試的人自己編譯一下吧
  
  有意見盡管提,高手多多指導,不過罵人就算了
  
  ///////////////////////////
  // 文件1
  //////////////////////////
  
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  import java.util.*;
  
  public class GreedSnake implements KeyListener{
  JFrame mainFrame;
  Canvas paintCanvas;
  JLabel labelScore;
  SnakeModel snakeModel = null;
  
  public static final int canvasWidth = 200;
  public static final int canvasHeight = 300;
  
  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);
  begin();
  }
  
  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;
  begin();
  }
  }
  
  public void keyReleased(KeyEvent e){
  }
  
  public void keyTyped(KeyEvent e){
  }
  
  
  void repaint(){
  Graphics g = paintCanvas.getGraphics();
  
  //draw background
  g.setColor(Color.WHITE);
  g.fillRect(0,0,canvasWidth,canvasHeight);
  
  // draw the snake
  g.setColor(Color.BLACK);
  LinkedList na = snakeModel.nodeArray;
  Iterator it = na.iterator();
  while(it.hasNext()){
  Node n = (Node)it.next();
  drawNode(g,n);
  }
  
  // draw the food
  g.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(){
  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();
  }
  }
  
  ///////////////////////////////////////////////////
  // 文件2
  ///////////////////////////////////////////////////
  
  import java.util.*;
  import javax.swing.*;
  
  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
  matrix = new boolean[maxX][];
  for(int i=0; i<maxX; ++i){
  matrix[i] = new boolean[maxY];
  Arrays.fill(matrix[i],false);
  }
  
  // initial the snake
  int initArrayLength = maxX > 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));
  matrix[x][y] = true;
  }
  
  food = createFood();
  matrix[food.x][food.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:
  x++;
  break;
  }
  
  if ((0 <= x && x < maxX) && (0 <= y && y < maxY)){
  if (matrix[x][y]){
  if(x == food.x && y == food.y){
  nodeArray.addFirst(food);
  
  int scoreGet = (10000 - 200 * countMove) / timeInterval;
  score += scoreGet > 0? scoreGet : 10;
  countMove = 0;
  
  food = createFood();
  matrix[food.x][food.y] = true;
  return true;
  }
  else
  return false;
  }
  else{
  nodeArray.addFirst(new Node(x,y));
  matrix[x][y] = true;
  n = (Node)nodeArray.removeLast();
  matrix[n.x][n.y] = false;
  countMove++;
  return true;
  }
  }
  return false;
  }
  
  public void run(){
  running = true;
  while (running){
  try{
  Thread.sleep(timeInterval);
  }
  catch(Exception e){
  break;
  }
  
  if(!paused){
  if (moveOn()){
  gs.repaint();
  }
  else{
  JOptionPane.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(matrix[x][y]);
  
  return new Node(x,y);
  }
  
  public void speedUp()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲欧美视频| 国产欧美一区二区三区在线| 日韩免费观看视频| 午夜精品久久久久久久久久久久久| 精品夜色国产国偷在线| 日本欧美国产在线| 欧美做受高潮1| 91久久久久久国产精品| 国产精品7m视频| 亚洲一区二区三区在线视频| 欧美丰满少妇xxxxx做受| 欧美高清视频免费观看| 午夜欧美大片免费观看| 欧美制服第一页| 欧美黑人xxxx| 亚洲精品videossex少妇| 日韩的一区二区| 全色精品综合影院| 国内精品久久久久久久| 亚洲精品www久久久| 久久久久久久久久久免费| 精品国产老师黑色丝袜高跟鞋| 午夜精品美女自拍福到在线| 少妇激情综合网| 国产精品久久中文| 国产精品羞羞答答| 91av在线播放视频| 91精品久久久久久久久不口人| 91人成网站www| 久久久久久久久国产精品| 亚洲精品一区久久久久久| 欧美理论片在线观看| 91性高湖久久久久久久久_久久99| 欧美怡红院视频一区二区三区| 亚洲缚视频在线观看| 最近2019年日本中文免费字幕| 国产日韩精品在线观看| 国产精品国语对白| 亚洲国产精品va在线| 91在线|亚洲| 国产精品影院在线观看| 精品国产老师黑色丝袜高跟鞋| 国产精品劲爆视频| 91av在线播放| 欧美最猛性xxxxx免费| 国产精品人成电影| 欧美福利视频网站| 国产日产久久高清欧美一区| 中文字幕亚洲情99在线| 日韩一区二区福利| 91免费人成网站在线观看18| 成人午夜在线视频一区| 亚洲国产欧美一区二区三区同亚洲| 欧美性极品少妇精品网站| 欧美日韩在线观看视频小说| 91精品在线影院| 欧美福利视频在线| 中文字幕欧美精品日韩中文字幕| 17婷婷久久www| www.欧美精品| 亚洲电影免费在线观看| 欧美激情亚洲视频| 国产成人精品电影久久久| 亚洲高清一二三区| 日韩亚洲精品视频| 国产精品91久久久| 国产视频福利一区| 久久久久久免费精品| 欧美一级大片视频| 久久精品中文字幕| 91tv亚洲精品香蕉国产一区7ujn| 国产精品久久久久久一区二区| 欧美激情中文字幕在线| 伊人亚洲福利一区二区三区| 91精品国产成人| 在线日韩中文字幕| 国产精品日韩在线一区| 97在线精品国自产拍中文| 精品一区二区电影| 91av成人在线| 欧美成人一区二区三区电影| 亚洲第一精品久久忘忧草社区| 国产精品麻豆va在线播放| 国产精品美女主播在线观看纯欲| 国产精品久久久久9999| 日韩欧美在线观看视频| 色视频www在线播放国产成人| 日韩精品一区二区视频| 久久视频免费观看| 国产美女久久精品香蕉69| 日韩精品极品毛片系列视频| 91精品国产乱码久久久久久久久| 久久这里有精品视频| 国产综合久久久久久| 国产一区欧美二区三区| 日韩免费高清在线观看| 国产精品视频专区| 精品国产一区二区三区久久狼黑人| 亚洲午夜小视频| 97香蕉久久夜色精品国产| 亚洲精品国产精品乱码不99按摩| 亚洲欧美日韩精品久久奇米色影视| 欧美成人精品一区| 欧美一区二区视频97| 78色国产精品| 91免费看片在线| 日韩av手机在线| 国产精品自产拍高潮在线观看| 成人免费在线视频网站| 亚洲精品女av网站| 国产精品自拍偷拍视频| 精品国产美女在线| 中文字幕日韩av综合精品| 欧美日韩成人黄色| 97在线免费观看| 在线视频国产日韩| 欧美成人精品在线| 久久久噜噜噜久噜久久| 久久大大胆人体| 久久中文字幕视频| 欧美在线播放视频| 欧美性生交大片免费| 日韩亚洲精品视频| 欧美性感美女h网站在线观看免费| 久久成人一区二区| 中文字幕亚洲一区在线观看| 欧美激情一区二区三区高清视频| 日韩中文在线观看| 91精品中国老女人| 最新亚洲国产精品| 国产精品久久久久久亚洲调教| 国内精品久久久久伊人av| 亚洲精品免费av| 久久久国产精品亚洲一区| 亚洲毛片在线免费观看| 青青在线视频一区二区三区| 亚洲欧洲一区二区三区在线观看| 国产精品免费一区二区三区都可以| 97成人在线视频| 中文字幕欧美视频在线| 亚洲美女在线看| 欧美日韩国内自拍| 亚洲影院高清在线| 亚洲区bt下载| 中文字幕亚洲欧美日韩高清| 成人黄色av免费在线观看| 亚洲自拍高清视频网站| 国产在线观看精品| 国产精品久久久久久亚洲调教| 国产免费一区视频观看免费| 91精品在线观看视频| 亚洲国产天堂久久综合| 久久精品电影网站| 欧美极品少妇与黑人| 欧美精品久久久久久久| 成人免费网站在线看| 91免费看片网站| 欧美激情精品久久久久久大尺度| 国产99久久精品一区二区永久免费| 久久久国产精品x99av| 精品免费在线视频| 91社区国产高清| 成人免费观看网址| 中文字幕亚洲图片|