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.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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user