【问题标题】:Two Dimensional Array Grid Player Movement Java二维数组网格玩家运动 Java
【发布时间】:2019-06-09 17:50:40
【问题描述】:

有人可以帮我解决我的二维数组网格的玩家移动问题。我可以很好地打印出网格并显示它。我还可以在网格上打印出玩家。我只是很难将玩家移动到下一个位置。我曾尝试查看 C++ 代码以尝试复制它,但进展并不顺利。

import java.util.Scanner;
import java.util.Random;
public class Components 
{
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;
    for(int i=0;i<Row;i++)
    {
    for(int x=0;x<Col;x++)
    {
    Array[i][x] = 0;
    Array[p1][p2] = 1;
    }
    }
    for(int i=0;i<Row;i++)
    {
    for(int x=0;x<Col;x++)
    {
    System.out.print(Array[i][x] + "\t");
    }
    System.out.println();
    }
    while(Running)
    {
    Move = input.next().charAt(0);
    switch(Move)
    {
    case 'w':
    case 'W':
    Array[p1][p2] = 0;
    Array[p1+=1][p2] = 1;
    break;
    case 's':
    case 'S':
    Array[p1][p2] = 0;
    Array[p1-=1][p2] = 1;
    break;
    case 'd':
    case 'D':
    Array[p1][p2] = 0;
    Array[p1][p2+=1] = 1;
    break;
    case 'a':
    case 'A':
    Array[p1][p2] = 0;
    Array[p1][p2-=1] = 1;
    break;
    case 'l':
    case 'L':
    Running = false;
    input.close();
    break;
    default:
    System.out.println("Please Press Proper Keys!");
    break;
    }
    }
    }
    }

  public class Main {

  public static void main(String[] args) {

  new Components();
   }

   }

【问题讨论】:

  • 您能否详细解释一下您遇到的问题或您在此计划中的目标是什么?
  • 我的目标是制作一款可以在玩家(数字)周围移动的游戏。我目前被二维数组网格上的“玩家移动”所困扰。

标签: java eclipse multidimensional-array logic


【解决方案1】:

我猜W 键应该会向上移动一行。当您从零开始打印行时,顶行为零,因此您希望减少 p1 而不是增加它对于 case W,并且类似地增加而不是减少 case S

当玩家移动时,您并没有准确地说出您期望会发生什么,所以我在这里猜测。您的代码只会在创建网格时打印出来。此时初始位置将始终位于左上角(p1=0. p2=0)。如果您在每次移动后打印网格,您会看到它发生了变化。

例如如果您在 Component 类中的代码是:

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

您需要解释您希望看到的内容,否则没有人可以提供帮助。

【讨论】:

  • 我已经添加了您建议它没有改变任何东西的代码先生。除了显示另一种增加方式。仍然没有玩家移动。请填写我在播放器的“运动”方面所缺少的内容。谢谢 pcoates ...
  • @MastersProgression 我已经更新了我的答案——不确定它是否有帮助。你并没有真正说出你期望发生的事情。
  • 您准确地回答了我的问题。我只是错过了将 2darray 的打印放入函数中的部分。我将在上面发布工作代码。 ...
  • @MastersProgression 很高兴它有帮助,如果您打算学习更多 Java,祝您好运。如果您觉得有用,在 StackOverflow 上接受答案是正常的。
【解决方案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;
    }
    }
    }
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多