Upload New File
This commit is contained in:
parent
9f62d1bccc
commit
64db36e17a
1 changed files with 86 additions and 0 deletions
86
Projektgruppe_175/src/game/goals/PopulationGoal.java
Normal file
86
Projektgruppe_175/src/game/goals/PopulationGoal.java
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
package game.goals;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import game.Game;
|
||||||
|
import game.Goal;
|
||||||
|
import game.Player;
|
||||||
|
import game.map.Castle;
|
||||||
|
|
||||||
|
public class PopulationGoal extends Goal {
|
||||||
|
|
||||||
|
private int populationNeeded = 10;
|
||||||
|
private int castlesNeeded = 5;
|
||||||
|
|
||||||
|
public PopulationGoal() {
|
||||||
|
super("Bevölkerung", "Derjenige Spieler gewinnt, der als erstes jeweils 10 Truppen auf 5 Burgen bringt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCompleted() {
|
||||||
|
return this.getWinner() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Player getWinner() {
|
||||||
|
Game game = this.getGame();
|
||||||
|
|
||||||
|
if(game.getRound() < 2)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
|
||||||
|
// Ansonsten: Bevölkerung zählen
|
||||||
|
|
||||||
|
int numberOfHighPopulationCastles = 0;
|
||||||
|
|
||||||
|
List<Player> highPopulationPlayers = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Player p : game.getPlayers()) {
|
||||||
|
for(Castle c : p.getCastles(game)) {
|
||||||
|
if(c.getTroopCount() >= populationNeeded) {
|
||||||
|
numberOfHighPopulationCastles++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(numberOfHighPopulationCastles >= castlesNeeded) {
|
||||||
|
highPopulationPlayers.add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
numberOfHighPopulationCastles = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(highPopulationPlayers.size() == 1) {
|
||||||
|
return highPopulationPlayers.get(0);
|
||||||
|
} else if(highPopulationPlayers.size() > 1) {
|
||||||
|
// Spieler mit insgesamt größter Bevölkerung gewinnt
|
||||||
|
|
||||||
|
Comparator<Player> comp = new Comparator<Player>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compare(Player o1, Player o2) {
|
||||||
|
return Integer.compare(o1.getNumRegions(game), o2.getNumRegions(game));
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return Collections.max(highPopulationPlayers, comp);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ansonsten... gewinnt noch kein spieler.
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasLost(Player player) {
|
||||||
|
if(getGame().getRound() < 2)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return player.getNumRegions(getGame()) == 0 || (this.isCompleted() && !player.equals(this.getWinner()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue