Показать сообщение отдельно
Старый 27.11.2012, 18:23
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 29  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
По умолчанию Новые проблемы

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

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)


Последний раз редактировалось Котяра; 29.12.2012 в 21:12.