簡單的貪吃蛇遊戲

public class Snakylines {

 int[][] wall;//定義遊戲底板
 int width;//底板寬度
 int height;//底板長度
 int[][] snake;//蛇身點的集合
 int length;//蛇身長度

//定義底板的長跟寬,初始化每個點爲0

 public void defineWall(int width,int height){
  this.width = width;
  this.height = height;
  wall = new int[height][width];
  for(int i=0;i<height;i++){
   for(int j=0;j<width;j++)
    wall[i][j] = 0;
  }
 }
 

//定義蛇身長度的橫座標跟縱座標
 public void defineSnakeLength(int co_X,int co_Y,int length){
  this.length = length;
  snake = new int[length][2];
  for(int i=0;i<length;i++){
   snake[i][0] = co_X;    //蛇身點橫座標
   snake[i][1] = co_Y + i;//蛇身點縱座標
   wall[co_X][i+co_Y] = 1;//將蛇身添加到牆內
  }
 }
 

//顯示遊戲失敗的原因
 public void showResult(){
  for(int i=0;i<this.height;i++){
   for(int j=0;j<this.width;j++)
    System.out.print(" "+wall[i][j]);
   System.out.println();
  }
 }
 

//主方法
 public static void main(String[] args) {
  Snakylines sl = new Snakylines();
  sl.defineWall(20, 20);
  sl.defineSnakeLength(5,6,10);
  String key = "";
  boolean flag = false;
  while(true){
   System.out.println("Please inter the command:");
   key = new Scanner(System.in).nextLine();
   String[] keyitem = key.split("");//接受輸入的命令
   if(keyitem!=null){
    for(int i=1;i<keyitem.length;i++){
     key = keyitem[i];
     if(key.equals("W")){//上移
      if(sl.upMove())
       break;
     }else if(key.equals("S")){//右移
      if(sl.downMove())
       break;
     }else if(key.equals("A")){//左移
      if(sl.leftMove())
       break;
     }else if(key.equals("D")){//下移
      if(sl.rightMove())
       break;
     }else if(key.equals("Q")){//退出
      flag = true;
      break;
     }else if(key.equals("V")){//查看
      sl.showResult();
     }else{
      System.out.println("The commond of "+key+" is error!");
     }
    }
   }
   if(flag) break;
  }
 }
 
 public boolean upMove(){
  boolean flag = false;
  if(wall[snake[0][0]-1][snake[0][1]]==1){//蛇碰到自身,遊戲結束
   showResult();
   System.out.println("game over!");
   flag = true;
  }else{
   snakePointMove();//蛇身點的集合往後移動,去掉末尾點的值
   wall[snake[0][0]-1][snake[0][1]] = 1;
   snake[0][0] -= 1;//將蛇身第一個點的橫座標賦予新值
   if(snake[0][0] == 0){//如果蛇頭撞牆,遊戲結束
    showResult();
    System.out.println("game over!");
    flag = true;
   }
  }
  return flag;
 }
 
 public boolean downMove(){
  boolean flag = false;
  if(wall[snake[0][0]+1][snake[0][1]]==1){
   showResult();
   System.out.println("game over!");
   flag = true;
  }else{
   snakePointMove();
   wall[snake[0][0]+1][snake[0][1]] = 1;
   snake[0][0] += 1;
   if(snake[0][0] == this.height-1){
    showResult();
    System.out.println("game over!");
    flag = true;
   }
  }
  return flag;
 }
 
 public boolean leftMove(){
  boolean flag = false;
  if(wall[snake[0][0]][snake[0][1]-1]==1){
   showResult();
   System.out.println("game over!");
   flag = true;
  }else{
   snakePointMove();
   wall[snake[0][0]][snake[0][1]-1] = 1;
   snake[0][1] -= 1;
   if(snake[0][1]== 0){
    showResult();
    System.out.println("game over!");
    flag = true;
   }
  }
  return flag;
 }
 
 public boolean rightMove(){
  boolean flag = false;
  if(wall[snake[0][0]][snake[0][1]+1]==1){
   showResult();
   System.out.println("game over!");
   flag = true;
  }else{
   snakePointMove();
   wall[snake[0][0]][snake[0][1]+1] = 1;
   snake[0][1] += 1;
   if(snake[0][1] == this.width-1){
    showResult();
    System.out.println("game over!");
    flag = true;
   }
  }
  return flag;
 }
 
 public void snakePointMove(){
  wall[snake[this.length-1][0]][snake[this.length-1][1]] = 0;
  for(int i=this.length-1;i>0;i--){
   snake[i][0] = snake[i-1][0];
   snake[i][1] = snake[i-1][1];
  }
 }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章