嗨我已经制作了我的代码,但我遇到的唯一问题是当有墙或出界时不要移动。我理解这样做的难点是编码类似
if (CHARACTER == line [2][0] && (dir.equalsIgnoreCase("l")) {}
。
("l"
被遗弃)这样当玩家想要离开时,它不会在那个特定的位置移动,因为有一堵墙,但是我必须在所有情况下这样做,它看起来很漂亮乏味。有关如何做到这一点的任何帮助?谢谢。
如果有帮助的话,这是它的一部分:
private final static char CHARACTER = 'X';
private final static char BLANK = '.';
private final static char GOAL = 'O';
private final static char WALL = 'W';
private final static int SIZE = 4;
public static void main(String[] args) {
char[][] line = new char[SIZE][SIZE];
for(int i = 0; i < line.length; i++)
{
for(int j = 0; j < line[i].length; j++)
{
line[i][j] = BLANK;
}
}
line[2][0] = CHARACTER;
line[0][0] = GOAL;
line[1][0] = WALL;
line[1][1] = WALL;
line[1][3] = WALL;
line[2][1] = WALL;
line[2][3] = WALL;
int xPos = 2;
int yPos = 0;
}
答案 0 :(得分:2)
您可以使用索引来检查您是否超出范围或是否有墙。我建议这样的事情(注意:这只适用于Java 7或更高版本)
// I assume your board is always square because of new char[SIZE][SIZE]
private static boolean isOutOfBounds(int coord) {
return coord < 0 || coord >= SIZE;
}
/**
* Checks, if the given coordinate is inside bounds and is not a wall.
*/
private static boolean isValid(int x, int y) {
return !isOutOfBounds(x) &&
!isOutOfBounds(y) &&
line[x][y] != WALL;
}
// I assume you have directions "u", "r", "d", "l"
public static boolean canGoDirection(String direction, int currX, int currY) {
switch(direction) {
case "u": return isValid(currX, currY - 1);
case "r": return isValid(currX + 1, currY);
case "d": return isValid(currX, currY + 1);
case "l": return isValid(currX - 1, currY);
default: throw new IllegalArgumentException(direction + " is not a valid direction.");
}
}
现在,您可以将canGoDirection()
与当前坐标和所需方向一起使用。如果它返回true
,您可以按照这种方式更新新职位。
答案 1 :(得分:0)
我从你的问题中理解,如果下一个位置是墙,你的玩家不应该移动。假设玩家的起始位置不是墙。
我认为你必须有一些方法来跟踪球员的当前位置。在游戏的主循环中保持这两个索引更新。检查下一个位置的数组值(如果它是墙壁,而不是不移动)(不要更新索引)。如果没有,则移动并更新用户当前位置的索引。