2015-10-23 2 views
1

Я работаю над своей первой java-программой (так что эти вопросы относительно просты). Я разрабатываю какую-то базовую ролевую игру, я работаю над атрибутами персонажа.Java, извлекающий данные из перечислений

Мой вопрос являются:

  1. Как я могу получить данные из перечислений, которые я создал (проблема в конструктор Character мне нужно получить значения из ClassStats в зависимости от выбранного класса символов.)?
  2. Могу ли я сохранить начальные значения атрибутов для каждого класса символов лучше?
enum ClassStats { 

    Fighter(15,14,12,10,9,10), Rogue(12,12,16,14,10,10), Mage(10,10,14,16,14,10), Cleric(12,14,12,13,16,14); 

    private int strength, constitution, dexterity, intelligence, wisdom, charisma; 

    ClassStats(int str, int con, int dex, int intel, int wis, int cha){ 
     strength = str; 
     constitution = con; 
     dexterity = dex; 
     intelligence = intel; 
     wisdom = wis; 
     charisma = cha; 
    } 

    int getStrength(){ 
     return strength; 
    } 

    int getConstitution(){ 
     return constitution; 
    } 

    int getDexterity(){ 
     return dexterity; 
    } 

    int getIntelligence(){ 
     return getIntelligence(); 
    } 

    int getWisdom(){ 
     return wisdom; 
    } 

    int getCharisma(){ 
     return charisma; 
    } 

} 
public class Character { 

private String Name; 
private String Class; 
private int Level; 
private long XP; 
private int HP; 
private int currentHp; 
/*private int BAB; /*Base attack bonus*/ 

private int Strength; 
private int Constitution; 
private int Dexterity; 
private int Intelligence; 
private int Wisdom; 
private int Charisma; 

Character(String name, String chracterClass){ 

    Name = name; 
    Class = chracterClass; 
    Level = 1; 
    XP = 0; 
    HP = CharacterUtil.setHP(chracterClass); 
    currentHp = HP; 
    ClassStats cs = null; 
    Strength = cs.getStrength(); 
    System.out.println("Strength: " + Strength); 
    Constitution = cs.getConstitution(); 
    Dexterity = cs.getDexterity(); 
    Intelligence = cs.getIntelligence(); 
    Wisdom = cs.getWisdom(); 
    Charisma = cs.getCharisma(); 

} 

} 
+1

Пожалуйста, соблюдайте соглашения о кодировании Java: имена типов (класс, интерфейс, перечисление) должны начинаться с заглавной буквы (например, «BigPicture»). Имена методов, переменных и полей должны начинаться с буквы нижнего регистра (например, 'bigPicture'), а константы должны быть все-шапки (например,' BIG_PICTURE'). Кроме того, настоятельно рекомендуется избегать присвоения имен собственным классам с теми же именами, что и классы в java.lang (например, 'Character'). – RealSkeptic

ответ

0

Я бы рекомендовал не использовать перечисление и использовать менее примитивные значения и создавать объекты для этих нужд. Каждый класс игрока также может быть Java-классом (все они расширяют абстрактный PlayerClass). Затем персонаж может получить класс игрока в конструкторе и спросить его, какие атрибуты по умолчанию могут быть.

После того, как эта программа станет больше, я буду исследовать шаблон проектирования Factory.

+0

Я думал об использовании абстрактный класс, но некоторые люди предложили мне использовать агрегацию, потому что у персонажа есть характерный класс, а не для символа - характерный класс. Я проверю шаблон заводского дизайна. Благодаря! – Niminim

+0

Да, обязательно используйте агрегацию. Я имею в виду абстрактную CharacterClass, и затем каждый класс расширяет ее (Thief расширяет CharacterClass). Затем игрок получает CharacterClass в своем конструкторе (который будет конкретным классом, например Rogue), и использует его для установки его начальных атрибутов. –

+0

Звучит неплохо – Niminim

0

на первый:

ClassStats cs = null; 
Strength = cs.getStrength(); 
System.out.println("Strength: " + Strength); 
Constitution = cs.getConstitution(); 
Dexterity = cs.getDexterity(); 
Intelligence = cs.getIntelligence(); 
Wisdom = cs.getWisdom(); 
Charisma = cs.getCharisma(); 

это не может работать. В первой строке вы устанавливаете cs в «null» и пытаетесь получить доступ к данным cs через некоторые геттеры. Как получить значение от «null»?

Доступ значения перечислений в Java работает как

YourEnum.values()[index]; 

как в How to get Enum Value from index in Java?

или

YourEnum.YourValue 

как в Java: access to the constants in an enumeration (enum)

Далее я бы подумать об использовании системы баз данных, как MySQL для хранения символов-Cla ss informations - это намного проще редактировать, если ваш проект становится больше. Наиболее используемым здесь является Java Persistance API (JPA).

https://dzone.com/articles/jpa-tutorial-setting-jpa-java

+0

Да, я знаю, что null здесь не имеет смысла, идеал предложил мне добавить его, и я забыл его удалить. – Niminim

1

A) Вы можете просто передать в перечислении в конструктор.

B) Или вы можете получить перечисление со строкового значения через enumClass.valueOf(strValue).

C) Или, еще лучше, у вас может быть фабричный класс для создания разных символов по умолчанию для вас.

Кроме того, эти две линии не имеют смысла:

ClassStats cs = null; 
Strength = cs.getStrength(); 

Если вы устанавливаете его в нулевое значение, то вы не можете вызвать метод на объекте. Это по существу, где вы могли бы проанализировать перечисление из строкового представления, переданного в конструкторе, или если вы выберете вариант 2, у вас уже будет переменная ClassStats.

+0

A) Добавление перечисления ClassStats в конструкторе достаточно? – Niminim

+0

B) enumClass.valueOf (strValue) даст мне желаемый stat? где конкретный класс символов играет здесь роль? – Niminim

+0

Да, я знаю, что null здесь не имеет смысла, идеал предложил мне добавить его, и я забыл его удалить. – Niminim

Смежные вопросы