Kodomo

Пользователь

Термины

Правила игры

Игра состоит из последовательности ходов. В каждый ход, каждая змея делает Допустимый Ход, или не делает ничего, в случае отсутствия Допустимых Ходов. Перемещение змеи определяются последовательностью правил, следующим образом:

  1. По очереди проводятся попытки применить правила, до первого успеха
  2. Каждое правило применяется во всех направлениях, которые приводят к Допустимому Ходу, в произвольном порядке
  3. В отсутствие применимых Правил, змея делает произвольный Допустимый Ход.

Правило представляет собой образец поля 7х7 клеток с желаемым направлением движения. Клетки образца могут иметь типы: Своя Голова, Свое Туловище, Свой Хвост, Голова Врага, Туловище Врага, Хвост Врага, Пустота, Стена, Любая Клетка. Правило сравнивается с текущим состоянием Поля вокруг Головы Змеи. В случае, если текущее состояние удовлетворяет правилу, Змея движется в направлении, указанном в правиле.

В начале игры все змеи обладают Длиной 10. На Игровом Поле не может одновременно находиться более 4-х змей.

Игра заканчивается в случае если для всех змей кроме одной Длина = 0 или с начала игры прошло 200 ходов.

Цель для каждой Змеи – закончить игру с максимальным количеством клеток в Туловище.

Цель

Создать программу, реализующую описанную игру.

Правила для Змеи можно загружать из файла.

Программа должна иметь графический интерфейс.

Формат Файла Описания Змеи

Файл начинается с "snake" за которым следует ИМЯ_ЗМЕИ

В любой строке // и все, что после них – игнорируются

Правило предствляет собой 7 строк по 7 символов за которыми идет ;, за которой могут идти пробелы и комментарии.

Правила должны быть разделены одной или более пустых строк (или строк с комментариями)

Синтаксис Правил:

Файл должен заканчиваться строкой end

snake Name
// - все что после - игнорируется, является комментарием
  #H   ; //- что-угодно 
  #B   ;
  #T   ; //- Гоняется за змеями СТРОГО длины 3, и ТОЛЬКО вдоль стен.
  #h   ;
  #b   ;
  #b   ;
       ;
end

Интерфейс

Графический интерфейс представляет собой окно произвольного размера. В верхней части окна располагается изображение Игрового Поля, а в нижней кнопки управления.

Изображение Игрового Поля

Изображение Игрового Поля представляет собой поле из 21х21 ячеек. Периметр представляет из себя 1 слой серых ячеек изображающих Стены. Остальные 19х19 отражают текущее расположение Змей на Игровом Поле. Каждая Змея представлена своим цветом (красным, желтым, синим и зеленым). Изображение головы: круг соответствующего цвета на черном фоне. Изображение туловища - квадрат соответствующего цвета. Изображение хвоста - треугольник на черном фоне, обращенный основанием в сторону предыдущей клетки змеи. Изображение Пустоты - черный квадрат.

Кнопки Управления

Кнопки управления делятся на две группы: кнопки загрузки змеи и кнопки управления просмотром.

До начала игры в ответ на нажатие кнопки загрузки Змеи будет выброшено окно, в которое можно вести путь до Файла Описания Змеи. В случае если файл удовлетворяет Формату Описания - змея будет загружена: ее изображение появится посередине соответствующей стороны, Хвостом к стороне, головой в центр Игрового Поля (см. рисунок). Первая кнопка соответствует северной стороне (синяя Змея); Вторая - восточной (зеленая Змея); Третья - южной (желтая Змея); четвертая - западной (красная Змея). Во время игры нажатие этих кнопок ничего не значит. После окончания игры нажатие одной из этих кнопок сбрасывает состояние Игровог Поля на момент окончания игры, возвращая пустое Поле. Затем происходит то же, что происходило в случае до начала игры.

Кнопки управления просмотром: Run и Step.

Нажатие кнопки Run запускает Ходы игры последовательно с интервалом в 300 мс. Кнопка Step – делает следующий Ход игры с последующей остановкой игры.

---------------------------------------------------------------------[_][ ][X]-
|+---------------------------------------------------------------------------+|
|| Игровое поле                       *                                      ||
||                                    *                                      ||
||                                    *                                      ||
||                                    *                                      ||
||                                    *                                      ||
||                                                                           ||
||********************                                   ********************||
||                                                                           ||
||                                    *                                      ||
||                                    *                                      ||
||                                    *                                      ||
||                                    *                                      ||
||                                    *                                      ||
|+---------------------------------------------------------------------------+|
|+----------------------------++---------------------------++----------------+|
|| Load snake 1               || Load snake 2              || Run            ||
|+----------------------------++---------------------------++----------------+|
|+----------------------------++---------------------------++----------------+|
|| Load snake 3               || Load snake 4              || Step           ||
|+----------------------------++---------------------------++----------------+|
-------------------------------------------------------------------------------

Пользовательские качества программы

Для корректной работы программы необходим интерпретатор Python.

Программистские качества программы

Вся документация должна быть представлена в виде самодокументрации.

Документация должна представлять собой описания классов и функций на английском языке. Для классов должно быть описание того, за выполнение каких операций и над чем ответственен данный класс. Для функций - описание операции, выполняемой функцией.

Код должен быть написан, согласно стандартам PEP-8. Также при описании функций внутри класса, первой всегда должны идти функция __init__, в случае, если она есть.

Ошибки