gruppe06-hufflepuff-projekt.../src/ch/zhaw/catan/Player.java

139 lines
4.8 KiB
Java

package ch.zhaw.catan;
import java.util.HashMap;
import java.util.List;
/**
* New Class PLayer
* This class is here to add players to the game.
*/
public class Player {
private Config.Faction faction;
private HashMap<Config.Resource,Integer> resources;
private int roadsToUse;
private int settlementsToUse;
private int citiesToUse;
public Player (Config.Faction faction){
//Datenfelder
this.faction = faction;
roadsToUse = Config.Structure.ROAD.getStockPerPlayer();
settlementsToUse = Config.Structure.SETTLEMENT.getStockPerPlayer();
//Ressourcen initialisiern
resources = new HashMap<>();
for(Config.Resource resource : Config.Resource.values()) {
resources.put(resource,0);
}
}
/**
* This method returns all the resources the player has at the moment
* @return HashMap with the count of every resource
*/
public HashMap<Config.Resource,Integer> getResources() {
return resources;
}
/**
* This method returns player faction
* @return
*/
public Config.Faction getFaction() { return faction; }
/**
* This method returns for specific resource how much player possesess.
* @param resource
* @return
*/
public int getSpecificResource(Config.Resource resource) { return resources.get(resource); }
/**
* This method adds a specific resource to resourcess
* @param resource to add
* @param numberToAdd how much to add
*/
public void addResource(Config.Resource resource, int numberToAdd) {
resources.put(resource, resources.get(resource) + numberToAdd);
}
/**
* This method substracts a specific resource from resourcess but check first if player has enough resources.
* @param resource to substract
* @param numberToTake how much to substract
* @return true if resource has been substracted false if player has not enough resources
*/
public boolean substractResource(Config.Resource resource, int numberToTake) {
int inPossesion = resources.get(resource);
if(inPossesion - numberToTake < 0) {
return false;
}
resources.put(resource,inPossesion - numberToTake);
return true;
}
/**
* This method has to be used when a player wants to build a road. It checks if a player has enough roads
* and resources to build one more. If player is able to build, the method substract the buildcost from the resources
* in possesion by the player.
* @return true if road can be created false if road can't be created
*/
public boolean buildRoad() {
List<Config.Resource> costs = Config.Structure.ROAD.getCosts();
if ( roadsToUse == 0 || !checkRessourceToBuild(costs)) {
return false;
}
for (Config.Resource resource : costs) {
resources.put(resource,resources.get(resource)-1);
}
return true;
}
/**
* This method has to be used when a player wants to build a settlement. It checks if a player has enough roads
* and resources to build one more. If the player is able to build, this method subtracts the buildcost from the resources
* in possession by the player.
* @return true if road can be created false if road can't be created.
*/
public boolean buildSettlement() {
List<Config.Resource> costs = Config.Structure.SETTLEMENT.getCosts();
if ( settlementsToUse == 0 || !checkRessourceToBuild(costs)) {
return false;
}
for (Config.Resource resource : costs) {
resources.put(resource,resources.get(resource)-1);
}
return true;
}
/**
* This method has to be used when a player wants to build a city. It checks if a player already has a settlement
* on that position and if he has enough resource to build one. If the player is able to build, this method subtracts
* the buildcost from the resources in possession by the player.
* @return true if road can be created false if road can't be created.
*/
public boolean buildCity() {
List<Config.Resource> costs = Config.Structure.CITY.getCosts();
if ( citiesToUse == 0 || !checkRessourceToBuild(costs)){
return false;
}
for (Config.Resource resource : costs){
resources.put(resource,resources.get(resource)-1);
}
return true;
}
//returns true if player has enough resources else false
private boolean checkRessourceToBuild(List<Config.Resource> liste) {
for (Config.Resource resource : liste) {
int possesion = resources.get(resource);
if (possesion == 0) {
return false;
}
}
return true;
}
}