Исходник программы, показывающей пример создания игры на доске 6х6. У каждого игрока есть 18 жетонов, они по очереди кладут жетоны на любую незанятую клетку.
Цель игры состоит в том, чтобы избежать завершения любого квадрата, отметив все 4 угла его жетонами. Квадрат может быть любого размера и наклонен под любым углом. Всего таких квадратов 105 (изначально отображается несколько квадратов для примера). Вы можете щелкнуть правой кнопкой мыши в любой точке, чтобы увидеть квадраты с углами.
Игрок, первым завершивший квадрат, становится проигравшим. По сути, есть только один способ закончить игру вничью.
Это еще одна интересная головоломка / игра Мартина Гарднера, первоначально опубликованная в его колонке журнала «Mathematical Recreations» в журнале Scientific American в 60-х годах. Это объясняет использование им терминов «HIP» и «хипстер» - терминов, которые, вероятно, незнакомы большинству сегодняшних зрителей.
Определены два класса: TSquare определяет четыре угла любого квадрата и определяет, сколько углов «принадлежит» каждому игроку. Squarelist - это TStringlist, который имеет строковую версию отсортированных координат в качестве уникального ключа для каждого квадрата и объект Tsquare, сохраненный как запись Objects. Squarelist всегда будет содержать 105 записей. В целом было доказано (не мной), что n2 x (n2-1) / 12 квадратов могут быть сформированы на доске n x n.
Класс TPlayer идентифицирует каждого игрока, будь то компьютер, и очки, которыми он владеет в данный момент. Когда игрок делает ход, процедура MakeMove сканирует Squarelist, чтобы увидеть, дает ли эта точка право владения четырьмя углами этому игроку для любого квадрата в списке (т.е. он только что завершил квадрат и проиграл).
Пользовательские курсоры определены для обозначения текущего игрока цветом: красный для игрока A и синий для игрока B. Курсоры содержатся в файле ресурсов Cursors.res. Четыре файла, используемые для создания Cusors.res (Cursors.rc, Genres, bat, Red.cur и Blue.cur) включены в исходный код, но не требуются для компиляции исходника.