Текстовая игра, основанная на Java


Чтобы помочь с обучением код в мой класс, я работал над этим текстом игры, чтобы держать себя кодирование (почти) каждый день. У меня есть класс под названием BasicUnitи в нем у меня есть методы, чтобы создать пользовательский класс. Я использую 2 способа для этого, позволяя пользователю ввести информацию для класса. Мне просто интересно, если я могу сделать это в более упрощенном порядке?

    public void buildCustomClass(int maxHP, int maxMP, int maxSP, int baseMeleeDmg, int baseSpellDmg, int baseAC, int baseSpeed) {

    this.maxHP = maxHP;
    this.maxMP = maxMP;
    this.maxSP = maxSP;
    this.baseMeleeDmg = baseMeleeDmg;
    this.baseSpellDmg = baseSpellDmg;
    this.baseAC = baseAC;
    this.baseSpeed = baseSpeed;
    lvl = 1;
    xp = 0;
    curHP = maxHP;
    curMP = maxMP;
    curSP = maxSP;

}

public void createCustomClass() {
    kb = new Scanner(System.in);

    System.out.println("Enter the information for your class: ");
    System.out.println("Enter HP: ");
    maxHP = kb.nextInt();
    System.out.println("Enter MP: ");
    maxMP = kb.nextInt();
    System.out.println("Enter SP: ");
    maxSP = kb.nextInt();
    System.out.println("Enter Base Melee Damage: ");
    baseMeleeDmg = kb.nextInt();
    System.out.println("Enter Base Spell Damage: ");
    baseSpellDmg = kb.nextInt();
    System.out.println("Enter AC: ");
    baseAC = kb.nextInt();
    System.out.println("Enter Speed: ");
    baseSpeed = kb.nextInt();

    buildCustomClass(maxHP, maxMP, maxSP, baseMeleeDmg, baseSpellDmg, baseAC, baseSpeed);
}


Комментарии
1 ответ

Добро пожаловать в код комментарий и спасибо за код!

Общие вопросы

Именования

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

Соглашения Об Именовании

Похоже, вы уже знаете
Именование Java Конвенций.

Избегайте сокращений

В вашем коде вы используете некоторые аббревиатуры, такие как maxSP и baseMeleeDmg.
Хотя эта аббревиатура имеет смысл для вас (сейчас) кто-то читает ваш код, не знакомых с проблемой (как и я) имеет трудное время выяснить, что это означает.

Если вы делаете это, чтобы сохранить, вписав работу: помните, что вы почаще читать ваш код, чем на самом деле что-то печатать. Также для Java у вас есть хорошая поддержка IDE с функцией автозавершения кода, так что вы, скорее всего, типа длинный идентификатор только один раз и позже выбрать из предложений Иды автозавершения кода.



Другие идентификаторы имеют смысл для меня. [из-за контекста] документальные правовые акты

Контексте выглядит как ваш друг, но на самом деле это ваш враг.

Есть две причины:


  1. Контексте зависит от знаний и опыта. Но разные люди имеют разные знания и опыт, так что для одного это может быть просто вспомнить контекст, а для другого это может быть трудно. Также свои знания и опыт со временем меняются, поэтому вы может найти его трудно запомнить контекст любой фрагмент кода ты написал, когда вы вернетесь к нему в 3 года или даже 3 моль.

    Дело в том, что в любом случае вам нужно, (больше или меньше) времени , чтобы привести контекст обратно в мозг.
    Но единственное, что вы обычно не имеют, когда вы делаете программирование как бизнес-Ист времени. Поэтому все, что делает вас быстрее в понимании кода-это денег стоит воспользоваться. И не придется запоминать какие-либо контексте-это такая экономия времени.


  2. Вы можете возразить, что у нас очень простая промблем с простым и общим контекстом. Это правда.
    Но:


    • Проекты реальной жизни обычно имеют более высокую сложность и менее eays, чтобы помнить контекстах. Дело здесь:
      В какой момент ваша контексте так Комплекс, что вы переключаетесь с "сокращенного наименования" на "подробно nameing на машинке"?

      Опять этот момент изменяет с вами знаниями и своим опытом, который может привести к коду, что другим трудно понять.

      Гораздо лучший способ справиться с этим - всегда Белый код таким образом, что самый тупой человек, которого вы знаете, может быть в состоянии понять это. И это касается не использовать akronyms в свои идентификаторы, которые , возможно, нуждаются в контексте, чтобы понять.


    • Это учебный проект. Когда вы тренируетесь физических навыков, как Highjumping вы начинаете с очень низкого панель, которую можно легко пройти даже не используя флоп метод просто чтобы иметь безопасную окружающую среду.

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



