2015-08-06 2 views
0

Я пытаюсь переместить объект, хранящийся в массиве, в разные координаты при вводе пользователем. например, если пользователь вводит 2,3, объект X появляется на консоли в этих координатах, но когда он хочет переместить один и тот же объект X в 5,3. Как я могу перебирать массив, чтобы добиться этого. Это мой код для перемещения корабля:Перемещение объекта

public void moveShip2(ArrayList<Ships> player2) 
{ 
    for(int i = 0; i<row; i++) 
    {    
     for(int j = 0; j<col; j++) 
      { 
      ships=board[i][j]; 

       if(ships==null) 
       { 
        System.out.print("-" +i); 
        System.out.print("\t"); 
       } 
       else 
       { 
       System.out.print(ships.getID()); 
       System.out.print("\t"); 

       } 

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

Это мой код для добавления корабля:

System.out.println("\nPlease Enter x position for your Battleship:"); 
     System.in.read(byt); 
     str = new String(byt); 
     row = Integer.parseInt(str.trim()); 
System.out.println("\nPlease Enter y position for your Battleship:"); 
     System.in.read(byt); 
     str = new String(byt); 
     col = Integer.parseInt(str.trim()); 

     Ships B1 = new Ships(); 
     B1.setID("B1"); 
     B1.setType("Battleship"); 
     B1.setX(row); 
     B1.setY(col); 
     player1.add(B1); 
     board.addShip(row, col, B3); 
     board.moveShip2(player2); 
+0

mmmmmmmm Я не понимаю, что вы подразумеваете под «перемещением объекта» – Victor

+0

@Victor Перемещение элемента в массиве из одного места в другое. Например, если объект M находится в координатах 2 и 3, пользователь решает переместить один и тот же объект M в координаты 6 и 7. Не знаю, достаточно ли это было достаточно. –

+0

Да ... вроде .., что вы должны показать, какую структуру данных вы используете для хранения и обработки объектов .. Я думаю, что это напрямую повлияет на то, как выполнять то, что вы ищете .... – Victor

ответ

0

Если я хорошо понял, у вас есть список кораблей .. но эти корабли идентифицируются по его координатам (X, Y).

Итак, когда вы играете, вам нужно будет выполнить порядок перемещения корабля от (xo, y0) до (x1, y1) на карте.

Как вы это архивируете? Это зависит от внутренней структуры данных, которую вы используете для управления кораблями.

Предлагаю использовать любую реализацию Map<2DPoint,Ship>, учитывая координаты, которые вы можете легко найти на корабле, вы можете использовать HashMap (как-то чрезмерно, но это будет работать), или вы можете реализовать свою собственную матрицу, например, Ship[][]. После этого: перемещение корабля из одного места в другое - это простая операция свопа по карте.

Если вы посмотрите на код, я думаю, что экземпляр board должен иметь заданную структуру как внутренний член, как поле частного экземпляра. Позвольте мне дать более наглядное представление:

public class Board { 

    private Map<2DPoint,Ship> ships; 

    public Board() { 
     this.ships = new HashMap<>(); 
    } 
    public addShip (2DPoint where, Ship ship) { 
     this.ships.put(where,ship); 
    } 
    public moveShip (2DPoint from,2DPoint to) { 
     Ship shipToMove = this.ships.get(from); 
     if (shipToMove == null) { 
      throw new IllegalArgumentException("There is no ship at " + from); 
     } 
     this.ships.put(from,null); // empty the previous cell 
     this.ships.put(to,shipToMove); // assign to the new cell the ship. 
    } 

}

Надеется, что это помогает мало.

Я думаю, что у вас вопрос должен быть помечен дизайном, потому что, если вы не ошибаетесь, вы задаете вопрос, как алгоритм, так и структуры данных.

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