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.setTurretInfo((TurretInfo) data);
serverTurret.shoot(); serverTurret.shoot();
break; 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) { private void startGame(long seed) {
Util.setRandomSeed(seed);
// Reinit background with same seed on server and client.
initBackground();
terrain = new Terrain(Constants.WIDTH); 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); serverTurret.setTurretListener(serverTurretListener);
clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain); clientTurret = new Turret(Turret.CLIENT, terrain);
clientTurret.setTurretListener(clientTurretListener); clientTurret.setTurretListener(clientTurretListener);
instanceTurret = (serverInstance) ? serverTurret : clientTurret; instanceTurret = (serverInstance) ? serverTurret : clientTurret;
@ -122,12 +121,31 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
roundWinCount = 0; 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) { private void finishRound(boolean serverWinRound) {
if (serverInstance && serverWinRound) roundWinCount++; if (serverInstance && serverWinRound) roundWinCount++;
else if (!serverInstance && !serverWinRound) roundWinCount--; else if (!serverInstance && !serverWinRound) roundWinCount--;
if (roundWinCount == Constants.MAX_ROUNDS) finishGame(true); if (roundWinCount == Constants.MAX_ROUNDS) finishGame(true);
else if (roundWinCount == -Constants.MAX_ROUNDS) finishGame(false); 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) { 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() { private final Turret.TurretListener serverTurretListener = new Turret.TurretListener() {
@Override @Override
public void shootComplete(int x) { public void shootComplete(boolean hitOpponent) {
serverMove = !serverMove; serverMove = !serverMove;
if (x == -1) return; if (hitOpponent) {
final int bound = Constants.WIDTH - Constants.PLAYERS_BLOCK_COUNT;
if (x > bound) {
finishRound(serverInstance); finishRound(serverInstance);
} }
} }
@ -173,10 +189,9 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
private final Turret.TurretListener clientTurretListener = new Turret.TurretListener() { private final Turret.TurretListener clientTurretListener = new Turret.TurretListener() {
@Override @Override
public void shootComplete(int x) { public void shootComplete(boolean hitOpponent) {
serverMove = !serverMove; serverMove = !serverMove;
if (x == -1) return; if (hitOpponent) {
if (x < Constants.PLAYERS_BLOCK_COUNT) {
finishRound(!serverInstance); finishRound(!serverInstance);
} }
} }

View File

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