Я собираюсь начать делать видеоигру, и у меня возникла дилемма дизайна.
У меня есть основной класс GameWorld и небольшой класс Missile. Когда экземпляр Ракеты взрывается, он должен повредить все корабли вокруг себя.
Я придумал два подхода к этому:
// APPROACH A:
// in class Missile
explode()
{
for each (ship in GameWorld.getShips()) {
if (distanceTo(ship)) <= BLAST_RADIUS) {
ship.dealDamage(DAMAGE);
}
}
}
/* creates coupling that allows Missile to call GameWorld and all of
* it's methods, which is bad. but also keeps the entire explosion
* process within Missile which is intuitive object design.
*/
// APPROACH B:
// in class GameWorld
update()
{
.
.
.
if (missile.position.equals(missile.destination)) {
for each (ship in shipsArray) {
if (distanceTo(ship)) <= missile.BLAST_RADIUS) {
ship.dealDamage(missile.DAMAGE);
}
}
}
.
.
.
}
/* no two-way coupling from GameWorld to Missile since Missile has no
* reference to GameWorld which is good.
* but explosion is now something being done by the GameWorld and not
* Missile, which is an unintuitive design. also when expanding this design
* approach to the rest of the objects and interactions
* GameWorld can become sort of a "god class" with all smaller objects being very thin
*/
так какой подход лучше? стоит ли связывать классы, давая ссылку Missile на GameWorld, чтобы он мог использовать свои геттеры, чтобы сделать весь процесс взрыва в Missile.explode(), или лучше использовать второй менее интуитивный и менее связанный подход?
заранее спасибо.