Иллюстрированный самоучитель по Turbo Pascal

Игра Ним

Описание программы см, п.2.7.3.

Uses CRT; {Подключение библиотеки дополнительных процедур и функций для управления экраном}
const
MAXROW = 14; {Максимальное количество рядов}
MAXCOL = 20; {Максимальное количество фишек в ряду}
type
ColType = array [1.. MAXROW] of Integer;
var
exit: Boolean; {Признак окончания работы}
change: Boolean; {Признак изменения условий игры}
nrow: Integer; { Количество рядов}
ncol: ColType; {Максимальное количество фишек по рядам}
col: ColType; {Текущее количество фишек по рядам}
{-----------------}
Procedure ShowField;
{Отображает на экране текущее состояние игрового поля}
const
FISH = #220; {Символ-указатель фишки}
Х0 =4; {Левая колонка номеров рядов}
X1 = 72; {Правая колонка количества фишек}
X =20; {Левый край игрового поля}
var
i,j: Integer;
begin {ShowField}
for i: = 1 to nrow do
begin
GotoXY(X0,i+4);
write(i); {Номер ряда}
GotoXY(Xl,i+4);
write (col [i]:2); {Количество фишек в ряду}
for j: = 1 to ncol [i] do {Вывод ряда фишек:}
begin
GotoXY(X+2*j,i+4);
if j<=col[i] then write (FISH) else write ('. ')
end
end
end; {ShowField}
{---------------}
Procedure Prepare;
{ Подготовка данных и формирование экрана }
const
Header0='ИГРА НИМ';
Header1=' Вы можете взять любое число фишек из любого ряда.';
Header2='Выигрывает тот, кто возьмет последнюю фишку.';
Header3='Номер ряда';
Header4='Кол-во фишек';
var
i: Integer;
begin {Prepare}
ClrScr; {Очищаем экран }
{Выводим заголовок:}
GotoXY((80 – Length (Header0))div 2.1);
write (Header0);
GotoXY((80-Length(Headerl))div 2.2);
write (Header1);
GotoXY((80-Length(Header2))div 2.3);
writeln(Header2);
write (Header3);
GotoXY (80 – Length (Header 4), 4);
write (Header4);
{Подготовить начальную раскладку: }
for i: = 1 to nrow do col [i]: = ncol [i]
end; {Prepare}
{-----------------}
Procedure GetPlayerMove;
{Получить, проконтролировать и отобразить ход игрока }
const
ТЕХТ1 = 'Введите Ваш ход в формате РЯД КОЛИЧ ' +
'(например, 2 3 – взять из 2 ряда 3 фишки)';
ТЕХТ2='или введите 0 0 для выхода из игры; – 1 0 для настройки
игры'; ТЕХТЗ=' Ваш ход: ';
Y=20; {номер строки для вывода сообщений}
var
correctly: Boolean; {признак правильности сделанного хода}
xl,x2: Integer; {вводимый ход}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.