Игра "Жизнь"
Да, но почему мы должны пользоваться функцией duplicateGrid(), вместо того чтобы просто приравнять массив baseGrid массиву grid? Потому что иначе у нас не было бы реальной копии массива. Вместо этого и grid и baseGrid ссылались бы на один и тоже массив и изменения в массиве grid появлялись бы и в массиве baseGrid.
Клип "actions" содержит обработчик onClipEvent (enterFrame), который вызывает функцию runCicle при каждом обращении к кадру. Эта функция проверяет глобальную переменную running и запускает сусle, если ее значение истинно (true).
function
runCycle() {
if
(running) {
cycle();
}
}
Рассмотрим теперь сценарии кнопок. Каждая кнопка содержит обработчик вида on (release), который вызывает одну из следующих функций. Первая (кнопка Run) задает глобальной переменной running значение true:
function
startCycle() {
running
=
true
;
}
Если же пользователь нажмет кнопку Step, то функция cycle будет вызвана лишь один раз и переменная running не изменит своего значения.
function
stepCycle() {
cycle();
}
При нажатии кнопки Stop переменной running присваивается значение false.
function
stopCycle() {
running
=
false
;
}
И наконец, нажатие кнопки Clear очищает массив grid и все ячейки сетки:
function
clear() {
for
(y
=
0
; y
<
15
; y
+
+
) {
for
(x
=
0
; x
<
25
; x
+
+
) {
grid[y][x]
=
0
;
this
[
"gridbox "
+
x
+
" "
+
y].gotoAndStop(
1
);
}
}
running
=
false
;
}
Осталось только рассмотреть код, который находится на кнопке внутри каждого клипа-ячейки. Этот сценарий определяет состояние ячейки. В функции creatGrid мы определили переменные х и у для каждого клипа. Это позволяет установить соответствие между ячейками и элементами массива и вносить изменения в массив при изменении состояния ячейки.
on
(release) {
if
(_currentframe
=
=
1
) {
gotoAndStop(
2
);
_parent.grid[y][x]
=
true
;
}
else
{
gotoAndStop(
1
);
_parent.grid[y][x]
=
false
;
}
}
К сведению
Кроме рассмотренных функций в сценарии кадра имеется код, вызывающий функцию creatGrid, и команда stop (). Возможна также другая реализация. Дело в том, что игра нуждается в получении определенных данных для запуска. Ведь если вы нажмете кнопку Run при пустом игровом поле, то ничего не произойдет. Поиграйте с колонией, изображенной на рис 6.15. Ее называют "маленький взрыв". Программисты, впервые реализовавшие игру "Жизнь", придумали имена некоторым таким "цивилизациям".
Попробуйте создать свои колонии или поищите в Интернете уже существующие. Поиск по ключу "game of life" откроет вам множество страниц с самыми разнообразными конфигурациями.
Другие возможности
Дополнительно вы можете добавить в игру кнопки для загрузки каких-то уже существующих колоний. Это избавит вас от необходимости каждый раз создавать их заново.