Player.java
package org.microcol.model;
import java.util.List;
import java.util.Map;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
public class Player {
private Model model;
private final String name;
private final boolean computer;
Player(final String name, final boolean computer) {
this.name = Preconditions.checkNotNull(name);
this.computer = computer;
}
void setModel(final Model model) {
this.model = Preconditions.checkNotNull(model);
}
public String getName() {
return name;
}
public boolean isComputer() {
return computer;
}
public boolean isHuman() {
return !computer;
}
public List<Ship> getShips() {
return model.getShips(this);
}
public Map<Location, List<Ship>> getShipsAt() {
return model.getShipsAt(this);
}
public List<Ship> getShipsAt(final Location location) {
return model.getShipsAt(this, location);
}
public List<Ship> getEnemyShips() {
return model.getEnemyShips(this);
}
public Map<Location, List<Ship>> getEnemyShipsAt() {
return model.getEnemyShipsAt(this);
}
public List<Ship> getEnemyShipsAt(final Location location) {
return model.getEnemyShipsAt(this, location);
}
void startTurn() {
getShips().forEach(ship -> ship.startTurn());
}
public void endTurn() {
model.checkGameActive();
model.checkCurrentPlayer(this);
model.endTurn();
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object object) {
if (object == null) {
return false;
}
if (!(object instanceof Player)) {
return false;
}
Player player = (Player) object;
return name.equals(player.name);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("name", name)
.add("computer", computer)
.toString();
}
}