使用 toString() 打印包含多个对象的地图
Printing a map with multiple objects using toString()
我正在 java 中制作一个没有界面的 pacman 模拟器,仅使用控制台打印,我在打印时遇到了问题。
所以,我有一个对象 pacman,它的坐标为 x 和 y,我有一个带有墙壁和 fruti 的网格,它是矩阵 tile[][]。
虽然我只打印了 pacman 和网格,但一切正常。
这是我使用的 toString():
public String toString() {
String s = "";
for(int i=0;i<WIDTH;i++) {
for(int j=0;j<HEIGHT;j++) {
if(pacman.getX() == i && pacman.getY() == j) {
s = s + pacman;
}
else {
s = s+tile[i][j];
}
}
s=s+"\n";
}
return s;
}
这是输出:
####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################
现在,我创建了一个幽灵数组列表,当我想打印幽灵、pacman 和网格时,我遇到了一些问题。
我希望代表鬼魂的角色位于网格角色之上,就像我对吃豆人所做的那样。
我只是想不出在瓷砖上方打印鬼魂的最佳方法。
我正在使用这样的 foreach 循环:
for(Ghost g : ghosts) {
if(g.getX() == i && g.getY() == j) {
s = s + g;
}
}
通常我在控制台中打印是这样的:
####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~3~~~~~2~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~1~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################
我该如何解决这个问题?
事实证明这比我想象的要复杂一些,但我认为您可以有条件地 continue
行处理(内部 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];
}
}
您需要以某种方式摆脱“~”。您可以通过使用二维字符数组而不是字符串来执行此操作,如下所示:
char[][] map = new char[width][height];
然后您可以像这样编辑每个 'pixel':
map[y][x] = g;
编辑:然后您将通过遍历所有字符来绘制屏幕,将它们写入字符串并在每行之后放置一个 \n。
我正在 java 中制作一个没有界面的 pacman 模拟器,仅使用控制台打印,我在打印时遇到了问题。 所以,我有一个对象 pacman,它的坐标为 x 和 y,我有一个带有墙壁和 fruti 的网格,它是矩阵 tile[][]。 虽然我只打印了 pacman 和网格,但一切正常。 这是我使用的 toString():
public String toString() {
String s = "";
for(int i=0;i<WIDTH;i++) {
for(int j=0;j<HEIGHT;j++) {
if(pacman.getX() == i && pacman.getY() == j) {
s = s + pacman;
}
else {
s = s+tile[i][j];
}
}
s=s+"\n";
}
return s;
}
这是输出:
####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################
现在,我创建了一个幽灵数组列表,当我想打印幽灵、pacman 和网格时,我遇到了一些问题。 我希望代表鬼魂的角色位于网格角色之上,就像我对吃豆人所做的那样。 我只是想不出在瓷砖上方打印鬼魂的最佳方法。 我正在使用这样的 foreach 循环:
for(Ghost g : ghosts) {
if(g.getX() == i && g.getY() == j) {
s = s + g;
}
}
通常我在控制台中打印是这样的:
####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~3~~~~~2~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~1~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################
我该如何解决这个问题?
事实证明这比我想象的要复杂一些,但我认为您可以有条件地 continue
行处理(内部 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];
}
}
您需要以某种方式摆脱“~”。您可以通过使用二维字符数组而不是字符串来执行此操作,如下所示:
char[][] map = new char[width][height];
然后您可以像这样编辑每个 'pixel':
map[y][x] = g;
编辑:然后您将通过遍历所有字符来绘制屏幕,将它们写入字符串并在每行之后放置一个 \n。