Игра 100 (свинья) вдвоём с ПМК

Простая игра в кости против ПМК.

Задача

Бросая кубик, набрать 100 очков. Первым начинает игрок. Ход представляет собой серию бросков, и заключается в следующем: игрок бросает кость (кубик) неограниченное число раз и суммирует выпадающие значения. Однако если выпадает единица (свинья), вся сумма, набранная за ход, аннулируется и ход переходит к ПМК. Игрок может завершить свой ход в любой момент. То же самое делает ПМК.

Начало

В/О, С/П. Первым безусловно кидает кубик игрок.

Ход игры

После остановки в регистре X отображается число в виде: К.-СС-ООО-ББ, где:

Например: 5.-15-042-03, означает, что сейчас была выкинута пятёрка, за серию набрано 15 очков, всего вместе с текущими 42 очка, и это третий бросок в серии.

Для того чтобы ещё раз бросить кубик, просто нажимаем С/П. Если же считаем, что ход нужно завершить (нам хватит), то вводим ноль или Cx и далее С/П. После чего ход переходим к ПМК.

Если на кубике выпала единичка (свинья), то очки за серию сгорают и после С/П ход безусловно перейдёт к ПМК (даже если вы введёте не ноль). Например, после четвёртого броска вышла единица: 1.-00-022-04

ПМК за себя играет всю серию сразу. При остановке значение в том же виде, только отрицательное (-К.-СС-ООО-ББ).

После снова ход игрока. Поэтому, посмотрев на достижения ПМК, нажимаем С/П, чтобы кинуть кубик. На экране калькулятора последние нули в числе не отображаются, поэтому начальный промах ПМК будет выглядеть, например, так: -1.-00- -03.

Перед показом результата хода может отобразиться ЕГГ0Г , это значит, что ход победный. После С/П будет показан итог хода (как выше). А потом после С/П безусловно начнётся новая игра.

Параметрами игры ПМК можно управлять. Для этого используются следующие регистры:

Регистр Значение Пояснение
Ra 71 Если кто-то из участников (ПМК или игрок) набирает такую сумму, то ПМК кидает до победы. Можно поставить 100, если не хотите, чтобы ПМК так делал.
Rb 21 Это сумму ПМК будет пытаться выбросить за свой ход. Если задать меньше – ПМК осторожничает, больше – играет агрессивнее. В действительности ПМК использует скорректированное значение, в зависимости от разрыва в очках между игроком и ПМК. А это значение используется как базовое.

Далее только для тех, кто не только играет…

ПМК для игры использует стратегию Keep Pace and End Race, параметры которой и задаются в регистрах RA и RB.

Распределение регистров

R0 Флаг новой игры. Если не равно единице, то начнётся новая игра.
R1 Флаг хода игрока. Если равно единице, то ходит игрок, иначе ПМК.
R2 Константа 2200.2. Используется для генерации видеоизображения.
R3 Рабочий. Используется ПМК для установки максимума для серии и для цикла по уменьшению порядка числа.
R4 Число, выброшенное кубиком.
R5 Номер хода в серии.
R6 Сумма очков за серию.
R7 Общая сумма очков игрока. Обновляется после перехода хода к ПМК.
R8 Константа 88008000. Используется для генерации видеоизображения.
R9 Общая сумма очков ПМК. Обновляется сразу.
Ra 71 (параметр). Смысл объяснён ранее.
Rb 21 (параметр). Смысл объяснён ранее.
Rc Случайное число в диапазоне (0…1). При одинаковом начальном значении выдаёт ту же последовательность случайных чисел (бросков кубика).
Rd Константа 82. Адрес процедуры броска кубика.
Re Константа 77. Адрес кода, выполняемого когда сумма превысит 71.

Текст программы

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  Cx x→П7 x→П9 0 x→П5 x→П6 1 КППd П→x7 +
 10 |  F10x 1 x→П0 КП→x4 П→x5 x→П3 FВx П→x8 + П→x6
 20 |  П→x2 + К П→x4 <-> FL1 28 /-/ /-/ <->
 30 |  КНОП ВП 1 /-/ FL3 30 С/П FL0 00 FL1
 40 |  03 П→x6 × Fx=0 06 x→П5 x→П6 П→xa FВx П→x7
 50 |  + x→П7 Кx≥0e П→x9 П→xa Кx<0e + 8
 60 |  ÷ П→xb x→П3 КППd Fx≠0 72 П→x3 + Fx≥0
 70 |  64 П→x6 П→x9 + x→П9 БП 10 П→x9 2 F10x
 80 |  БП 62 x→П1 КП→x5 КП→x6 П→xc 1 1 × Fπ
 90 |  + К{x} x→Пc 6 × К[x] x→П4 В↑ П→x6 +
 A0 |  Кmax x→П6 В/О

Используемые трюки в программе.

Подпрограмму генерации случайного числа по адресам 85…92 можно, при желании, поменять. Тем более, что есть резерв ещё в две команды.