From d6f949a99ae68fe503d55a2716aded97faa17068 Mon Sep 17 00:00:00 2001 From: Andrew Melton Date: Thu, 12 Apr 2012 18:58:00 -0400 Subject: [PATCH] More accurate ZombieMoves --- src/com/vulcastudios/TestGame.java | 2 +- src/com/vulcastudios/actors/Player.java | 2 +- src/com/vulcastudios/actors/Zombie.java | 97 +++++++++++++-------- src/com/vulcastudios/actors/ZombieMove.java | 25 ++++++ 4 files changed, 86 insertions(+), 40 deletions(-) diff --git a/src/com/vulcastudios/TestGame.java b/src/com/vulcastudios/TestGame.java index a9f14e2..58e8f09 100644 --- a/src/com/vulcastudios/TestGame.java +++ b/src/com/vulcastudios/TestGame.java @@ -170,7 +170,7 @@ public boolean checkCollision(Steam s){ boolean playerCol = p.getBounds().intersects(s.getBounds()); if(playerCol){ p.setAlive(false); - ZombieMove move = new ZombieMove(); + ZombieMove move = new ZombieMove(1); if(p.getXPos() > s.getX()) move.addLeft(); if(p.getXPos() < s.getX()) diff --git a/src/com/vulcastudios/actors/Player.java b/src/com/vulcastudios/actors/Player.java index cdb5ba9..d595705 100644 --- a/src/com/vulcastudios/actors/Player.java +++ b/src/com/vulcastudios/actors/Player.java @@ -49,7 +49,7 @@ public void update(GameContainer container, StateBasedGame game, int delta){ float oldX = this.getXPos(); float oldY = this.getYPos(); - ZombieMove move = new ZombieMove(); + ZombieMove move = new ZombieMove(delta); // Handle player movement // Vertical diff --git a/src/com/vulcastudios/actors/Zombie.java b/src/com/vulcastudios/actors/Zombie.java index adcfbad..d1c9829 100644 --- a/src/com/vulcastudios/actors/Zombie.java +++ b/src/com/vulcastudios/actors/Zombie.java @@ -19,17 +19,17 @@ public class Zombie{ private static final int HEIGHT = 20; private float xPos = 0; private float yPos = 0; - + private float xPosStart = 0; private float yPosStart = 0; private Button onButton = null; private Image image = null; - + private ResourceManager rm; private LinkedList movementMap; private LinkedList movementMapMaster; - + public Zombie(ResourceManager rm, int xPos, int yPos, LinkedList moveMap){ this.rm = rm; this.xPos = xPos; @@ -39,53 +39,74 @@ public Zombie(ResourceManager rm, int xPos, int yPos, LinkedList mov this.movementMapMaster = moveMap; this.movementMap = (LinkedList)moveMap.clone(); } - + public void restartZombie(){ this.setXPos(this.xPosStart); this.setYPos(this.yPosStart); this.movementMap = (LinkedList)this.movementMapMaster.clone(); } - + public void update(GameContainer container, StateBasedGame game, int delta){ float oldX = this.getXPos(); float oldY = this.getYPos(); - - if(!movementMap.isEmpty()){ - ZombieMove move = movementMap.pop(); - - // Vertical - if(move.isUp()){ - this.setYPos(getYPos() - (Player.DELTA_Y * delta)); - } - if(move.isDown()){ - this.setYPos(getYPos() + (Player.DELTA_Y * delta)); - } - if(((TestGame)game).checkCollision(this)){ - this.setYPos(oldY); - } - - // Horizontal - if(move.isLeft()){ - this.setXPos(getXPos() - (Player.DELTA_X * delta)); - } - if(move.isRight()){ - this.setXPos(getXPos() + (Player.DELTA_Y * delta)); - } - - if(((TestGame)game).checkCollision(this)){ - this.setXPos(oldX); + + int usedDelta = 0; + while(usedDelta < delta){ + if(!movementMap.isEmpty()){ + ZombieMove move = movementMap.pop(); + + int moveDelta = move.getDelta(); + if(moveDelta > (delta-usedDelta)){ + ZombieMove newMove = move.clone(); + newMove.setDelta(moveDelta - (delta-usedDelta)); + movementMap.push(newMove); + moveDelta = (delta-usedDelta); + } + usedDelta += moveDelta; + + // Vertical + if(move.isUp()){ + this.setYPos(getYPos() - (Player.DELTA_Y * moveDelta)); + } + if(move.isDown()){ + this.setYPos(getYPos() + (Player.DELTA_Y * moveDelta)); + } + + if(((TestGame)game).checkCollision(this)){ + this.setYPos(oldY); + } + + // Horizontal + if(move.isLeft()){ + this.setXPos(getXPos() - (Player.DELTA_X * moveDelta)); + } + if(move.isRight()){ + this.setXPos(getXPos() + (Player.DELTA_Y * moveDelta)); + } + + if(((TestGame)game).checkCollision(this)){ + this.setXPos(oldX); + } + + }else{ + break; } - + } + + + + + } - + public void render(GameContainer container, Graphics g){ g.setColor(Color.green); //g.drawRect(this.getXPos(), this.getYPos(), WIDTH, HEIGHT); g.drawImage(this.getImage(), this.getXPos(), this.getYPos()); } - + public float getXPos() { return xPos; } @@ -101,11 +122,11 @@ public float getYPos() { public void setYPos(float yPos) { this.yPos = yPos; } - + public Rectangle getBounds(){ return new Rectangle(this.getXPos(), this.getYPos(), Zombie.WIDTH, Zombie.HEIGHT); } - + public void setOnButton(Button b){ if(b == null){ this.onButton = null; @@ -117,12 +138,12 @@ public void setOnButton(Button b){ this.rm.getSound("menu_button").play(); } } - + public Image getImage(){ if(this.image == null) this.image = this.rm.getImage("zombie").getScaledCopy(Zombie.WIDTH, Zombie.HEIGHT); return this.image; - + } - + } diff --git a/src/com/vulcastudios/actors/ZombieMove.java b/src/com/vulcastudios/actors/ZombieMove.java index 20b8ef2..6ddf0e1 100644 --- a/src/com/vulcastudios/actors/ZombieMove.java +++ b/src/com/vulcastudios/actors/ZombieMove.java @@ -5,6 +5,11 @@ public class ZombieMove { private boolean down = false; private boolean left = false; private boolean right = false; + private int delta; + + public ZombieMove(int delta){ + this.setDelta(delta); + } public boolean isRight() { @@ -54,4 +59,24 @@ public void addLeft(){ public void noLeft(){ left = false; } + + + public int getDelta() { + return delta; + } + + public void setDelta(int delta) { + this.delta = delta; + } + + @Override + public ZombieMove clone(){ + ZombieMove clone = new ZombieMove(this.delta); + clone.down = this.down; + clone.up = this.up; + clone.left = this.left; + clone.right = this.right; + return clone; + + } }