所以我在尝试设计/思考如何做到这一点时遇到了各种麻烦。为了更好地展示这个想法,我有这样的事情:
private String level =
"#########\n"
+ "# ..#\n"
+ "# #\n"
+ "# #\n"
+ "# $ $ #\n"
+ "# #\n"
+ "# @ #\n"
+ "#########\n";
我希望,例如,移动@ up。
我希望尽可能保持简单,因为我似乎无法做到这一点,我想到了几个想法:
问题是我只是看不到如何更新字符串。我可以想到操作知道应该移动什么以及在哪里,但我要么缺少一个概念或知识,要么是错误的方法因为我想不出一种翻译概念的方法:现在删除这个字符位置,并将此字符写在另一个位置。
最糟糕的部分是我发现2(我认为)非常好的代码示例,但仍无法看到他们更新图像的位置:
http://zetcode.com/tutorials/javagamestutorial/sokoban/
my 2D game, Sokoban, is working, but I want to know if I improve the design
答案 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中思考。