Computer Science Canada Help with my snake game! |
Author: | jusher [ Wed Feb 02, 2011 11:38 am ] |
Post subject: | 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.y<50) { collided(); } //bottom if (mcPlayer.y>stage.stageHeight) { collided(); } //left if (mcPlayer.x<0) { collided(); } //right if (mcPlayer.x>stage.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 |