Java - лучший метод обработки переключаемых эффектов в игре - PullRequest
1 голос
/ 15 февраля 2012

Я занимаюсь разработкой игры, в которой пользователь может включать / выключать определенные эффекты.Эти эффекты вызывают утечку энергии пользователя, и различные части программы должны быть в состоянии проверить, активен ли эффект.В настоящее время я использую тип enum для хранения и проверки эффектов:

public static enum Effects { SUPER_FIRE, FIRE_SHIELD }

if (someEffect == Effects.SUPER_FIRE) {
    // Breath fire etc..
}

Сказав это, я должен хранить другие переменные для каждого эффекта - например, уровень, необходимый для его использования, или уровень вкоторый истощает энергию.Итак, другой метод, о котором я подумал, это использовать класс:

public class SuperFire extends Effect {

    public static int levelRequired = 10;
    public static int drainRate = 5;        

    public boolean active() {
        // Check if it's active
    }

    public boolean activate() {
    }

    public boolean deactivate() {
    }

}


SuperFireEffect sfe = new SuperFire();
sfe.activate();
if (sfe.active()) {
    energyLevel -= sfe.drainRate;
}
sfe.deactivate();

Какая реализация (или любая другая) лучше всего подходит для этой ситуации?

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

В любом случае я не решаюсь сказать «лучший», но может показаться, что ваш второй пример «лучше» в «более гибком» значении слова.

Конечно, из ваших очень маленьких фрагментов кода вы не очень хорошо инкапсулируете функциональность, поэтому может показаться, что сначала вы захотите сделать еще несколько проектных работ.

В конце концов, вы хотите, чтобы игровой код мыслил в терминах базового класса Effect и того, что он может делать, и вам не нужно ничего знать о реализации таких вещей, как SuperFireEffect.

1 голос
/ 15 февраля 2012

2-я реализация лучше, так как вы упоминаете об эффектах, которые определяются их собственным набором функций / свойств / полей / атрибутов, таких как "levelRequired, sinkRate" .Таким образом, следуя этому подходу, вы должны хорошо определить свои классы / сущности, их особенности и общие характеристики.Должны быть изложены принципы объектно-ориентированного программирования.

1 голос
/ 15 февраля 2012

Я бы, вероятно, выбрал второе, так как, на мой взгляд, оно более "объектно-ориентировано".Плюс, если вы начнете добавлять много эффектов, это будет легче поддерживать, и вы сможете извлечь выгоду из наследования суперэффектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...