Двумерное Движение Игрока Сетки Массива Java

Если вы используете webmin, то это шаги, как установить значение PATH:

System
  -> Scheduled Cron Jobs
       -> Create a new environment variable
            -> For user: <Select the user name>
            -> Variable name: PATH
            -> Value: /usr/bin:/bin:<your personal path>
            -> Add environment variable: Before all Cron jobs for user
1
задан MastersProgression 15 January 2019 в 17:01
поделиться

2 ответа

// 2d массив с движением игрока в случайной стартовой позиции

  import java.util.Scanner;
  import java.util.Random;
  public class Components 
  {
  public Components() 
  {     
    Graph();
  }

int Row,Col,Num1,Num2;
char Move;
boolean Running = true;
Scanner input = new Scanner(System.in);

void TwoArray(int gph [][])
{
    for(int i=0;i<Row;i++)
    {
    for(int x=0;x<Col;x++)
    {
    System.out.print(gph[i][x] + "\t");
    }
    System.out.println();
    }
}

void Graph() 
{
    Random random = new Random();
    System.out.println("Please Enter The Number Of Row:");
    Row = input.nextInt();
    System.out.println("Please Enter The Number Of Columns:");
    Col = input.nextInt();
    Num1 = random.nextInt(Row) + 1;
    Num2 = random.nextInt(Col) + 1;
    int Array[][] = new int [Row][Col];
    for(int i=0;i<Row;i++)
    {
    for(int x=0;x<Col;x++)
    {
    Array[i][x] = 0;
    }
    }
    Array[Num1][Num2] = 1;
    int p1 = Num1;
    int p2 = Num2;
    TwoArray(Array);
    while(Running)
    {
    Move = input.next().charAt(0);
    switch(Move)
    {
    case 'w':
    case 'W':
    Array[p1][p2] = 0;
    Array[p1-=1][p2] = 1;
    TwoArray(Array);
    break;
    case 's':
    case 'S':
    Array[p1][p2] = 0;
    Array[p1+=1][p2] = 1;
    System.out.flush();
    TwoArray(Array);
    break;
    case 'd':
    case 'D':
    Array[p1][p2] = 0;
    Array[p1][p2+=1] = 1;
    System.out.flush();
    TwoArray(Array);
    break;
    case 'a':
    case 'A':
    Array[p1][p2] = 0;
    Array[p1][p2-=1] = 1;
    System.out.flush();
    TwoArray(Array);
    break;
    case 'l':
    case 'L':
    Running = false;
    input.close();
    break;
    default:
    System.out.println("Please Press Proper Keys!");
    break;
    }
    }
    }
   }
0
ответ дан MastersProgression 15 January 2019 в 17:01
поделиться

Я предполагаю, что должна появиться клавиша W для перемещения вверх по строке. Когда вы печатаете свои строки с нуля, верхняя строка равна нулю, поэтому вы хотите уменьшить значение p1, а не увеличивать его для случая W, и аналогичным образом увеличивать, а не уменьшать для случая S.

Вы не говорите точно, что ожидаете, когда игрок перемещается, поэтому я предполагаю здесь. Ваш код будет распечатывать сетку только при ее создании. В этой точке начальная позиция всегда будет сверху слева (p1 = 0. P2 = 0). Если вы напечатаете сетку после каждого хода, вы увидите, как она меняется.

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

public Components()
{       
    Graph();
}

    void Graph() {
        int Row, Col, Num1, Num2;
        int p1 = 0;
        int p2 = 0;
        char Move;
        boolean Running = true;
        Scanner input = new Scanner(System.in);
        // Random random = new Random();
        System.out.println("Please Enter The Number Of Row:");
        Row = input.nextInt();
        System.out.println("Please Enter The Number Of Columns:");
        Col = input.nextInt();
        int Array[][] = new int[Row][Col];
        // Num1 = random.nextInt(Row) + 1;
        // Num2 = random.nextInt(Col) + 1;
    // Don't need to do this : int[] will initialise to 0    
    //    for(int i=0;i<Row;i++)
    //    {
    //    for(int x=0;x<Col;x++)
    //    {
    //    Array[i][x] = 0;
    //    }
    //    }
        Array[p1][p2] = 1;
        print(Array);
        while (Running) {
            Move = input.next().charAt(0);
            switch (Move) {
            case 'w':
            case 'W':
                Array[p1][p2] = 0;
                Array[--p1][p2] = 1;
                print(Array);
                break;
            case 's':
            case 'S':
                Array[p1][p2] = 0;
                Array[++p1][p2] = 1;
                print(Array);
                break;
            case 'd':
            case 'D':
                Array[p1][p2] = 0;
                Array[p1][++p2] = 1;
                print(Array);
                break;
            case 'a':
            case 'A':
                Array[p1][p2] = 0;
                Array[p1][--p2] = 1;
                print(Array);
                break;
            case 'l':
            case 'L':
                Running = false;
                input.close();
                break;
            default:
                System.out.println("Please Press Proper Keys!");
                break;
            }
        }
    }

    private void print(int[][] grid) {
        for (int i = 0; i < grid.length; i++) {
            for (int x = 0; x < grid[0].length; x++) {
                System.out.print(grid[i][x] + "\t");
            }
            System.out.println();
        }
    }

}

Запустите приложение и используйте 3 для строк и 4 для столбцов, вы увидите:

1   0   0   0   
0   0   0   0   
0   0   0   0

Если вы затем введете d, вы увидите:

0   1   0   0   
0   0   0   0   
0   0   0   0

Затем введите s и увидите:

0   0   0   0   
0   1   0   0   
0   0   0   0

Вам нужно объяснить, что вы ожидаете увидеть, иначе никто не сможет помочь. [ 1115]

0
ответ дан pcoates 15 January 2019 в 17:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: