2016-10-01 3 views
0

Итак, я работаю над играми с головоломкой с 8 головоломками, и у меня возникают проблемы. Так позволяет сказать, что мое нынешнее состояние S является:Как сместить элементы в 2D-массив строк

3 7 B

, где B представляет собой пустое пространство (поэтому я делаю свой 2D массив в типе String). Поэтому я пытаюсь вызвать методы перемещения, которые в конечном итоге перемещают пространство B вверх, вниз, влево или вправо. Я уже записал положение B, поэтому в этом случае это будет [1,2]. Я использую это место B, чтобы увидеть, могу ли я сделать действительное движение вверх (не могу сделать это, если B [0] = 0), действительное движение вниз (не может быть выполнено, если B [0] = 2), действительный ход left (не может сделать это, если B [1] = 0) или действительное перемещение вправо (не может быть выполнено, если B [1] = 2). Итак, теперь, если у меня есть правильный ход, чтобы сказать, как я могу реализовать эту функцию перемещения? Я не знаю, как точно заменить местоположение B в моем S-состоянии тем, что над ним, если все в стиле String.

общественного класс EightPuzzle {

String[][] gameBoard = new String[3][3]; 
String[] bLocation = new String[2]; 
String board; 
String dir; 

/*public void ReadFromTxt(String file) throws FileNotFoundException, IOException { 
    String read; 
    FileReader f = new FileReader(file); 
    int i = 0; 
    int j; 
    BufferedReader b = new BufferedReader(f); 
    System.out.println("Loading puzzle from file..."); 
    while((read = b.readLine())!=null){ 
     if(read.length()==3){ 
      for(j=0;j<3;j++){ 
       board[i][j] = (int)(read.charAt(j)-48); 
      } 
     } 
     i++; 
    } 
    b.close(); 
    System.out.println("Puzzle loaded!"); 
}*/ 

public String[][] setState(String board){ 
    gameBoard[0][0] = board.substring(0,1); 
    gameBoard[0][1] = board.substring(1,2); 
    gameBoard[0][2] = board.substring(2,3); 
    gameBoard[1][0] = board.substring(4,5); 
    gameBoard[1][1] = board.substring(5,6); 
    gameBoard[1][2] = board.substring(6,7); 
    gameBoard[2][0] = board.substring(8,9); 
    gameBoard[2][1] = board.substring(9,10); 
    gameBoard[2][2] = board.substring(10,11); 
    System.out.println(Arrays.deepToString(gameBoard)); 

    return gameBoard; 
} 

public String[][] randomizeState(){ 
    return null; 
} 

public void move(String dir){ 
    if(dir.equalsIgnoreCase("up")){ 
     if(bLocation[0].equals("0")){ 
      //cannot move up 
     } 
     else{ 
      int[] temp; 

     } 
    } 
    if(dir.equalsIgnoreCase("down")){ 
     if(bLocation[0].equals("2")){ 
      //cannot move down 
     } 
     else{ 

     } 

    } 
    if(dir.equalsIgnoreCase("left")){ 
     if(bLocation[1].equals("0")){ 
      //cannot move left 
     } 
     else{ 

     } 

    } 
    if(dir.equalsIgnoreCase("right")){ 
     if(bLocation[1].equals("2")){ 
      //cannot move right 
     } 
     else{ 

     } 
    } 
} 

public void bLocation(String board){ 
    setState(board); 
    for(int i=0; i<gameBoard.length; i++){ 
     for(int j=0; j<gameBoard[i].length; j++){ 
      if(gameBoard[i][j].equals("b")) 
      { 
       bLocation[0] = Integer.toString(i); 
       bLocation[1] = Integer.toString(j); 
      } 
     } 
    } 
} 

public static void main (String[]args){ 
    EightPuzzle b1=new EightPuzzle(); 
    b1.setState("156 37b 284"); 
    b1.bLocation("156 37b 284"); 

} 

}

+0

Вы можете использовать 'char' вместо' String'. – 4castle

+0

Можете ли вы поделиться фрагментом кода, который вы пробовали до сих пор? –

+0

Вы спрашиваете, как менять значения двух переменных? Переключение 'S [0] [2]' с 'S [1] [2]'? – 4castle

ответ

0

Сдвиг вверх будет означать обмен B с плиткой над ним.

Для кода простоты, сделать метод moveB который меняет местами два места:

private void moveB(int deltaRow, int deltaCol) { 
    int newRow = bLocation[0] + deltaRow; 
    int newCol = bLocation[1] + deltaCol; 

    String temp = gameboard[newRow][newCol]; 
    gameBoard[newRow][newCol] = gameBoard[bLocation[0]][bLocation[1]]; 
    gameBoard[bLocation[0]][bLocation[1]] = temp; 

    bLocation[0] = newRow; 
    bLocation[1] = newCol; 
} 

сместить вверх: moveB(-1, 0);

сместить вниз: moveB(1, 0);

Для того, чтобы сдвиг влево: moveB(0, -1);

Смещение вправо: moveB(0, 1);

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