Движение игрока в массиве - PullRequest
       14

Движение игрока в массиве

0 голосов
/ 20 сентября 2019

Я новичок, поэтому, пожалуйста, прости меня.Я пытаюсь сделать текстовую игру.У меня проблемы с перемещением плеера по массиву.0 = пустые места p = игрок

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

[0,0, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 0, p, 0, 0]

Я хочурезультат будет, когда я наберу 1, игрок движется вверх

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 0, p, 0, 0]

[0, 0, 0, 0]

но я думаю, что мой код отображает его как

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 0, p, 0, 0]

[0, 0, p, 0, 0]

public static void main (аргументы String []) {

    //starting player position
    int px = 4;
    int py = 2;
    String player = "P";

    String map[][] = new String[5][5];

    for(int i = 0; i < map.length; i++) 
        for (int j = 0; j < map.length; j++) {

            map[px][py] = player;

            System.out.println(map[i][j]);

            int move;
            Scanner scanner = new Scanner(System.in);
            move = scanner.nextInt();

            //up
            if(move == 1) {
                map[px][py + 1] = player;
                printMap(map);
            }

            //right
            if(move == 2) {
                map[px + 1][py] = player;
                printMap(map);
            }

            //left
            if(move == 3) {
                map[px - 1][py] = player;
                printMap(map);
            }

             //down
            if(move == 4) {
                map[px][py - 1] = player;
                printMap(map);
            }

        }

}


public static void printMap(String a[][]) {

    for ( int i = 0; i < a.length; i++)
        for( int j = 0; j < a[i].length; j++) {

            System.out.println( a[i][j]);

        }

1 Ответ

2 голосов
/ 20 сентября 2019

Для вашего вопроса вам просто нужно обнулить, например:

//up
if(move == 1) { 
  map[px][py + 1] = "0";
  map[px][py + 1] = player;
  printMap(map);
}

Но есть несколько проблем с вашим кодом:

  1. Если вы хотите переместить up тогда вы должны вычесть одно из индекса строки, то же самое для других направлений (см. Мой код ниже).
  2. Когда вы объявляете массив String, его содержимое будет нулевым, вы должны его инициализироватьс нулями (строковые нули).
  3. Посмотрите, как я печатал 2D-массив, в каждой строке я использовал print вместо println.
  4. Также необходимо обновить px /Индексы py, указанные @Nexevis

    , см. этот пример кода:

import java.util.Scanner;

public class Example{
    public static void main(String[] args) {
        //starting player position
        int px = 4;
        int py = 2;
        String player = "P";

        String map[][] = new String[5][5];
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[0].length; j++) {
                map[i][j]="0";
            }
        }

        for(int i = 0; i < map.length; i++) 
            for (int j = 0; j < map.length; j++) {

                map[px][py] = player;

                //System.out.println(map[i][j]);
                System.out.println("1-move up \n2-move right \n3-move left\n4-move- down");
                int move;
                Scanner scanner = new Scanner(System.in);
                move = scanner.nextInt();

                //up
                if(move == 1) {
                    map[px][py] = "0";
                    map[--px][py] = player;
                    printMap(map);
                }

                //right
                if(move == 2) {
                    map[px][py] = "0";
                    map[px][++py] = player;
                    printMap(map);
                }

                //left
                if(move == 3) {
                    map[px][py] = "0";
                    map[px ][--py] = player;
                    printMap(map);
                }

                //down
                if(move == 4) {
                    map[px][py] = "0";
                    map[++px][py] = player;
                    printMap(map);
                }


            }

    }
    public static void printMap(String[][] a) {
        for ( int i = 0; i < a.length; i++) 
        {
            for( int j = 0; j < a[1].length; j++) 
                System.out.print( a[i][j]+" ");         
          System.out.println();
        }
   }
}


Обратите внимание, что необходимо добавить проверку для индексов массива для предотвращения исключения IndexOutOfBound Exception

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...