Add rounds support
This commit is contained in:
parent
11931d3059
commit
1f65dc6dbd
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user