Игра Ним
{-------------------}
Procedure GetChange;
{ Ввести новую настройку игры (количество рядов и количество фишек в каждом ряду}
const
t1= 'НАСТРОЙКА ИГРЫ';
t2= '(ввод количества рядов и количества фишек в каждом ряду)';
var
correctly: Boolean;
i: Integer;
begin {GetChange}
clrscr;
GotoXY((80-Length (t1)) div 2.1);
write(t1);
GotoXY((80-Length(t2)) div 2.2);
write(t2);
repeat
GotoXY(1.3);
write('Введите количество рядов (максимум ',MAXROW,'): ');
GotoXY(WhereX-6,WhereY);
readln(nrow);
correctly: = (nrow<=MAXROW) and (nrow >1);
if not correctly then
write (#7)
until correctly;
for i: = 1 to nrow do
repeat
GotoXY(1,i+3);
write ('ряд',i,',количество фишек(максимум',MAXCOL,'): ');
GotoXY (Wherex – 6, WhereY);
readlntncol [i]);
correctly: = (ncol [i] <=MAXCOL) and (ncol [i] >0);
if not correctly then
write (#7)
until correctly
end; {GetChange}
{-------------------}
begin {GetPlayerMove}
ShowField; {Показать начальное состояние поля }
{ Сообщить игроку правила ввода хода: }
GotoXY ((80 – Length (TEXT1)) div 2,Y);
write (TEXT1);
GotOXY((80-Length(TEXT2)) div 2, Y+1);
write (TEXT2);
repeat
{ Пригласить игрока ввести ход: }
GotoXY (1, Y+2);
Write (ТЕХТЗ); {вывести приглашение и стереть предыдущий ход}
GotoXY (WhereX-1 6, Y+2); {курсор влево на 16 позиций}
ReadLn (x1, х2); { ввести очередной ход}
exit: = x1=0; {контроль команды выхода}
change: = x1=-1; {контроль команды изменения}
if not (exit or change) then
begin
correctly: = (x1 >0) and (x1<=nrow) and
(x2<=col [x1]) and (x2 >0);
if correctly then
begin {ход правильный: }
col [x1]: = col[x1]-x2; {изменить раскладку фишек}
ShowField {показать поле}
end
else
write (#7) {ход неправильный: дать звуковой сигнал }
end
else
correctly: = true {случай EXIT или CHANGE}
until correctly;
if change then
GetChange
end; {GetPlayerMove}
{--------------------------------}
Procedure SetOwnerMove;
{ Найти и отобразить очередной ход программы }