Игра "Жизнь"
Да, но почему мы должны пользоваться функцией 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" откроет вам множество страниц с самыми разнообразными конфигурациями.
Другие возможности
Дополнительно вы можете добавить в игру кнопки для загрузки каких-то уже существующих колоний. Это избавит вас от необходимости каждый раз создавать их заново.
