javass/jass/PacedPlayer.java
2019-09-30 13:12:03 +02:00

81 lines
2.0 KiB
Java

package javass.jass;
import java.util.Map;
import javass.jass.Card.Color;
import static javass.Preconditions.checkArgument;
/**
* A player that slows down the game
* @author Charles BEAUVILLE
* @author Celia HOUSSIAUX
*
*/
public final class PacedPlayer implements Player {
private final Player underlyingPlayer;
private final long minTime;
/**
* A player that slows down the game
* @param underlyingPlayer the {@link Player} associated with this {@link PacedPlayer}.
* @param minTime a double the minimum time in seconds to wait for the {@link Player}.
*/
public PacedPlayer(Player underlyingPlayer, double minTime) {
checkArgument(minTime >= 0);
this.underlyingPlayer = underlyingPlayer;
this.minTime = (long) minTime * 1000;
}
@Override
public Card cardToPlay(TurnState state, CardSet hand) {
long start = System.currentTimeMillis();
Card c = underlyingPlayer.cardToPlay(state, hand);
long end = System.currentTimeMillis();
long timeElapsed = (end - start);
if (timeElapsed >= minTime)
return c;
else
try {
Thread.sleep((minTime - timeElapsed));
} catch (InterruptedException e) {
/* ignore */ }
return c;
}
@Override
public void setPlayers(PlayerId ownId, Map<PlayerId, String> playerNames) {
underlyingPlayer.setPlayers(ownId, playerNames);
}
@Override
public void updateHand(CardSet newHand) {
underlyingPlayer.updateHand(newHand);
}
@Override
public void setTrump(Color trump) {
underlyingPlayer.setTrump(trump);
}
@Override
public void updateTrick(Trick newTrick) {
underlyingPlayer.updateTrick(newTrick);
}
@Override
public void updateScore(Score score) {
underlyingPlayer.updateScore(score);
}
@Override
public void setWinningTeam(TeamId winningTeam) {
underlyingPlayer.setWinningTeam(winningTeam);
}
}