Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Нужно придумать нормальную структуру

Метки:
Теги Теги
java

Cristalix

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Test
У каждого игрока есть свой уровень.
Что бы достичь кого либо уровня он должен получать опыт.
Допустим:
Что бы перейти на 2 уровень игроку нужно получить 200 опыта.

Проблема заключается в том что я не могу придумать нормальную реализацию. :rolleyes:

Может вы мне дадите совет как лучше это сделать?

В голову пришла один релиз но к сожалению я не умею нормально излагать свои мысли и получилось вот такое говнецо.

Код:
public enum Level {
    Level_1(1, 0),
    Level_2(2, 200),
    Level_3(3, 600),
    Level_4(4, 1200),
    Level_5(5, 2400),
    Level_6(6, 3800),
    Level_7(7, 6200),
    Level_8(8, 10000),
    Level_9(9, 15000),
    Level_10(10, 20000),
    Level_11(11, 30000),
    Level_12(12, 40000),
    Level_13(13, 50000),
    Level_14(14, 60000),
    Level_15(15, 70000),
    Level_16(16, 80000),
    Level_17(17, 90000),
    Level_18(18, 100000),
    Level_19(19, 200000),
    Level_20(20, 300000);
    
    private Integer id;
    private Integer needXp;

    Level(Integer id, Integer needXp) {
        this.id = id;
        this.needXp = needXp;
    }

Не ругайте за такое я только пытаюсь
 
Лучше алгоритм сделай. К примеру брать уровень игрока и умножать на какую-то цифру (первое что пришло в голову). Например можно сделать что-бы у всех игроков было разное количество опыта до следующего уровня.
(level * 200) + new Random().nextInt(200) + 1; Или сделать енум до 10 уровней. А после достижения 10 уровня уже проводить алгоритм
 
Level_1(1, 0) ... Level_20(20, 300000);
В данном случае ни level, ни порядковый номер, дублирующийся дважды, не несут смысловой нагрузки.
Корректнее сделать просто список (загружаемый из конфига, или статичный иммутабельный).
Номер уровня определить легко — как порядковый номер числа.
Мне первым в голову пришло ловить эвент изменения опыта, определять, поменялся ли уровень (с какого на какой), бросать два своих эвента (MyPlayerLevelRaising, MyPlayerLevelFalling), ловить по необходимости.
 

Поделиться этой страницей

Назад
Верх