Я заметил, что реализация простой игры «Камень, ножницы, бумага» часто требует множества операторов «если».

Например, если компьютер делает ход «Камень», вам понадобится оператор if для случая, когда человек выбирает ход «Камень», «Бумага» или «Ножницы», и вам придется сделать это еще три раза для каждый из двух других вариантов, которые может сделать компьютер.

А если вы внедрили бонусную функцию, включающую «Ящерицу» и «Спока», количество комбинаций, которые вам нужно проверить, увеличится еще больше.

Один из способов обойти это беспорядочное управление потоком — использовать матрицу, представляющую настройку игры для двух игроков. Это часто можно увидеть в теории игр, где есть набор действий для Игрока 1 и Игрока 2, а матрица отображает выплаты для обоих игроков. Поскольку RPS — это симметричная игра с нулевой суммой для двух игроков, нам нужна только одна выплата за действие на ячейку или координатную точку в матрице. Это положительное значение означает, что побеждает Игрок 1, отрицательное значение означает, что побеждает Игрок 2, а нулевое значение означает ничью.

Таким образом, чтобы проверить результат двух действий, нам просто нужно настроить структуру данных двумерного массива (или матрицы). В Javascript это будет просто массив массивов, обозначающий матрицу nxn. Однако, если вы используете объект, вы можете воспользоваться интерфейсом ключ-значение, чтобы пометить, какие результаты являются результатом того или иного выбора, вместо того, чтобы полагаться на беззнаковые целые числа в качестве ключей.

Таким образом, чтобы получить доступ к индивидуальному результату, вам просто нужно связать два оператора скобок, один из которых представляет выбор Игрока 1, а другой представляет выбор Игрока 2 (порядок имеет значение, в зависимости от того, кто является Игроком 1 и Игроком 2), и вы получите результат . В RPS вы можете определить выплаты как {-1,0,1}. Таким образом, если доступ к массиву возвращает 1, вы знаете, что игрок 1 выиграл; если он возвращает 0, вы знаете, что это ничья; и если он возвращает -1, вы знаете, что игрок 2 выиграл.

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