refactoring in SiedlerGame.java and Player.java

This commit is contained in:
schrom01
2021-12-07 10:59:02 +01:00
parent 8052ac97ff
commit da6913d997
2 changed files with 82 additions and 81 deletions
+19 -73
View File
@@ -10,6 +10,7 @@ public class Player {
private Config.Faction faction;
private HashMap<Config.Resource,Integer> resources;
private HashMap<Config.Structure,Integer> structureToUse;
private int roadsToUse;
private int settlementsToUse;
private int citiesToUse;
@@ -17,9 +18,11 @@ public class Player {
public Player (Config.Faction faction){
//Datenfelder
this.faction = faction;
roadsToUse = Config.Structure.ROAD.getStockPerPlayer();
settlementsToUse = Config.Structure.SETTLEMENT.getStockPerPlayer();
citiesToUse = Config.Structure.CITY.getStockPerPlayer();
//Verfügbare Structures initialisieren
structureToUse = new HashMap<>();
structureToUse.put(Config.Structure.ROAD, Config.Structure.ROAD.getStockPerPlayer());
structureToUse.put(Config.Structure.SETTLEMENT, Config.Structure.SETTLEMENT.getStockPerPlayer());
structureToUse.put(Config.Structure.CITY, Config.Structure.CITY.getStockPerPlayer());
//Ressourcen initialisiern
resources = new HashMap<>();
for(Config.Resource resource : Config.Resource.values()) {
@@ -54,85 +57,42 @@ public class Player {
* @param resource to add
* @param numberToAdd how much to add
*/
public boolean addResource(Config.Resource resource, int numberToAdd, Bank bank) {
if(bank.getResourceFromBank(resource, numberToAdd)){
resources.put(resource, resources.get(resource) + numberToAdd);
return true;
}
return false;
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
* @param numberToSubstract 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, Bank bank) {
public boolean substractResource(Config.Resource resource, int numberToSubstract) {
int inPossesion = resources.get(resource);
if(inPossesion - numberToTake < 0) {
if(inPossesion - numberToSubstract < 0) {
return false;
}
resources.put(resource,inPossesion - numberToTake);
ArrayList<Config.Resource> resourcesForBank = new ArrayList<>();
for(int i = 0; i < numberToTake; i++){
resourcesForBank.add(resource);
}
bank.storeResourceToBank(resourcesForBank);
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(Bank bank) {
List<Config.Resource> costs = Config.Structure.ROAD.getCosts();
if ( roadsToUse == 0 || !checkRessourceToBuild(costs)) {
return false;
}
for (Config.Resource resource : costs) {
substractResource(resource, 1, bank);
}
resources.put(resource,inPossesion - numberToSubstract);
return true;
}
//todo java doc aktualisieren
/**
* 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(Bank bank) {
List<Config.Resource> costs = Config.Structure.SETTLEMENT.getCosts();
if ( settlementsToUse == 0 || !checkRessourceToBuild(costs)) {
public boolean build(Config.Structure structure){
List<Config.Resource> costs = structure.getCosts();
if(structureToUse.get(structure) < 1 || !checkRessourceToBuild(costs)){
return false;
}
for (Config.Resource resource : costs) {
substractResource(resource, 1, bank);
}
structureToUse.put(structure, structureToUse.get(structure) - 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(Bank bank) {
List<Config.Resource> costs = Config.Structure.CITY.getCosts();
if ( citiesToUse == 0 || !checkRessourceToBuild(costs)){
return false;
}
for (Config.Resource resource : costs){
substractResource(resource, 1, bank);
}
return true;
}
//returns true if player has enough resources else false
private boolean checkRessourceToBuild(List<Config.Resource> liste) {
@@ -145,20 +105,6 @@ public class Player {
return true;
}
public void handleDiceThrow7(Bank bank) {
ArrayList<Config.Resource> resourceArrayList = new ArrayList<>();
for(Config.Resource resource : resources.keySet()){
for(int i = 0; i < resources.get(resource); i++) {
resourceArrayList.add(resource);
}
}
if(resourceArrayList.size() > 7){
int resourcesToRemove =resourceArrayList.size() - (resourceArrayList.size() / 2);
Random random = new Random();
for(int i = 0; i < resourcesToRemove; i++){
substractResource(resourceArrayList.remove(random.nextInt(resourceArrayList.size())), 1, bank);
}
}
}
}