
-----------------------------------
jusher
Wed Feb 02, 2011 11:38 am

Help with my snake game!
-----------------------------------
HI! i need help with some problems im facing in creating a snake game! i cant figure out how to make the snake eat the bad food properly. For example, when I eat the powerup, the minusPower(bad food) appears and successfully ends my life after i eat it. but the problem is that, when i eat another powerup, the first minusPower that appear becomes ineffective and only the latest minusPower that appears work. my teacher asks me to use an array but i do not know how. please help ): i need to know how to do it asap. 

Heres my code:

package {
	import flash.display.*;
	import flash.events.*;

	public class drugGame extends MovieClip {
		private var score,life:Number;
		private var dirX,dirY:Number;
		private var left,right,up,down:Boolean;
		private var snakeBody:Array;
		private var mcPowerUp:PowerUp;
		private var mcMinusPower:minusPower;

		public function Snake() {

		}

		public function startGame() {
			score=0;
			life=3;
			dirX=1;
			dirY=0;

			snakeBody = new Array();
			snakeBody.push(mcPlayer);
			addEventListener(Event.ENTER_FRAME,update);
			stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
			stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
		}

		private function keyDownHandler(evt:KeyboardEvent) {
			if (evt.keyCode==37) {
				left=true;

			} else if (evt.keyCode==39) {
				right=true;

			} else if (evt.keyCode==38) {
				up=true;

			} else if (evt.keyCode==40) {
				down=true;
			}

		}

		private function keyUpHandler(evt:KeyboardEvent) {
			if (evt.keyCode==37) {
				left=false;

			} else if (evt.keyCode==39) {
				right=false;

			} else if (evt.keyCode==38) {
				up=false;

			} else if (evt.keyCode==40) {
				down=false;
			}

		}

		public function update(evt:Event) {
			//This is the game loop
			//Handle user input
			if (left) {
				dirX=-1;
			} else if (right) {
				dirX=1;
			} else if (up) {
				dirY=-1;
			} else if (down) {
				dirY=1;
			}


			//Handle game logic
			//snake is moving up or down then player puch left arrow
			if (left&&(dirX!=1)) {
				dirX=-1;
				dirY=0;
			} else if (right&&(dirX!=-1)) {
				dirX=1;
				dirY=0;
			} else if (up&&(dirY!=1)) {
				dirY=-1;
				dirX=0;
			} else if (down&&(dirY!=-1)) {
				dirY=1;
				dirX=0;
			}
			//Update the Snake
			if (snakeBody.length>1) {
				for (var i = snakeBody.length-1; i>=1; i--) {
					snakeBody[i].x=snakeBody[i-1].x;
					snakeBody[i].y=snakeBody[i-1].y;
				}

			}

			//Move the Snake Head
			if (dirX>0) {
				mcPlayer.x+=5;
			} else if (dirX < 0) {
				mcPlayer.x-=5;
			} else if (dirY > 0) {
				mcPlayer.y+=5;
			} else if (dirY < 0) {
				mcPlayer.y-=5;
			}
			//Add new PowerUps
			if (mcPowerUp==null) {
				//create powerup
				mcPowerUp = new PowerUp();
				mcPowerUp.x=Math.random()*480+ 20;
				mcPowerUp.y=Math.random()*330+ 60;
				addChild(mcPowerUp);
			}

			//Check for collisions between Snake and its body and walls
			//top,right,left,bottom walls
			//top
			if (mcPlayer.ystage.stageHeight) {
				collided();
			}
			//left
			if (mcPlayer.xstage.stageWidth) {
				collided();
			}
			//collision with own body
			for (var j = snakeBody.length - 1; j>= 1; j--) {
				if ((mcPlayer.x == snakeBody[j].x) &&
				  (mcPlayer.y == snakeBody[j].y)) {
					collided();
					break;
				}
			}


			//check for game over


			//Check for collisions between PowerUp and Snake


			if (mcPowerUp!=null) {
				if (mcPlayer.hitTestObject(mcPowerUp)) {
					//add score
					score+=10;

					removeChild(mcPowerUp);
					mcPowerUp=null;


					if(score % 20 == 0){//Pill appears after every 20 points
					mcMinusPower = new minusPower();
					mcMinusPower.x=Math.random()*480+20;
					mcMinusPower.y=Math.random()*330+60;
					addChild(mcMinusPower);
					}
					/*for (var k = mcMinusPower.length; k>= 1; k--) {
						if ((mcPlayer.x == mcMinusPower[k].x) &&
						  (mcPlayer.y == mcMinusPower[k].y)) {
							collided();
							break;
						}
					}*/

					var newBody = new Player();
					newBody.x=snakeBody[snakeBody.length-1].x;
					newBody.y=snakeBody[snakeBody.length-1].y;
					snakeBody.push(newBody);
					addChild(newBody);
				}
			}

			/*if(mcMinusPower!=null){
			if(mcPlayer.hitTestObject(mcMinusPower)){
			collided();
			}
			}*/
			//Check for Game Over

			if (life==0) {
				gameOver();
			}//Handle display
			txtScore.text=String(score);
			txtLife.text=String(life);




		}//end of update

		private function collided() {

			life-=1;
			if (life>0) {
				resetGame();
			}

		}

		private function resetGame() {
			mcPlayer.x=275;
			mcPlayer.y=200;

			for (var i = snakeBody.length - 1; i >= 1; i--) {
				removeChild(snakeBody[i]);
			}
			removeChild(mcMinusPower);

			snakeBody = new Array();
			snakeBody.push(mcPlayer);
		}

		private function gameOver() {
			removeEventListener(Event.ENTER_FRAME,update);
			stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
			stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
		}

	}//end class
}//end package
