我开设了一个班级,其中生成了一个6x10 2D阵列以用作电路板。
然后在构造函数中生成一个随机的起始位置。我只希望可以进行相邻的移动。
例如,如果随机位置已生成为(2,3),则例如用户输入(1,2),这将是有效的移动,而(6,1)将是无效的移动。 / p>
然后,如果用户输入说(1,2),则他们可以转到(1,2)中的任何相邻单元格。
我已经包含了下面的类,以及我试图对其进行测试的相邻方法,但是我对如何实现此方法感到有些困惑。
import java.util.Arrays;
import java.util.Random;
public class Test {
public static final int ROWS = 6;
public static final int COLUMNS = 10;
public int[][] board;
public static void main(String[] args)
{
Test t = new Test();
t.getBoard();
t.makeMove(6,1); //I want this to be an invalid move.
t.getBoard();
t.makeMove(1,2); // this should be a valid move
t.getBoard();
}
public Test()
{
board = new int[ROWS][COLUMNS];
createRandomLocation();
}
public void createRandomLocation()
{
Random rand = new Random();
int x = rand.nextInt(6);
int y = rand.nextInt(10);
board[x][y] = 1;
}
public void makeMove(int x,int y){
if (Math.abs(x-cur_x)==0 || Math.abs(y-cur_y)==0) {
board[x][y] = 1;
}
public String getBoard() {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
System.out.print(board[i][j] + " ");
}
System.out.println();
}
System.out.println();
return Arrays.deepToString(board);
}
}
相邻
/*public boolean isMoveAllowed(int [][] array,int x, int y){
boolean adjacent = false;
int trueCount = 0;
if(array[x-1][y-1] == 0) trueCount++; //topleft
if(array[x-1][y] == 0) trueCount++; //top
if(array[x-1][y+1] == 0) trueCount++;//topright
if(array[x][y+1] == 0) trueCount++;//right
if(array[x][y-1] == 0) trueCount++;//left
if(array[x+1][y-1] == 0) trueCount++;//bottomleft
if(array[x+1][y] == 0) trueCount++;//bottom
if(array[x+1][y+1] == 0) trueCount++; //bottomright
if (trueCount == 8)
{
adjacent = true;
}
return adjacent;
}*/
答案 0 :(得分:1)
您的问题描述已经包含了答案。如果a和c之间以及b和d之间的距离为零或一,则您希望从(a,b)到(c,d)的任何移动都是合法的。因此,如果看到xsl:number
,那是非法的举动。因此:将当前位置存储在某些变量中,然后将它们与所需的新位置进行比较:
Math.abs(a-c)>1
由Board类负责跟踪坐标:
public static void main(String[] args)
{
Board b = new Board(6, 10);
try {
b.tryMove(6,1);
} catch(IllegalMoveException e) {
// do whatever you need to do to inform the user that move is illegal
}
}
答案 1 :(得分:0)
测试真实情况比测试当前情况要容易得多,isMoveAllowed方法看起来应该像这样:
public boolean isMoveAllowed(int[][] array, int x, int y) {
return ((array[x + 1][y] == 1) ||
(array[x - 1][y] == 1) ||
(array[x][y + 1] == 1) ||
(array[x][y - 1] == 1));
}
如果移动靠近当前玩家位置,则返回true