我有一个地图类,它是一个包含100个字符串的数组
public class map{
[...]
public void movePlayer(String entrada){
if (entrada.equalsIgnoreCase("w")){
move = -10;
}
else if (entrada.equalsIgnoreCase("s")){
move = 10;
}
else if (entrada.equalsIgnoreCase("d")){
move = 1;
}
else if (entrada.equalsIgnoreCase("a")){
move = -1;
}
for(int i = 0; i < mapa.length; i++){
if (mapa[i].equals("P")){
int moved = i+move;
mapa[moved] = "P";
}
}
}
主要看起来有点像这样
String[] mapa = map.getMap();
mapa[0] = "T";
mapa[99] = "P";
for (int j = 0; j<10; j++){
for(int i = 0; i < map.length; i++){
if (i == 9 || i == 19 || i == 29 || i == 39 || i == 49 || i == 59 || i == 69 || i == 79 || i == 89 || i == 99){
System.out.println(mapa[i]);
}
else{
System.out.print(mapa[i]);
}
}
System.out.print("\n");
System.out.print("Entre o movimento:");
map.movePlayer(read.nextLine());
mapa = map.getMap();
}
它的运行方式如下:打印带有随机字符的地图,有些是普通楼层,有些是陷阱 实施例
T##_______
^__@__*^@_
@#^^#_#___
_*^^^#^^@^
^^_#_^____
^#_^#___##
*@^_^_____
^@##_^__^#
#_@^##^#**
#@^^_#@_#P
Enter movement:w
T##_______
^__@__*^@_
@#^^#_#___
_*^^^#^^@^
^^_#_^____
^#_^#___##
*@^_^_____
^@##_^__^#
#_@^##^#*P
#@^^_#@_#P
Enter movement: w
T##_______
^__@__*^@_
@#^^#_#___
_*^^^#^^@^
^^_#_^____
^#_^#___##
*@^_^_____
^@##_^__^P
#_@^##^#*P
#@^^_#@_#P
如何让程序打印播放器最初使用的前一个字符所在的位置,在这种情况下位置[99]中的空格和位置[89]中的“*”?感谢您的耐心等待!
答案 0 :(得分:4)
不是跟踪地图中的玩家,而是可以保持地图不变,只跟踪玩家的位置。
int playerpos = 99;
for (int j = 0; j<10; j++){
for(int i = 0; i < map.length; i++){
if (playerpos == i)
System.out.print("P");
else
System.out.print(mapa[i]);
if (i %10 == 9){
System.out.println();
}
}
然后,您的movePlayer
方法只会更改playerpos
变量。
答案 1 :(得分:0)
在玩家移动之前,您需要存储来自目标单元格的数据,例如
int moved = i+move;
previousChar = mapa[moved]; // store replaced symbol
mapa[moved] = "P";
所以,在下一步移动中你需要恢复旧位置的原始字符,它可能如下所示:
int moved = i+move;
mapa[i] = previousChar; // restore original symbol at current player's location
previousChar = mapa[moved]; // preserve symbol at new player's location
mapa[moved] = "P"; // move player to new location
不要忘记在第一次移动之前初始化previousChar
答案 2 :(得分:0)
正如Lashane所说,使用变量存储重写字符以供以后分配:
public class map{
[...]
this.init(function() {
last_squarechar = INIT_SQUARECHAR
[...]
});
public void movePlayer(String entrada) {
if (entrada.equalsIgnoreCase("w")){
move = -10;
}
else if (entrada.equalsIgnoreCase("s")){
move = 10;
}
else if (entrada.equalsIgnoreCase("d")){
move = 1;
}
else if (entrada.equalsIgnoreCase("a")){
move = -1;
}
}
for(int i = 0; i < mapa.length; i++){
if (mapa[i].equals("P")){
int moved = i+move;
mapa[i] = last_squarechar
last_squarechar = mapa[moved]
mapa[moved] = "P";
}
}
}