有人可以帮我解决我的二维数组网格的玩家移动问题吗?我可以很好地打印出网格并显示它。我还可以在网格上打印出玩家。我只是很难将球员移动到下一个位置。我尝试查看 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();
}
}
最佳答案
我猜测 W
键应该会向上移动一行。当您从零开始打印行时,顶行为零,因此您希望在 W
的情况下递减 p1 而不是递增它,同样,在 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
您需要解释您期望看到的内容,否则没有人能够提供帮助。
关于java - 二维数组网格玩家运动Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54203575/