Не сообщают имен

Оба метода имена вводят в заблуждение: они утверждают, создавать и строить что-то, но в реальности ни одна создает или строит что-нибудь.

Один способ делает взаимодействие пользователя и другая настройка объекта.

Имена методов должны отражать это.

Добавления объектов в идентификаторы для физических величин

Физические величины ничего не значит без блока. Это особый случай в контексте проблемы , упомянутые выше. Наиболее известным примером является провал двух космических миссий на Марс климат Орбитер и Марс Полар Ландер. Полет программным управлением был построен НАСА и работал с метрических измерений (т. е. meters, meters per second или newton seconds), когда двигатель (и их драйвера), которая была построена на Локхид Мартин , которые используют имперские единицы (т. е. feet, feet per minute или Pound-force second).

Смысл в том, что, не имея единицы физических величин в идентификаторы заставляет вас думать , если есть проблема или нет:

double acceleration = flightManagement.calculateAcceleration();
engine.accelerate(acceleration);

Но, как правило, не вопрос для него, если у вас есть причина...

Имея подразделения в имена идентификаторов проблема становится очевидной:

double meterPerSquareSeconds = 
flightManagement.calculateAccelerationInMeterPerSquareSecond();
engine.accelerateByFeedPerSquareMinute(
meterPerSquareSeconds); // oops

А у нас опять тот же аргумент: ваш конкретный код настолько прост и настолько мал, что мы не нужны накладные расходы.
А потом: как вы решаете, в какой момент расходы нужны? И снова это зависит от знаний и опыта, который все-таки разные у людей...

Недостатки реализации

Оба метода, используя те же переменные-члены.
Е. Г. вы переменной maxSP: в createCustomClass() вы назначаете его результат kb.nextInt(). Затем это значение передается в качестве параметра buildCustomClass() где вы снова присвоить значение параметра опять же переменную-член.

Рядом с этим бесполезно, это может привести к путанице ошибки позже.

держать же уровне абстракции

Методы следует либо вообще "примитивное" opeerations или вызывать другие методы, а не оба одновременно.

В конце вашего метода createCustomClass() вы называете другой способ (buildCustomClass()). Лучший способ сделать это, чтобы извлечь код перед вызовом buildCustomClass() в отдельный (частный) метод:

public void createCustomClass() {
aquireDataFromUser();
buildCustomClass(
maxHP,
maxMP,
maxSP,
baseMeleeDmg,
baseSpellDmg,
baseAC,
baseSpeed);
}

private void aquireDataFromUser() {
kb = new Scanner(System.in);

System.out.println("Enter the information for your class: ");
System.out.println("Enter HP: ");
maxHP = kb.nextInt();
System.out.println("Enter MP: ");
maxMP = kb.nextInt();
System.out.println("Enter SP: ");
maxSP = kb.nextInt();
System.out.println("Enter Base Melee Damage: ");
baseMeleeDmg = kb.nextInt();
System.out.println("Enter Base Spell Damage: ");
baseSpellDmg = kb.nextInt();
System.out.println("Enter AC: ");
baseAC = kb.nextInt();
System.out.println("Enter Speed: ");
baseSpeed = kb.nextInt();
}

Рядом сделать createCustomClass() короче это делает бесполезными reassingment переменные-члены очевиден.

5
ответ дан 5 апреля 2018 в 03:04 Источник Поделиться