WedX - журнал о программировании и компьютерных науках

Простой алгоритм оценки игры

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

Что бы это был "профессиональный" способ сделать следующее...

if (successPercent == 100)
        successMessage = "OUTSTANDING";
    else if (successPercent < 100 && successPercent > 80)
        successMessage = "EXCELENT";
    else if (successPercent < 100 && successPercent > 60)
        successMessage = "VERY GOOD";
    else if (successPercent < 100 && successPercent > 40)
        successMessage = "GOOD";
    else if (successPercent < 100 && successPercent > 10)
        successMessage = "AVERAGE";
    else if (successPercent > 0 && successPercent < 10)
        successMessage = "BAD";
    else if (successPercent == 0)
        successMessage = "TERRIBLE";
02.10.2014

  • это просто хорошо, дерзайте! 02.10.2014
  • Если successPercent всегда будет равно 100 или меньше, вы можете выбросить все successPercent < 100 части. Если оно может превысить 100 -- скажем, из-за округления или чего-то подобного -- измените первую строку на if (successPercent >= 100). 02.10.2014
  • у тебя есть какая-нибудь историческая статистика о результатах игр? 02.10.2014

Ответы:


1

Вам не нужна часть "successPercent < 100" каждый раз, потому что вы переходите к следующему else, только если текущее if неверно.

   if (successPercent == 100)
        successMessage = "OUTSTANDING";
    else if (successPercent > 80)
        successMessage = "EXCELENT";
    else if (successPercent > 60)
        successMessage = "VERY GOOD";
    else if (successPercent > 40)
        successMessage = "GOOD";
    else if (successPercent > 10)
        successMessage = "AVERAGE";
    else if (successPercent!=0 && successPercent < 10)
        successMessage = "BAD";
    else if (successPercent == 0)
        successMessage = "TERRIBLE";
02.10.2014
  • Отсутствует случай successPercent == 10 (я знаю, что это тоже в вопросе, но именно поэтому OP попросил сделать это профессионально). 02.10.2014
  • Также с этим кодом вы никогда не получите сообщение УЖАСНО, так как оно всегда соответствует ‹ 10, то есть ПЛОХО. 02.10.2014

  • 2

    Я бы создал перечисление со всеми возможными оценками. Затем вы можете вызвать статический метод getGameScore, который просматривает все игровые результаты, пока не найдет тот, который соответствует заданному игровому счету. Это позволяет избежать большого количества повторяющегося кода и всех остальных, если они не облегчают чтение кода.

    В зависимости от того, что вы хотите делать с оценками, которые не попадают в правильный диапазон, вам нужно будет сделать что-то еще, чем я написал, в настоящее время он возвращает нулевую ссылку, если вы вводите оценку, например -1 или 101.

    /**
     * Enum representing all possible game scores.
     * Each game score has a lower limit and upper limit.
     */
    public enum GameScore {
      OUTSTANCING(100, 100),
      EXCELLENT(80, 99),
      VERY_GOOD(60, 79),
      GOOD(40, 59),
      AVERAGE(10, 39),
      BAD(1, 9),
      TERRIBLE(0, 0)
      ;
    
      // The max of the range for this GameScore
      private final Integer min;
      // The min of the range for this GameScore
      private final Integer max;
    
      /**
       * Constructs a gameScore type by specifying the range.
       * @param min
       * The minimum of the range.
       * @param max
       * The maximum of the range.
       */
      private GameScore(final Integer min, final Integer max) {
        this.min = min;
        this.max = max;
      }
    
      /**
       * Searches a game score based on a given score.
       * @param score
       * The score for which a GameScore is searched for.
       * @return
       * Returns the first GameScore that matches the given score. This means that
       * the given score falls in the range of the GameScore.
       * Will return null if no matching GameScore is found.
       */
      public static GameScore getGameScore(final Integer score) {
        for(GameScore gameScore : values()) {
          if(score >= min && score <= max) {
            return gameScore;
          }
        }
        return null;
      }
    
    02.10.2014

    3

    Вы можете попробовать этот способ

        if (successPercent == 100)
            successMessage = "OUTSTANDING";
        else if (successPercent > 80)
            successMessage = "EXCELENT";
        else if (successPercent > 60)
            successMessage = "VERY GOOD";
        else if (successPercent > 40)
            successMessage = "GOOD";
        else if (successPercent > 10)
            successMessage = "AVERAGE";
        else if (successPercent!=0&&successPercent <= 10) 
       //needs both condition since successPercent==0 is also
                                         valid successPercent <=10
            successMessage = "BAD";
        else if (successPercent == 0)
            successMessage = "TERRIBLE";
    
    02.10.2014

    4

    Вы можете использовать хэш-таблицу:

    Объявите переменную класса:

    Map<Integer,String> map;
    

    Инициализируйте его один раз:

    map = new HashMap<Integer,String>();
    map.put( 0,"TERRIBLE");
    map.put( 1,"BAD");
    map.put( 2,"AVERAGE");
    map.put( 3,"AVERAGE");
    map.put( 4,"GOOD");
    map.put( 5,"GOOD");
    map.put( 6,"VERY GOOD");
    map.put( 7,"VERY GOOD");
    map.put( 8,"EXCELLENT");
    map.put( 9,"EXCELLENT");
    map.put(10,"OUTSTANDING");
    

    Получите строку счета, когда это необходимо:

    successMessage = map.get((successPercent-10)/10+1);
    
    02.10.2014
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]