有人可以帮助我解决2D阵列网格的播放器移动问题吗?我能够打印出网格并显示出来。我也可以在网格上打印出播放器。我只是很难将播放器移动到下一个位置。我尝试查看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();
}
}
答案 0 :(得分:1)
我猜测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
您需要解释一下您期望看到的内容,否则没有人可以提供帮助。
答案 1 :(得分:0)
// 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;
}
}
}
}