Счетовод

Простой помощник банкира в настольных экономических играх «Монополия», «Конверсия 1» и прочих, основанных на взаимных расчётах при помощи игровой валюты; позволяет удобно вести учёт перечислений между игроками и банком без возни с наличными средствами.

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

Данные пользователя:

Служебные (используются для нужд самой программы):

Неиспользуемые:

Игровой процесс

Перед началом игры можно на всякий случай перевести программу на шаг 00 командой В/О (после загрузки программы и при нормальном её использовании это производится автоматически).

В #0 заносится n — число игроков (n X→П 0).

Игроки получают последовательные номера 1, 2, …, n (которые лучше всего присваивать согласно очерёдности хода). Средства игрока хранятся в регистре с его номером (номерам 10, 11, 12, 13 соответствуют #a, #b, #c, #d). В любой момент можно проверить текущее состояние счёта командой П→X номер.

Номер 0 зарезервирован за Банком; его счёт — бесконечный (не содержит суммы, которую можно было бы просмотреть).

Начиная новую партию регистры счетов следует либо заполнить начальными суммами денег, либо обнулить (CX X→П 1 X→П 2 …), а начальные средства внести, используя

Перечисления

делаются следующим образом:

Как правило, это будет выглядеть так: отправитель В↑ получатель В↑ сумма С/П.

Примечание: если задать номер счёта нецелым числом, дробная часть будет отброшена.

Программа проверяет, что:

  1. номера́ счетов отправителя и получателя допустимы (находятся в диапазоне от 0 до количества игроков включительно);
  2. переводимая сумма неотрицательна;
  3. для отправителя-игрока переводимая сумма не превышает наличных средств на его счету; для отправителя-Банка эта проверка не производится.

Возможные результаты:

Независимо от исхода дальше можно переходить к следующему перечислению.

Если выполненное перечисление содержало допустимые, но неверные данные (не тот номер участника, не та сумма), его можно отменить перечислив ту же сумму обратно (поменяв местами отправителя и получателя).

Рекомендации

  1. Индикатор имеет всего 8 разрядов мантиссы. Если в игре фигурируют исключительно суммы, кратные 10/100/1000…, то на счетах лучше оперировать десятками/сотнями/тысячами денежных единиц, отбрасывая соответствующее количество конечных нулей, чтобы избежать переполнения и потери точности для очень больших сумм.
  2. В свободных регистрах можно хранить дополнительные параметры. Например в «Конверсии 1» помимо основной валюты — рублей — используются доллары. Если фактическое число игроков не превышает 6, можно учитывать и их долларовые балансы, введя для каждого участника, включая Банк, дополнительный счёт и указав соответственно большее количество игроков (n × 2 + 1); при этом контроль того, что переводы осуществляются только между счетами одного типа (с рублёвых на рублёвые, с долларовых на долларовые), возлагается на игроков. Также следует иметь ввиду, что «бесконечные деньги» доступны только счёту № 0.

Пример использования

Двое играют в «Монополию».

Подготовка: В/О (переход к шагу 00); 2 X→П 0 (указание числа игроков); CX X→П 1 X→П 2 (обнуление счетов игроков).

Банк перечисляет игрокам начальные средства — по 3000:

0 В↑ 1 В↑ 3 0 0 0 С/П — 1-му.

0 В↑ 2 В↑ 3 0 0 0 С/П — 2-му.

1-й игрок попадает на некоторую улицу и приобретает её у Банка за 70:

1 В↑ 0 В↑ 7 0 С/П

2-й игрок попадает на эту же улицу и платит 10 за проход по ней владеющему ей 1-му игроку:

2 В↑ 1 В↑ 1 0 С/П

И так далее.

Исходный код

	Fx≥0    44      ↔      К[x]    П→X0   ↔       −       FВx     ×       F√
	.       В↑      F⟳     F⟳     ↔       К[x]    Fx≠0    34      П→X0   ↔
	−       FВx     ×       F√     .        X→Пe   F⟳      В↑      КП→Xe  ↔
	−       Fx≥0    44      КX→Пe  F⟳     ↔       Fx≠0    44      X→Пe   ↔
	КП→Xe  +       КX→Пе  ↔       С/П     БП      00

Программу разработал, перевёл в формат эмулятора и составил эту инструкцию А. Лаврик — 2025-03-17