Иллюстрированный самоучитель по созданию Flash-игр

Игра "Жизнь"

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

Другие возможности

Дополнительно вы можете добавить в игру кнопки для загрузки каких-то уже существующих колоний. Это избавит вас от необходимости каждый раз создавать их заново.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.