Java 使用toString()打印包含多个对象的地图

Java 使用toString()打印包含多个对象的地图,java,tostring,Java,Tostring,我正在用java制作一个没有接口的pacman模拟器,只使用控制台打印,打印时遇到了一个问题。 我有一个物体pacman,它的坐标是x和y,我有一个网格,有墙和圆台,它是矩阵瓷砖[]。 虽然我只是在打印pacman和网格,但一切都很好。 这是我使用的toString(): 通常我会在控制台中得到如下打印: for(Ghost g : ghosts) { if(g.getX() == i && g.getY() == j) { s = s + g; } }

我正在用java制作一个没有接口的pacman模拟器,只使用控制台打印,打印时遇到了一个问题。 我有一个物体pacman,它的坐标是x和y,我有一个网格,有墙和圆台,它是矩阵瓷砖[]。 虽然我只是在打印pacman和网格,但一切都很好。 这是我使用的toString():

通常我会在控制台中得到如下打印:

for(Ghost g : ghosts) {
  if(g.getX() == i && g.getY() == j) {
        s = s + g;
  }
}
####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~3~~~~~2~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~1~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################
char[][] map = new char[width][height];
####################

# 这比我想象的要复杂一点,但我认为可以有条件地
继续
行处理(内部
j
循环),然后就可以了。不过,您必须将重影放入
else
块中。未经测试:

        ROW: 
        for(int j=0;j<HEIGHT;j++) {                 
            if(pacman.getX() == i && pacman.getY() == j) {
                s = s + pacman;
            } 
            else { 
                for(Ghost g : ghosts) {
                  if(g.getX() == i && g.getY() == j) {
                    s = s + g;
                    continue ROW;
                  } 
                 s = s+tile[i][j];   
               }
            }
行:

对于(int j=0;j您需要以某种方式去掉“~”。您可以通过使用2d字符数组而不是字符串来实现,如下所示:

for(Ghost g : ghosts) {
  if(g.getX() == i && g.getY() == j) {
        s = s + g;
  }
}
####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~3~~~~~2~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~1~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################
char[][] map = new char[width][height];
然后,您可以像这样编辑每个“像素”:

map[y][x] = g;

编辑:然后通过循环所有字符来绘制屏幕,将它们写入字符串,并在每行后面放置一个\n。

你必须像对待pacman一样使用
else
。@markspace是的,但我找不到正确的放置位置。如果..我不知道,我是否应该使用else if..我不知道。