Рисунок 14.7. Наиболее распространенная конфигурация доски с колышками. Вы можете создать свой вариант
Хороший игрок может выиграть, если у него останется только один колышек. При быстрой игре, без раздумий, может остаться примерно от 8 до 12 колышков.
Задача проекта
Цель проекта – создать компьютерный вариант игры «Йога» (рис. 14.7). Игрок щелкает мышкой и перемещает колышки. Неверный ход сделать нельзя, а правильный автоматически удаляет элемент, через который «перепрыгнули».
Подход
Вся игра происходит в одном кадре. Сначала на рабочем поле нет никаких элементов.
Отверстия и колышки – отдельные клипы, они помещаются на рабочее поле с помощью кода, что избавляет вас от необходимости размещать каждый клип и присваивать ему имя. Вместо вас всю работу выполнит программа.
Когда игрок перетаскивает колышек в новое отверстие, код проверяет, какой ход был сделан: верный или ошибочный. Во-первых, пользователь должен переставить колышек на пустое место, через одно отверстие от текущего. Затем необходимо, чтобы в отверстии, через которое "перепрыгивает" игрок, находился колышек. Если ход удовлетворяет этим условиям, он считается верным. Колышек, через который "перепрыгнули", удаляется с доски.
Подготовка ролика
Для игры требуется всего два клипа: «peg» и «hole». В клипе «peg» должна быть расположена кнопка, которая сообщает основной временной шкале о щелчке мышью (пользователь нажимает и отпускает ее кнопку).
Так как перед началом ролика на рабочем поле нет ни одного клипа, им необходимо назначить свойства связи. Код обращается к ним по именам "peg" и "hole".
Создание кода
Почти весь код находится в одном кадре основной временной шкале. Он начинается с создания экземпляров клипов «peg» и «hole» и их размещения на рабочем поле. С помощью оператора if создаются необходимые для игры отверстия. Также код проверяет, во все ли отверстия, кроме одного в центре, вставлены колышки.
В конце функции переменной
maxHoleприсваивается значение, равное количеству всех отверстиях. Эта переменная будет использоваться в тех функциях, где необходимо выяснить, все ли клипы удовлетворяют определенным условиям.
initGame();
stop();
function initGame() {
// Определяем постоянное расположение клипов.
holeSpace = 30;
puzzleLeft = 160;
puzzleTop = 80;
// Просматриваем все отверстия и создаем в них колышки.
i = 0;
for(y=0;y<9;y++) {
for (x=0;x<9;x++) {
// Проверяем, должен ли быть создан колышек.
// Если да, создаем его.
if (((y < 3) or (y > 5)) and ((x < 3) or (x > 5))) continue
// Добавляем и размещаем новое отверстие.
attachMovie("hole", "hole"+i, i);
_root["hole"+i]._x = x*holeSpace + puzzleLeft;
_root["hole"+i]._y = y*holeSpace + puzzleTop;
// Не добавляем колышек в центральное отверстие.
if ((x != 4) or (y != 4)) {
// Добавляем и размещаем
// новое отверстие.
attachMovie("peg","peg"+i,100+i);
_root["peg"+i]._x = x*holaSpace + puzzleLeft;
_root["peg"+i]._y = y*holaSpace + puzzleTop;
}
i++;
}
}
// Запоминаем количество колышков.
maxHole = i;
}
Когда игрок щелкает по колышку, на самом деле он щелкает по кнопке, расположенной внутри клипа. Оба действия, «press» и «release», передаются функциям в основной временной шкале. Функция dragPegвызывается действием «press». Эта функция сохраняет положение колышка в переменных pegxи pegy,а затем разрешает перемещать колышек. Также она использует функцию swapDepths, чтобы колышек отображался поверх всех остальных.
function dragPeg(peg) {
// Запоминаем исходное положение колышка.
pegx = peg._x;
pegy = peg._y;
// Размещаем колышек поверх остальных.
peg.swapDepths(2000);
// Разрешаем программе Flash перемещать клип.
startDrag(peg, true);
}
Функция dropDragвызывается тогда, когда игрок отпускает кнопку мыши при перетаскивании. Сначала клип прекращает перемещение (8). Затем с помощью функции dropDragвыясняется, находится ли какое-нибудь отверстие под курсором (9).
Если курсор мыши расположен над дыркой, следующий шаг – определить, пустое ли отверстие или нет (10). Затем код проверяет отверстия во всех четырех направлениях, чтобы выяснить, из какой дырки мог быть перемещен колышек. Для определения относительного положения отверстия используются переменные dxи dy (11). Например, если игрок перемещает колышек вправо. dx присваивается 1, а dy– 0. Если вверх, то dyбудет равняться -1, а dx– 0. Если отверстие, куда игрок перемещает колышек, не расположено через одну дырку вправо, влево, вверх или вниз, значения dxи dyстановятся равными 0 (12).
Читать дальше
Конец ознакомительного отрывка
Купить книгу