2016-09-19 4 views
-3

Наше задание - создать простую игру «pac-man», которая просто ест мусор внутри прямоугольника. Мусор является «*». Моего кода до сих пор:Справка по Java - Создание «подметальной машины»

public class Sweeper 
{  
    public static void main(String[] args) throws InterruptedException 
    { 
     //************************************************************ 
     // Variable set up 
     int sy = 10, sx= 10; // Box size 
     int x= 5, y= 5; // Start point 
     int maxmc = 8; // Max distance moving 
     char [] [] env = new char[sy][sx]; 
     int right = sx - 2, top = sy - 2, left = sx - (right + 1) , bottom = sy - (top + 1); 
     //************************************************************ 

     //************************************************************ 
     // Filling the grid with Stars 
     for(int i=0; i<sy;i++) 
     { 
      for(int j =0; j < sx; j++) 
      { 
       env[i][j] = '*'; 
      } 
     } 
     //************************************************************ 

     int mc = 0, direction = 0, count = (right * top); 
     // The actual game 
     while(count != 0) 
     { 
      direction = (int)(Math.random() * 3); 
      // Display 
      //System.out.println("\n\n\n\n\n"); 
      for(int i = 0; i < sy; i++) 
      { 
       for(int j= 0; j< sx; j++) 
       { 
        System.out.print(env[i][j]); 

       } 

       System.out.println(); 
      } 

      System.out.println("\n\n\n"); 

      Thread.sleep(700); 

      System.out.println(direction); 

      if((x <= right && x >= left && y <= top && y >= bottom)) 
      { 
       if(env[x][y] == ' ') 
       { 
        // RIGHT 
        if(direction == 0) 
        { 
         env[y][x] = '@'; 
         x--; 
         env[y][x+2] = ' '; 
        } 
        // left 
        else if(direction == 1) 
        { 
         env[y][x] = '@'; 
         x++; 
         env[y][x-2] = ' '; 
        } 
        // TOP 
        else if(direction ==2) 
        { 
         env[y][x] = '@'; 
         y--; 
         env[y+2][x] = ' '; 
        } 
        // bottom 
        else if(direction ==3) 
        { 
         env[y][x] = '@'; 
         y++; 
         env[y-2][x] = ' '; 
        } 
       } 
       else 
       { 
        if(direction == 0) 
        { 
         env[y][x] = '@'; 
         x--; 
         env[y][x+2] = ' '; 
        } 
        // left 
        else if(direction == 1) 
        { 
         env[y][x] = '@'; 
         x++; 
         env[y][x-2] = ' '; 
        } 
        // TOP 
        else if(direction ==2) 
        { 
         env[y][x] = '@'; 
         y--; 
         env[y+2][x] = ' '; 
        } 
        // bottom 
        else if(direction ==3) 
        { 
         env[y][x] = '@'; 
         y++; 
         env[y-2][x] = ' '; 
        } 
        // Keeps track of the trash 
        count--; 
       } 
      } 

     } 

    } 

} 

Моей проблема: Он копирует «@» и перестает двигаться иногда. Im пытается заставить его двигаться aorund, пока все символы 8x8 звезды не исчезнут.

+3

Вы пробовали выполнить код в своем отладчике IDE? Это место для начала. –

+2

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

ответ

0

Просто для очистки кода: ваш алгоритм перемещения дублируется (4 if/else). Вы должны поставить только count-- в заявлении if(! env[x][y] == ' ').

Для вашей проблемы: Ваш плохо приезда вашего состояния границ, вы

env[y][x] = '@'; 
x--; 
env[y][x+2] = ' '; 

Но если x=1, то после кода это 0, а потому, что у вас есть

 if((x <= right && x >= left && y <= top && y >= bottom)) 

С x=0 и right=0 , то он никогда не вводит утверждение, count не может измениться, и он бесконечно петляет.

Смежные вопросы