如何更新表示地图/级别的字符串;试图写一个推箱子游戏

时间:2014-05-21 06:29:41

标签: java 2d

所以我在尝试设计/思考如何做到这一点时遇到了各种麻烦。为了更好地展示这个想法,我有这样的事情:

private String level =
      "#########\n"
    + "#     ..#\n"
    + "#       #\n"
    + "#       #\n"
    + "#   $ $ #\n"
    + "#       #\n"
    + "#  @    #\n"
    + "#########\n";

我希望,例如,移动@ up。

我希望尽可能保持简单,因为我似乎无法做到这一点,我想到了几个想法:

  1. 如果我知道字符串的维度,我可以将其视为矩阵或向量,并简单地进行数学运算(我可以添加一个4x4矩阵,只需将原始位置(2,2)添加6为1行以下)< / LI>
  2. 我可以让每一行都成为一个字符串,这样就可以更容易地上下移动
  3. 我认为这是完全无效的,但我可以制作一个单独的for循环,每次都打印所有内容,所以每次发生任何变化时,所有内容都会“构建”。
  4. 问题是我只是看不到如何更新字符串。我可以想到操作知道应该移动什么以及在哪里,但我要么缺少一个概念或知识,要么是错误的方法因为我想不出一种翻译概念的方法:现在删除这个字符位置,并将此字符写在另一个位置。

    最糟糕的部分是我发现2(我认为)非常好的代码示例,但仍无法看到他们更新图像的位置:

    http://zetcode.com/tutorials/javagamestutorial/sokoban/

    my 2D game, Sokoban, is working, but I want to know if I improve the design

1 个答案:

答案 0 :(得分:1)

考虑构建一个名为Level的类,它在内部可能(由您决定)将该级别表示为枚举的二维数组,让我们调用枚举Tile

然后枚举可能如下:

public enum Tile {
    WALL('#'),
    EMPTY(' '),
    FEATURE1('.'),
    FEATURE2('$'),
    FEATURE3('@');

    private final char symbol;

    private Tile(final char symbol) {
        this.symbol = symbol;
    }

    public char getSymbol() {
        return symbol;
    }
}

现在,您可以向Level添加方法,将方法作为字符串返回(循环遍历2-d数组并调用getSymbol()和每个Tile,或直接添加方法打印出来。

要回答你的问题,现在你可以轻松添加一个移动某个单元格或切换单元格的方法等。

答案不是操纵字符串,答案是在OOP中思考。