Печать карты с несколькими объектами с помощью toString () - PullRequest
0 голосов
/ 04 декабря 2018

Я делаю симулятор pacman в Java без интерфейса, использую только консольную печать, и во время печати я столкнулся с проблемой.Итак, у меня есть объект pacman с координатами x и y, у меня есть сетка со стенами и фруктами, которая является плиткой матрицы [] [].Пока я печатал только пакман и сетку, все было хорошо.Это 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;
    }

это вывод:

####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################

Теперь я создал список массивов призраков, и у меня возникают некоторые проблемы, когда я хочунапечатать призраков, пакмана и сетку.Я хочу, чтобы персонаж, представляющий призраков, был выше персонажа сетки, так же, как я делал с пакманом.Я просто не могу найти лучший способ напечатать призраков над плитками.Я использую цикл foreach следующим образом:

for(Ghost g : ghosts) {
  if(g.getX() == i && g.getY() == j) {
        s = s + g;
  }
}

Обычно я получаю печать в консоли следующим образом:

####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~3~~~~~2~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~1~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

вам нужно как-то избавиться от '~'.Вы можете сделать это, используя вместо этого массив 2d char вместо строки, например:

char[][] map = new char[width][height];

, тогда вы можете просто отредактировать каждый «пиксель» следующим образом:

map[y][x] = g;

РЕДАКТИРОВАТЬ: затем вы бы нарисовали экран, перебрав все символы, записав их в строку и поместив \ n после каждой строки.

0 голосов
/ 04 декабря 2018

Это оказывается немного хитрее, чем я думал, но я думаю, что вы можете условно 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];   
               }
            }
...