2016-02-02 6 views
0

Я работаю над игрой Bomberman. Мой вопрос касается массивов. Я храню все данные о монстрах, героях и стенах в массиве String. Данные выглядит следующим образом:Как сохранить информацию о игровом поле?

WWWWWWWWWWW 
WHWEWEWMWEW 
WEWEWMWEWEW 
WWWWWWWWWWW 

где W = стена, E = пусто, M = монстр, H = герой

Тогда я сравниваю его, и если это стена я использую стены изображения и т.д. Когда что-то move Я обновляю массив.

Я хотел бы знать, что это хорошая манера? Или я должен делать это совершенно по-другому?

ответ

0

Я бы рекомендовал более ООП-подход: Используйте различные классы для различных элементов и обеспечить методы, которые описывают поведение:

public abstract class CellElement{ 
    //TODO coordinates, constructor and getters 

    public abstract void drawCell(Graphics g); 
    public abstract CellElement explode(); 
} 

public class Wall extends CellElement{ 
    //TODO constructor 

    public void drawCell(Graphics g){ 
     g.drawImage(wallimage , getX() , getY() , null); 
    } 

    public CellElement explode(){ 
     return new Empty(getX() , getY()); 
    } 
} 

//TODO other elements 

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

public class Field{ 
    private CellElement[][] field; 

    ... 
} 

Обратите внимание, что это всего лишь заглушка, пожалуйста, не копируйте-вставьте это, это скорее всего не соответствует вашим точным требованиям. Например. поле может использовать другую DataStructure, чем матрицу для хранения одиночных значений ячейки.

+0

Я думаю, что понимаю вашу идею, но у меня есть один вопрос. Чтобы заполнить поле CellElement [] [], я должен использовать для цикла? Когда мне нужно наложить стену, я должен создать новый объект и сохранить его в этом массиве? – user3636661

+0

@ user3636661 да, это основная идея. Создайте новый «Wall»-Object или что-то, что вы называете классом, представляющим ячейки, которые являются стенами, и вставьте их в позицию, где вы хотите заполнить «Стена». И то же самое для всех других объектов. – Paul

+0

Хорошо. Еще один вопрос. Как Java знает, когда и какой метод drawCell использовать? Я никогда не называю paintComponent (Graphics g) в своем собственном коде, но он работает магическим способом: P Это потому, что этот метод переопределен? – user3636661