首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

小弟我这有一段java实现贪吃蛇的代码 希望可以改进!

2012-05-21 
我这有一段java实现贪吃蛇的代码希望可以改进!!!急~~color#FF0000]代码实现的功能不变添加一个选择界面在

我这有一段java实现贪吃蛇的代码 希望可以改进!!!急~~
color=#FF0000]代码实现的功能不变 添加一个选择界面 在游戏运行之前 选择内容就是游戏等级 只有选择完之后 才能进入游戏界面 游戏界面里面的等级功能 可以去掉 也可以不去掉 [/color]import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class SnakeGame{
 public static void main(String[] args){
  SnakeFrame frame = new SnakeFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);
 }
}
//----------记录状态的线程
class StatusRunnable implements Runnable{
  public StatusRunnable(Snake snake,JLabel statusLabel,JLabel scoreLabel){
  this.statusLabel = statusLabel;
  this.scoreLabel = scoreLabel;
  this.snake = snake;
 }
 public void run(){
  String sta = "";
  String spe = "";
  while(true){
   
  switch(snake.status){
  case Snake.RUNNING:
  sta = "Running";break;
  case Snake.PAUSED:
  sta = "Paused";break;
  case Snake.GAMEOVER:
  sta = "GameOver";break;
  }
  statusLabel.setText(sta);
  scoreLabel.setText(""+snake.score);
  try{
  Thread.sleep(100);
  }
  catch(Exception e){
  }
  } 
 }
 private JLabel scoreLabel;
 private JLabel statusLabel;
 private Snake snake; 
}
//----------蛇运动以及记录分数的线程
class SnakeRunnable implements Runnable{
 public SnakeRunnable(Snake snake,Component component){
  this.snake = snake;
  this.component = component;
 }
 public void run(){
  while(true){
  try{
  snake.move();
  component.repaint();
  Thread.sleep(snake.speed);
  }
  catch(Exception e){
  }
  } 
 }
 private Snake snake;
 private Component component;
}
class Snake{
 boolean isRun;//---------是否运动中
 ArrayList<Node> body;//-----蛇体
 Node food;//--------食物
 int derection;//--------方向
 int score ;
 int status;
 int speed;
 public static final int SLOW = 500;
 public static final int MID = 300;
 public static final int FAST = 100;
 public static final int RUNNING = 1;
 public static final int PAUSED = 2;
 public static final int GAMEOVER = 3;
 public static final int LEFT = 1;
 public static final int UP = 2;
 public static final int RIGHT = 3;
 public static final int DOWN = 4;
 public Snake(){
  speed = Snake.LOW;
  score = 0;
  isRun = false;
  status = Snake.RUNNING;
  derection = Snake.RIGHT;
  body = new ArrayList<Node>();
  body.add(new Node(60,20));
  body.add(new Node(40,20));
  body.add(new Node(20,20));  
  makeFood();
 }
//------------判断食物是否被蛇吃掉
//-------如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉
 private boolean isEaten(){
  Node head = body.get(0);
  if(derection == Snake.RIGHT && (head.x+Node.W) == food.x&&head.y == food.y )
  return true;
  if(derection == Snake.LEFT && (head.x-Node.W) == food.x&&head.y == food.y )
  return true;
  if(derection == Snake.UP && head.x == food.x&&(head.y-Node.H) == food.y )
  return true;
  if(derection == Snake.DOWN && head.x == food.x&&(head.y+Node.H) == food.y )
  return true;
  else return false;


 }
 //----------是否碰撞
 private boolean isCollsion(){
  Node node = body.get(0);
//------------碰壁
  if(derection == Snake.RIGHT && node.x == 280)
  return true;
  if(derection == Snake.UP && node.y == 0)
  return true;
  if(derection == Snake.LEFT && node.x == 0)
  return true;
  if(derection == Snake.DOWN && node.y == 380)
  return true;
//--------------蛇头碰到蛇身
  Node temp = null;
  int i = 0;
  for(i = 3;i<body.size();i++)
  {
  temp = body.get(i);
  if(temp.x == node.x && temp.y==node.y)
  break;
  }
  if(i < body.size())
  return true;
  else return false;
 }


[解决办法]
贪吃蛇算法,主要是砍掉尾巴,放到头部,*^o^*
代码太长,可重构的应该不少

热点排行