1
0

Add rounds support

This commit is contained in:
Victor 2014-03-16 19:12:19 +02:00
parent 11931d3059
commit 1f65dc6dbd
2 changed files with 47 additions and 22 deletions

View File

@ -74,6 +74,9 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
serverTurret.setTurretInfo((TurretInfo) data);
serverTurret.shoot();
break;
case ON_NEW_ROUND:
newRound((long) data);
break;
}
}
@ -103,16 +106,12 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
}
private void startGame(long seed) {
Util.setRandomSeed(seed);
// Reinit background with same seed on server and client.
initBackground();
terrain = new Terrain(Constants.WIDTH);
terrain.generate();
newRound(seed);
serverTurret = new Turret(Turret.SERVER, terrain.getFirstBlockHeight(), terrain);
serverTurret = new Turret(Turret.SERVER, terrain);
serverTurret.setTurretListener(serverTurretListener);
clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain);
clientTurret = new Turret(Turret.CLIENT, terrain);
clientTurret.setTurretListener(clientTurretListener);
instanceTurret = (serverInstance) ? serverTurret : clientTurret;
@ -122,12 +121,31 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
roundWinCount = 0;
}
private void newRound(long seed) {
Util.setRandomSeed(seed);
// Reinit background with same seed on server and client.
initBackground();
terrain.generate();
if (gameStarted) {
serverTurret.reinit();
clientTurret.reinit();
}
}
private void finishRound(boolean serverWinRound) {
if (serverInstance && serverWinRound) roundWinCount++;
else if (!serverInstance && !serverWinRound) roundWinCount--;
if (roundWinCount == Constants.MAX_ROUNDS) finishGame(true);
else if (roundWinCount == -Constants.MAX_ROUNDS) finishGame(false);
else {
if (serverInstance) {
long seed = System.currentTimeMillis();
socketHelper.sendNewRoundSeed(seed);
newRound(seed);
}
}
}
private void finishGame(boolean instanceWin) {
@ -160,11 +178,9 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
private final Turret.TurretListener serverTurretListener = new Turret.TurretListener() {
@Override
public void shootComplete(int x) {
public void shootComplete(boolean hitOpponent) {
serverMove = !serverMove;
if (x == -1) return;
final int bound = Constants.WIDTH - Constants.PLAYERS_BLOCK_COUNT;
if (x > bound) {
if (hitOpponent) {
finishRound(serverInstance);
}
}
@ -173,10 +189,9 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
private final Turret.TurretListener clientTurretListener = new Turret.TurretListener() {
@Override
public void shootComplete(int x) {
public void shootComplete(boolean hitOpponent) {
serverMove = !serverMove;
if (x == -1) return;
if (x < Constants.PLAYERS_BLOCK_COUNT) {
if (hitOpponent) {
finishRound(!serverInstance);
}
}

View File

@ -17,7 +17,8 @@ public class Turret implements Constants {
private static final int TURRET_HEIGHT = PLAYERS_BLOCK_COUNT + 1;
// Parameters
private final int turretX, turretY;
private final int turretX;
private int turretY;
private final int barrelRadius;
private final boolean server;
private int barrelX, barrelY;
@ -30,16 +31,22 @@ public class Turret implements Constants {
private final Terrain terrain; // TODO GameInfo
private TurretListener listener;
public Turret(boolean server, int turretY, Terrain terrain) {
public Turret(boolean server, Terrain terrain) {
this.server = server;
this.turretX = (server ? 5 : Constants.WIDTH - 5);
this.turretY = turretY;
this.terrain = terrain;
barrelRadius = Constants.WIDTH / 20;
shootInfo = new ShootInfo();
reinit();
}
public final void reinit() {
barrelAngle = ANGLE_45;
shotPower = 0.5d;
barrelRadius = Constants.WIDTH / 20;
shootState = false;
shootInfo = new ShootInfo();
if (server) turretY = terrain.getFirstBlockHeight();
else turretY = terrain.getLastBlockHeight();
shootInfo.reset();
calculateBarrelPosition();
}
@ -58,11 +65,14 @@ public class Turret implements Constants {
shootInfo.draw(g);
if (shootInfo.isOver()) {
shootState = false;
if (listener != null) listener.shootComplete(-1);
if (listener != null) listener.shootComplete(false);
} else if (shootInfo.isCollideOpponent(server, terrain)) {
shootState = false;
if (listener != null) listener.shootComplete(true);
} else if (shootInfo.isCollideTerrain(terrain)) {
shootState = false;
terrain.destroyTerrain((int) shootInfo.x);
if (listener != null) listener.shootComplete((int) shootInfo.x);
if (listener != null) listener.shootComplete(false);
}
}
if (DEBUG_MODE) {
@ -139,6 +149,6 @@ public class Turret implements Constants {
}
public interface TurretListener {
void shootComplete(int x);
void shootComplete(boolean hitOpponent);
}
}