jusher
|
Posted: 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 |
|
|