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


Подготовка ролика В дополнение


Функция cycle является центральным моментом нашей программы. Она используется для вычисления правил применительно к каждой ячеке. Обратите внимание, что мы дублируем массив grid. Это делается для того, чтобы при изменении значения какого-нибудь элемента массива grid это не повлияло на дальнейшие вычисления на данном шаге программы. Все вычисления происходят опираясь на значения элементов массива baseGrid.

function cycle() {

// Дублируем массив grid. var baseGrid = duplicateGrid();

// Делаем проход по всем ячейкам,

for(y=0;y

for(x=0;x

thisBox = baseGrid[y][x];

mc = this["gridbox "+x+" "+y];

// Вычисляем количество "заселенных" ячеек вокруг

// данной.

n = 0;

n += baseGrid[y-1][x-1];
n += baseGrid[y-1][x];

n += baseGrid[y-1][x+1];

n += baseGrid[y][x-1];

n += baseGrid[y][x+1];

n += baseGrid[y+1][x-1];

n += baseGrid[y+1][x];

n += baseGrid[y+1][x+1];

// Если в этой ячейке уже была точка и если количество

// "жильцов" вокруг равно 2 или 3, то точка остается, .

if (thisBox) {

if ((n == 2) or (n == 3)) {

newValue = true;

} else {

newValue = false;

}


// Новая точка "рождается", если ячейка была пуста

//и если в смежных ячейках находится ровно 3 точки.

} else {

if (n == 3) {

newValue = true;

} else {

newValue = false;

}

}

// Меняем текущий кадр клипа mc.

grid[y][x] = newValue;

if (newValue) {

mc.gotoAndStop(2);

} else {

mc.gotoAndStop(1);

}

}

}

}

Функция duplicateGrid() создает копию массива grid и возвращает ее в качестве своего значения.

function duplicateGrid() {

var newGrid = new Array();

for(y=0;y

var temp = new Array();

for(x=0;x

temp.push(grid[y][x]);

}

newGrid.push(temp);

}

return(newGrid);

}

Да, но почему мы должны пользоваться функцией duplicateGrid(), вместо того чтобы просто приравнять массив baseGrid массиву grid? Потому что иначе у нас не было бы реальной копии массива. Вместо этого и grid и baseGrid ссылались бы на один и тоже массив и изменения в массиве grid появлялись бы и в массиве baseGrid.
Клип "actions" содержит обработчик onClipEvent (enterFrame), который вызывает функцию runCicle при каждом обращении к кадру. Эта функция проверяет глобальную переменную running и запускает сусle, если ее значение истинно (true).




Начало  Назад  Вперед