Игра Ним
{------------------}
Function CheckField: Integer;
{ Проверка состояния игры. Возвращает 0, если нет ни одной фишки (победа игрока),
'1 – есть один ряд (победа машины) и количество непустых рядов в остальных случаях }
var
i,j: Integer;
begin {CheckField}
j: = 0;
for i: = 1 to nrow do if col[i] >0 then inc(j);
CheckField: = j
end; {CheckField}
{--------------------}
Procedure CheckPlay;
{ Контроль окончания игры }
var
i: Integer;
begin {CheckPlay}
GotoXY(1.25);
write ('Введите 1, если хотите сыграть еще раз, 0 – выход:');
readln(i);
if i=l then change: = true else exit: = true
end; {CheckPlay}
{--------------------}
Procedure PlayerVictory;
{ Поздравить игрока с победой и усложнить игру }
const
t1 = 'ПОЗДРАВЛЯЮ С ОТЛИЧНОЙ ПОБЕДОЙ!'; var i: Integer; begin
GotoXY((80-Length(t1)) div 2.24);
writeln(t1,#7);
for i: = 1 to nrow do
if ncol [i] <MAXROW then inc (ncol [i]);
CheckPlay
end; {PlayerVictory}
{---------------------}
Procedure OwnVictory;
{ Победа машины }
const
t1 = 'ВЫ ПРОИГРАЛИ: СЛЕДУЮЩИМ ХОДОМ Я БЕРУ ВЕСЬ РЯД';
var
i: Integer;
begin {OwnVictory}
i: = 1;
while col[i]=0 do inc(i);
GotoXY((80-Length(t1)) div 2.24);
write(t1,i,#7);
delay (2000); {задержка на 2 секунды}
col [i]: = 0;
ShowField;
CheckPlay
end; {OwnVictory}
{--------------------}
Procedure ChooseMove;
{ Выбор очередного хода }
const
BIT = 6; {количество двоичных разрядов}
type
BitType = array [1..BIT] of Integer;
var
ncbit: array [1..MAXROW] of BitType;
i,j,k: Integer;
nbit: BitType;
{------------------}
Procedure BitForm(n: Integer; var b: BitType);
{ Формирует двоичное представление b целого числа n }
var
i: Integer;
begin {BitForm}
for i: = BIT downto 1 do
begin
if odd(n) then b[i]: = 1 else b[i]: = 0;
n: = n shr 1
end
end; {BitForm}