Пример 5

Игра Lines (Линии)

В этом примере мы покажем применение событийно-ориентированного программирования (см.предыдущий пример) для создание аналога некогда популярной игры Lines. Цель игры - выстроить в линию (вертикальную, горизонтальную или наискосок) не менее 4-х шариков. Для перемещения шарика с одной клетки на другую нужно кликнуть мышкой по шарику, а затем по пустой клетке. После перемещения одного шарика в случайном порядке появляется три новых. Игра заканчивается, когда не остается пустых клеток.

игра Линии

Здесь мы отступим от традиции поэтапного написания скрипта. Приведём сразу готовый скрипт (см. Graphics_Game_Lines.txt) и дадим пояснения к нему. Переменная h позволяет задавать размер поля. В нашем примере поле будет иметь размер 6 Х 6

h=6

Массив COLORS хранит возможные цвета шариков

array COLORS[5]float = (clGreen, clRed, clBlue, clYellow, clGray)

В массиве field хранятся целые числа от 0 до 5, соответствующие цветам шариков в клетках; 0 соответствует пустой клетке. Цифра от 1 до 5 соответствуют цветам от зелёного до серого.
Функция addRandomBalls(_count) добавляет шарики в пустые клетки; _count - количество добавляемых шариков. Следующая строка задает размер области, чувствительной к клику мышки, и определяет имя функции MouseClick, которая срабатывает по клику.

Define_Mouse_Click_Handler(Array4(0,0,h,h),'MouseClick')

Переменные _x и _y - целые числа - координаты клетки, по которой произведен клик.
Переменная mode имеет значение 0 при клике по шарику, который нужно переместить, и имеет значение 1 при клике по клетке, в которую шарик будет перемещён.

Функция RemoveLine(_min, _count, _deltaX, _deltaY) удаляет шарики, выстроенные в ряд. Массив _min содержит координаты x,y крайнего шарика в линии; _count - количество шариков в линии. Переменные _deltaX, _deltaY задают направление линии удаляемых шариков, например, (1,1) означает направление вниз и вправо.
Функция TestPoint(_x, _y) производит проверку на наличие собранной линии по 4-м возможным направлениям из клетки (_x, _y) и удалает собранную линию, если таковая обнаруживается.
Функция checkDirection(_x, _y, _deltaX, _deltaY) производит проверку на наличие собранной линии из клетки (_x, _y) в направлении (_deltaX, _deltaY).
Функция TestEmptySquare() возвращает количество пустых клеток на всём поле.
Функция DrawCircle(_x, _y, _color) рисует шарик указанного цвета в указанной клетке.
Функция DrawSquare(_x,_y) рисует одну пустую клетку с указанными координатами.

Полный скрипт этого примера смотрите в файле …Vasilisa\Scripts\Graphics_Game_Lines.txt. Возможно этот пример вдохновит вас на создание собственных игрушек.