Игра «Восемь кружков» -Delphi(Делфи)

Имеется восемь кружков. Их начальное положение показано на рисунке. (посередине — пустое поле).

первоначальное положение кружков в игре
Цель игрока: поменять местами белые и черные фишки за наименьшее число ходов. Любую фишку можно перемещать только на пустое соседнее поле или же через одно занятое поле, опять-таки в пустое. Переводить фишки в другое место нельзя. На любом поле может находиться только одна фишка.

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;

Leave a Comment

86 + = 92