Столкнулся с новой проблемой, а именно с механикой самой игры. Может кто помочь?
Нужно изменить код, ибо "клетки" ведут себя нелогично
main

Код AS3:
package {
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import flash.utils.Timer;
//@author I'm
public class Main extends MovieClip{
private var CellSize:int = 10; //DEFAULT CELL SIZE
private var CellPad:int = 40; //DEFAULT CELL PAD
private var _max:int; //FOR MASSIVE SIZE
private var mamaDefault:Array = new Array(); //DEFAULT MASSIVE
private var mamaLoad:Array = new Array(); //FOR LOAD FUNCTION MASSIVE
private var timeM:Timer;
public function Main() {
// constructor code
var _grid:Grid = new Grid(CellSize, CellPad); //ADD GRID
addChild(_grid);
_max = CellPad - 1;
creatLive();
timeM = new Timer( 200 );
timeM.addEventListener(TimerEvent.TIMER, timerListener);
timeM.start();
}
//CREAT MASSIVES & ADD CELL's
private function creatLive():void{
var i:int;
var j:int;
for(i = 0; i < _max; i++){
mamaDefault[i] = new Array();
mamaLoad[i] = new Array();
for(j = 0; j < _max; j++){
var decisive:Number = Math.random();
var _cell:Cell = new Cell(CellSize);
_cell.x = i * CellSize; //TAKE CELL POSITION
_cell.y = j * CellSize;
if( decisive > 0.9 ){
Cell(_cell).setState(1);
} else {
Cell(_cell).setState(0);
}
mamaDefault[i][j] = _cell;
mamaLoad[i][j] = Cell(_cell).getState();
addChild(_cell);
}
}
}
//TIME SHIFT MANAGER
private function timerListener(e:TimerEvent):void{
checkLiveAround();
}
//CHECK AROUND STATUS AND WRITE IT ON MASSIVE 2 (mamaLoad)
private function checkLiveAround():void{
var i1:int;
var i2:int;
var bros:int = 0; //POINT OF LIVE AROUND
var _min:int = _max - 1; //NUMBER, FOR CHECK BORDER
//trace(CellPad, _max, _min);
//START CHECK MASSIVE
for(i1 = 0; i1 < _max; i1++){
for(i2 = 0; i2 < _max; i2++){
// North
if ( i2 > 0 )
if ( mamaDefault[i1][i2-1]._state > 0.4 ) bros++;
// North East
if ( i1 < _min && i2 > 0 )
if ( mamaDefault[i1+1][i2-1]._state > 0.4 ) bros++;
// North West
if ( i1 > 0 && i2 > 0 )
if ( mamaDefault[i1-1][i2-1]._state > 0.4 ) bros++;
// South
if ( i2 < _min )
if ( mamaDefault[i1][i2+1]._state > 0.4 ) bros++;
// South East
if ( i1 < _min && i2 < _min )
if ( mamaDefault[i1+1][i2+1]._state > 0.4 ) bros++;
// South West
if ( i1 > 0 && i2 < _min )
if ( mamaDefault[i1-1][i2+1]._state > 0.4 ) bros++;
// East
if ( i1 < _min )
if ( mamaDefault[i1+1][i2]._state > 0.4 ) bros++;
// West
if ( i1 > 0 )
if ( mamaDefault[i1-1][i2]._state > 0.4 ) bros++;
/*
DO NEW MASSIVE WITH PARAMETERS OF NEW LIVE
==========================================
2 or 3 = alive
> 3 or < 2 = dead
==========================================
*/
if( bros == 3 || bros == 2){
mamaLoad[i1][i2] = 1;
} else if( bros > 3 || bros < 2){
mamaLoad[i1][i2] = 0;
}
if( mamaDefault[i1][i2]._state > 0.4 && bros == 3 ){
mamaLoad[i1][i2] = 0.5;
}
bros = 0;
}
}
unWriteMassive1();
//END CHECK MASSIVE
}
//FUNCTION TO UNWRITE FIRST MASSIVE (mamaDefault)
private function unWriteMassive1():void{
var i1:int;
var i2:int;
for(i1 = 0; i1 < _max; i1++){
for(i2 = 0; i2 < _max; i2++){
Cell(mamaDefault[i1][i2]).setState(mamaLoad[i1][i2]);
}
}
//trace("Complete rewrite");
}
}
}
Cell

Код AS3:
package {
import flash.display.*;
import flash.events.*;
import flash.ui.*;
public class Cell extends Sprite{
private var _size:int = 10;
public var _state:Number = 1; //THIS ALPHA
public var ok:Boolean = false; //Alive STATUS
private var gra:Shape = new Shape();
public function Cell(size:int) {
// constructor code
_size = size;
gra.graphics.beginFill(0x000000,1);
gra.graphics.drawRect( 0, 0, _size, _size);
gra.graphics.endFill();
gra.addEventListener(Event.ENTER_FRAME, checkState);
addChild(gra);
}
//LISTENER OF GRA
private function checkState(e:Event):void{
this.alpha = _state;
}
//TAKE STATE
public function setState(stateHere:Number):void{
_state = stateHere;
}
//GET STATE
public function getState():Number{
return _state;
}
}
}
Нелогичное движение ии в приложенных файлах (.swf)