Имеется восемь кружков. Их начальное положение показано на рисунке. (посередине — пустое поле).
первоначальное положение кружков в игре
Цель игрока: поменять местами белые и черные фишки за наименьшее число ходов. Любую фишку можно перемещать только на пустое соседнее поле или же через одно занятое поле, опять-таки в пустое. Переводить фишки в другое место нельзя. На любом поле может находиться только одна фишка.
NewGame — Процедура, расставляющая все фишки в начальное положение.
Move(N) — Функция, переставляющая фишку. Если перестановка невозможна возвращает False.
Win — Функция, проверяющая выиграл ли игрок. Если да, возвращает True. Выполняется после каждого хода (Функции Move(N)). Перед ней нужно использовать счетчик ходов.
Type
MRound = (Black, White, None);
Var
Pole: Array [1 .. 9] of MRound;
Procedure NewGame;
Var
I: Integer;
Begin
For I := 1 to 4 Do
Pole[I] := Black;
For I := 6 to 9 Do
Pole[I] := White;
Pole[5] := None;
End;
Function Move(N: Integer): Boolean;
Var
B: Boolean;
Begin
If (Pole[N + 1] = None) or (Pole[N + 1] = None) or (Pole[N + 2] = None) or
(Pole[N - 2] = None) Then
B := True
Else
B := False;
If B Then
Begin
If Pole[N + 1] = None Then
Begin
Pole[N + 1] := Pole[N];
Pole[N] := None;
End
Else If Pole[N + 2] = None Then
Begin
Pole[N + 2] := Pole[N];
Pole[N] := None;
End
Else If Pole[N - 1] = None Then
Begin
Pole[N - 1] := Pole[N];
Pole[N] := None;
End
Else If Pole[N - 2] = None Then
Begin
Pole[N - 2] := Pole[N];
Pole[N] := None;
End;
End;
Move := B;
End;
Function Win: Boolean;
Begin
If (Pole[1] = White) and (Pole[2] = White) and (Pole[3] = White) and
(Pole[4] = White) and (Pole[6] = Black) and (Pole[7] = Black) and
(Pole[8] = Black) and (Pole[9] = Black) Then
Win := True
Else
Win := False;
End;