在阵列上移动播放器

时间:2015-04-24 17:27:46

标签: java arrays

我有一个地图类,它是一个包含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]中的“*”?感谢您的耐心等待!

3 个答案:

答案 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";
        }
    }
}