Задача проекта
Цель ролика – создать простую игру под названием «Дедукция». Игроку предоставляется 10 шансов, чтобы угадать последовательность. После каждого варианта игроку выдается результат угадывания.
Подход
Игра начинается с создания произвольной последовательности из пяти цветов, которая хранится компьютером в тайне до конца игры.
При каждой попытке игроку предоставляется пять новых пустых мест, которые нужно заполнить. В дополнение к ним справа появляется кнопка Done (Готово). На рис. 14.4 показано, что видит игрок в начале игры.
Рисунок 14.4. Игра начинается с того, что отображаются пять свободных пустых мест и кнопка Done
Игрок может щелкнуть по любому пустому месту, чтобы изменить его цвет. Цвет изменяется в соответствии с шестью вариантами: пятью различными цветами и пустым местом.
После того как игрок указал цвета для пяти мест, он может щелкнуть по кнопке Done, чтобы получить результат. Появление белого камешка свидетельствует о правильно расположенном цвете, черного – о правильном цвете, помещенном не на свое место.
Затем под имеющимся рядом отображаются следующие пять свободных мест вместе с кнопкой Done. На рис. 14.5 показано, как выглядит игра после нескольких шагов.
Рисунок 14.5. Так выглядит игровое поле после нескольких попыток пользователя
Подготовка ролика
В клипе «rock» содержится восемь кадров, первый из которых показывает пустое место. Кадры со второго по шестой отображают пять цветов, из которых должен выбрать пользователь. Седьмой и восьмой кадры отображают белые и черные камешки, имеющие метки «white» и «black» соответственно, чтобы код мог обращаться к ним.
Теперь осталось поместить на рабочее поле фон и указания. Камешки и кнопка Done создаются кодом. Для клипа "rock" установите имя ("rock") в панели Linkage Properties. Я также создал небольшую кнопку, чтобы можно было перейти внутрь клипа камешка. Кнопку "Done" создать очень просто, но так как нам нужно управлять ее положением, мы должны поместить ее внутри клипа и указать для него свойство "linkage".
Создание кода
Код игры целиком расположен в первом кадре основной временной шкалы, начинается он с установки целого набора переменных. Эти числа определяют положение различных элементов на рабочем поле при их создании. Вместо того чтобы распределять эти переменные по всему коду, я собрал их в начале программы – так их будет проще найти и изменить.
Последовательность решения задается с помощью пяти случайных чисел и хранится в массиве
solution.В переменной
rowхранится номер попытки. Для начала игры вызывается функция
createRow.
initGame();
stop();
function initGame() {
// Определяется расположение и расстояние между элементами.
topRowLoc = 60;
leftColLoc = 280;
roghtColLoc = 390;
horizSpace = 21;
vertSpace = 23;
solutionx = 336;
solutiony = 320;
// Создается произвольная последовательность решения.
solution = new Array();
for(i=0;i<5;i++) {
solution.push(int(Math.Random()*5));
}
// Инициализируются переменные.
rows = new Array();
row = 0;
// Устанавливается первый ряд.
createRow();
}
В начале каждой попытки функция createRowсоздает пять пустых мест и определяет их положение. Вдобавок устанавливается новый клип done, который располагается справа (рис. 14.4).
function createRow() {
// Создается новый ряд из пяти пустых мест.
for(i-0;i<5;i++) {
attachMovie("rock","rock"+row+"-"+i,row*10+i);
clip = _root["rock"+row+"-"+i];
clip._x = leftColLoc + i*horizSpace;
clip._y = topRowLoc + row*vertSpace;
clip.active = true;
}
// Создается кнопка Done.
attachMovie("done","done",1000);
_root.done._x = rightColLoc+20;
_root.done._y = topRowLoc + row*vertSpace;
}
Когда игрок щелкает по кнопке Done, вызывается функция doneGuess.Сначала пять кнопок в текущем ряду становятся неактивными. В функции createRowсвойству activeкаждого клипа было присвоено значение true. Теперь же этому свойству присваивается значение false (1). Код, прикрепленный к каждой кнопке, с помощью этого свойства определяет, можно ли щелкнуть по кнопке или нет.
В массиве tempсодержатся номера каждого цвета последовательности (2).Например, если даны два первых цвета, один четвертый и два пятых, массив будет выглядеть следующим образом: [2,0,0,1,2].
Следующий цикл проверяет, сколько цветов точно совпадают с предопределенным расположением (3). Если были найдены совпадения, числа в массиве tempуменьшаются. То есть теперь в этом массиве отображаются те цвета, совпадения с которыми еще надо найти.
Следующий цикл проверяет несовпавшие цвета в последовательности игрока и определяет, какие из этих цветов находятся в массиве temp (4). Подсчитав, можно выяснить, сколько цветов правильно угаданы, но помещены не на свое место.
Читать дальше
Конец ознакомительного отрывка
Купить книгу