package gameengine;
import PBFT.PBFTCohort;
import com.google.common.collect.Lists;
import config.GroupMember;
import java.util.Collections;
import java.util.List;
import java.util.Set;
/**
* Created by andrew on 11/30/14.
*/
public class ChineseCheckersState {
private ChineseCheckersBoard board;
private final List<Player> players;
private int currentPlayerIndex;
/**
* Constructs the state for a fresh chinese checkers game
* @param players
*/
public ChineseCheckersState(List<Player> players) {
while(players.size() < 6) players.add(Player.makeInactivePlayer());
this.board = new ChineseCheckersBoard(players);
this.players = players;
currentPlayerIndex = 0;
}
/**
* Designed for entering an in-progress game
* @param board
* @param players
* @param currentPlayerIndex
*/
public ChineseCheckersState(ChineseCheckersBoard board, List<Player> players, int currentPlayerIndex) {
this.board = board;
this.players = players;
this.currentPlayerIndex = currentPlayerIndex;
}
public ChineseCheckersSpot getSpot(HexPoint pt) { return this.board.getSpot(pt); }
// public List<MovePiece> getAvailableMovesForCurrentPlayer
public Player getCurrentPlayer() {
return players.get(currentPlayerIndex);
}
public void nextActivePlayer() {
// Will infinite loop if all players inactive
do {
this.currentPlayerIndex = (this.currentPlayerIndex + 1) % this.players.size();
} while(!this.players.get(this.currentPlayerIndex).isActive());
}
public void prevActivePlayer() {
// Will infinite loop if all players inactive
do {
this.currentPlayerIndex = (this.currentPlayerIndex - 1) % this.players.size();
} while(!this.players.get(this.currentPlayerIndex).isActive());
}
public static ChineseCheckersState buildGameForGroupMembers(Set<GroupMember<PBFTCohort.Client>> groupMembers) {
List<Player> players = Lists.newArrayList();
for (GroupMember member: groupMembers) {
players.add(new Player(member.getName(), member.getReplicaID()));
}
Collections.sort(players);
return new ChineseCheckersState(players);
}
}