From 78ce0e43bc460932f8b037f114d6e8cbd15c2271 Mon Sep 17 00:00:00 2001 From: Leonardo Brandenberger Date: Thu, 9 Dec 2021 16:11:17 +0100 Subject: [PATCH 1/2] Minor Grammar and Cameltow fixes --- src/ch/zhaw/catan/Field.java | 2 +- src/ch/zhaw/catan/Parser.java | 4 +- src/ch/zhaw/catan/Player.java | 12 ++-- src/ch/zhaw/catan/Road.java | 2 +- src/ch/zhaw/catan/Settlement.java | 4 +- src/ch/zhaw/catan/Siedler.java | 22 +++---- src/ch/zhaw/catan/SiedlerBoard.java | 13 +++-- src/ch/zhaw/catan/SiedlerBoardTextView.java | 5 +- src/ch/zhaw/catan/SiedlerGame.java | 63 +++++++++++---------- 9 files changed, 64 insertions(+), 63 deletions(-) diff --git a/src/ch/zhaw/catan/Field.java b/src/ch/zhaw/catan/Field.java index 1da46c7..05e99c7 100644 --- a/src/ch/zhaw/catan/Field.java +++ b/src/ch/zhaw/catan/Field.java @@ -5,7 +5,7 @@ import ch.zhaw.hexboard.Label; public class Field { private Config.Land land; - private Label label; + private final Label label; public Field(Config.Land land, Label label){ this.land = land; diff --git a/src/ch/zhaw/catan/Parser.java b/src/ch/zhaw/catan/Parser.java index b572dd2..be0d42c 100644 --- a/src/ch/zhaw/catan/Parser.java +++ b/src/ch/zhaw/catan/Parser.java @@ -4,11 +4,9 @@ import org.beryx.textio.TextIO; import org.beryx.textio.TextIoFactory; import org.beryx.textio.TextTerminal; -import java.awt.*; +import java.awt.Point; import java.util.HashMap; -import static ch.zhaw.catan.Command.*; - /** * This class performs all communication with the player, includes asking for input and showing the map. * diff --git a/src/ch/zhaw/catan/Player.java b/src/ch/zhaw/catan/Player.java index 5b3b5cf..9a34453 100644 --- a/src/ch/zhaw/catan/Player.java +++ b/src/ch/zhaw/catan/Player.java @@ -2,7 +2,7 @@ package ch.zhaw.catan; import java.util.HashMap; import java.util.List; - +//TODO Java Doc bearbeiten /** * New Class PLayer * This class is here in order to maintain the resources of the players, the amount of structures that they can build, @@ -10,9 +10,9 @@ import java.util.List; */ public class Player { - private Config.Faction faction; - private HashMap resources; - private HashMap structureToUse; + private final Config.Faction faction; + private final HashMap resources; + private final HashMap structureToUse; /** * The constructor creates a new instance of the player class that initializes the Hashmap resources and structureToUse. @@ -63,7 +63,7 @@ public class Player { } /** - * This method adds a specific resource to resourcess + * This method adds a specific resource to resources * * @param resource to add * @param numberToAdd how much to add @@ -90,7 +90,7 @@ public class Player { /** * This method has to be used when a player wants to build a structure. It checks if a player has enough of the specific structure - * and resources to build one more. If the player is able to build, this method subtracts the buildcost from the resources + * and resources to build one more. If the player is able to build, this method subtracts the building cost from the resources * in possession by the player. * It reduces the amount of the specific structure a player can build by 1. * @return true if the structure can be created false if the structure can't be created. diff --git a/src/ch/zhaw/catan/Road.java b/src/ch/zhaw/catan/Road.java index e43a6a7..2375c74 100644 --- a/src/ch/zhaw/catan/Road.java +++ b/src/ch/zhaw/catan/Road.java @@ -1,7 +1,7 @@ package ch.zhaw.catan; import java.awt.Point; - +/// TODO: 09/12/2021 Java Doc public class Road extends Structure { private final Point start,end; diff --git a/src/ch/zhaw/catan/Settlement.java b/src/ch/zhaw/catan/Settlement.java index b10595d..47f8398 100644 --- a/src/ch/zhaw/catan/Settlement.java +++ b/src/ch/zhaw/catan/Settlement.java @@ -1,7 +1,7 @@ package ch.zhaw.catan; -import java.awt.*; - +import java.awt.Point; +//TODO Java Doc public class Settlement extends Structure { private Point position; diff --git a/src/ch/zhaw/catan/Siedler.java b/src/ch/zhaw/catan/Siedler.java index a90d452..1eeea7e 100644 --- a/src/ch/zhaw/catan/Siedler.java +++ b/src/ch/zhaw/catan/Siedler.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.Random; /** - * This Class manages the game process and contains the Main Method wich creates and starts a new Parser and a new Game. + * This Class manages the game process and contains the Main Method which creates and starts a new Parser and a new Game. */ public class Siedler { /** @@ -20,7 +20,7 @@ public class Siedler { /** * The Method for the usual game Process. It contains the Main loop to get new commands from the players and calls the associated methods. * @param parser The Parser Object which will interact with the player. - * @param game The Game object which is already created and has the foundig phase completed. + * @param game The Game object which is already created and has the founding phase completed. */ private static void gamePhase(Parser parser, SiedlerGame game) { boolean running = true; @@ -33,7 +33,7 @@ public class Siedler { throwDice(parser, game); diceThrown = true; } - parser.displayPlayerInfo(game.getCurrentPlayerResource(), game.getCurrentPlayerWinpoints()); + parser.displayPlayerInfo(game.getCurrentPlayerResource(), game.getCurrentPlayerWinPoints()); switch (parser.getAction()) { case NEXTPLAYER: if(caseNextPlayer(parser, game)){ @@ -145,7 +145,7 @@ public class Siedler { } } - //each Player bilds their second Settlement and second Road and gets a Payout for these Structures in usual order. + //each Player builds their second Settlement and second Road and gets a Payout for these Structures in usual order. for(int player = 1; player <= gameInfo.get("NumberOfPlayers"); player++){ buildStructuresInFoundingPhase(parser, game, true); game.switchToNextPlayer(); @@ -157,7 +157,7 @@ public class Siedler { * The Method is called by foundingPhase. It prompts the Player to build a Settlement and a Road. * @param parser The parser Object which will interact with the player. * @param game The game Object which will be used to execute the Method. - * @param payout true (for second Settlement in founding Phase): the Player gets a payout for the settlment. false (for first Settlement in founding Phase): The Player gets no payout. + * @param payout true (for second Settlement in founding Phase): the Player gets a payout for the settlement. false (for first Settlement in founding Phase): The Player gets no payout. */ private static void buildStructuresInFoundingPhase(Parser parser, SiedlerGame game, Boolean payout){ parser.displayGameboard(game.getBoard().getTextView()); @@ -165,27 +165,27 @@ public class Siedler { //build Settlement parser.giveCoordinatesForStructures(Config.Structure.SETTLEMENT); - boolean sucessful = false; + boolean successful = false; do{ if(game.placeInitialSettlement(parser.getPoint(), payout)) { - sucessful = true; + successful = true; } else{ parser.errorMessage(); } - } while(!sucessful); + } while(!successful); //build Road parser.displayGameboard(game.getBoard().getTextView()); parser.giveCoordinatesForStructures(Config.Structure.ROAD); - sucessful = false; + successful = false; do{ if(game.placeInitialRoad(parser.getPoint(), parser.getPoint())) { - sucessful = true; + successful = true; } else{ parser.errorMessage(); } - } while(!sucessful); + } while(!successful); } } diff --git a/src/ch/zhaw/catan/SiedlerBoard.java b/src/ch/zhaw/catan/SiedlerBoard.java index 96399e9..fe5176a 100644 --- a/src/ch/zhaw/catan/SiedlerBoard.java +++ b/src/ch/zhaw/catan/SiedlerBoard.java @@ -6,16 +6,17 @@ import ch.zhaw.hexboard.Label; import java.awt.Point; import java.util.*; - +//TODO Enhance JavaDoc /** * Subclass of HexBoard - * Saves the fields wich are set and handels Methods with specific Dice Numbers + * Saves the fields which are set and handles Methods with specific Dice Numbers. */ public class SiedlerBoard extends HexBoard { /** * HashMap to save all Fields which are set yet. * Key: Point with coordinates of the field + * //TODO Enhance JavaDoc * Value: Field Object */ HashMap fields = new HashMap<>(); @@ -81,13 +82,13 @@ public class SiedlerBoard extends HexBoard { } /** - * Method to get the Resources which are payed to a specific faction for a specific field. + * Method to get the Resources which are paid to a specific faction for a specific field. * * @param point The Point with the Coordinates of the field, which should pay resources. - * @param faction The faction, which should get paied. - * @return a ArrayList with all resources, which will be paied to the specified faction. + * @param faction The faction, which should get paid. + * @return a ArrayList with all resources, which will be paid to the specified faction. */ - public ArrayList getResourcesforFaction(Point point, Config.Faction faction){ + public ArrayList getResourcesForFaction(Point point, Config.Faction faction){ List possibleSettlementField = super.getCornersOfField(point); ArrayList resourcesToPlayer = new ArrayList<>(); for (Settlement settlement : possibleSettlementField) { diff --git a/src/ch/zhaw/catan/SiedlerBoardTextView.java b/src/ch/zhaw/catan/SiedlerBoardTextView.java index ce2ca66..157e4f9 100644 --- a/src/ch/zhaw/catan/SiedlerBoardTextView.java +++ b/src/ch/zhaw/catan/SiedlerBoardTextView.java @@ -2,11 +2,8 @@ package ch.zhaw.catan; import ch.zhaw.catan.Config.Land; import ch.zhaw.hexboard.HexBoardTextView; -import ch.zhaw.hexboard.Label; - -import java.awt.*; -import java.util.Set; +//TODO Java Docs public class SiedlerBoardTextView extends HexBoardTextView { public SiedlerBoardTextView(SiedlerBoard board) { diff --git a/src/ch/zhaw/catan/SiedlerGame.java b/src/ch/zhaw/catan/SiedlerGame.java index bac67c5..bfcb020 100644 --- a/src/ch/zhaw/catan/SiedlerGame.java +++ b/src/ch/zhaw/catan/SiedlerGame.java @@ -3,9 +3,14 @@ package ch.zhaw.catan; import ch.zhaw.catan.Config.Faction; import ch.zhaw.catan.Config.Resource; -import java.awt.*; -import java.util.*; +import java.awt.Point; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; import java.util.List; +import java.util.Random; +import java.util.Iterator; +import java.util.HashSet; /** @@ -77,7 +82,7 @@ public class SiedlerGame { activePlayer = allPlayers.size()-1; } } - + //TODO JavaDoc private boolean addResourcesToPlayer(Player player, Resource resource, int numberToAdd){ if(bank.getResourceFromBank(resource, numberToAdd)){ player.addResource(resource, numberToAdd); @@ -85,10 +90,10 @@ public class SiedlerGame { } return false; } - - private boolean substractResourceFromPlayer(Player player, Resource resource, int numberToSubstract){ - if(player.substractResource(resource, numberToSubstract)){ - bank.storeResourceToBank(resource, numberToSubstract); + //TODO JavaDoc + private boolean subtractResourceFromPlayer(Player player, Resource resource, int numberToSubtract){ + if(player.substractResource(resource, numberToSubtract)){ + bank.storeResourceToBank(resource, numberToSubtract); return true; } return false; @@ -212,21 +217,21 @@ public class SiedlerGame { * cards of a certain type (relevant if there are not enough left in the bank). *

* - * @param dicethrow the resource cards that have been distributed to the players + * @param diceThrow the resource cards that have been distributed to the players * @return the resource cards added to the stock of the different players */ - public Map> throwDice(int dicethrow) { - if (dicethrow == 7) { + public Map> throwDice(int diceThrow) { + if (diceThrow == 7) { for(Player player : allPlayers) { handleDiceThrow7(player); } } else { Map> returnMap= new HashMap<>(); - List diceValueFields = board.getFieldsForDiceValue(dicethrow); + List diceValueFields = board.getFieldsForDiceValue(diceThrow); for (Player player : allPlayers) { returnMap.put(player.getFaction(), new ArrayList<>()); for (Point field : diceValueFields) { - List resources = board.getResourcesforFaction(field,player.getFaction()); + List resources = board.getResourcesForFaction(field,player.getFaction()); for (Config.Resource resource : resources){ returnMap.get(player.getFaction()).add(resource); addResourcesToPlayer(player, resource, 1); @@ -237,7 +242,7 @@ public class SiedlerGame { } return null; } - + //TODO JavaDoc public void handleDiceThrow7(Player player) { ArrayList resourceArrayList = new ArrayList<>(); HashMap resources = player.getResources(); @@ -250,7 +255,7 @@ public class SiedlerGame { int resourcesToRemove =resourceArrayList.size() - (resourceArrayList.size() / 2); Random random = new Random(); for(int i = 0; i < resourcesToRemove; i++){ - substractResourceFromPlayer(player, resourceArrayList.remove(random.nextInt(resourceArrayList.size())), 1); + subtractResourceFromPlayer(player, resourceArrayList.remove(random.nextInt(resourceArrayList.size())), 1); } } } @@ -286,7 +291,7 @@ public class SiedlerGame { List costs = Config.Structure.SETTLEMENT.getCosts(); for (Config.Resource resource : costs) { - substractResourceFromPlayer(allPlayers.get(activePlayer), resource, 1); + subtractResourceFromPlayer(allPlayers.get(activePlayer), resource, 1); } //4. Insert Settlement to map @@ -324,7 +329,7 @@ public class SiedlerGame { List costs = Config.Structure.CITY.getCosts(); for (Config.Resource resource : costs) { - substractResourceFromPlayer(allPlayers.get(activePlayer), resource, 1); + subtractResourceFromPlayer(allPlayers.get(activePlayer), resource, 1); } //4.Insert City into the map. @@ -359,7 +364,7 @@ public class SiedlerGame { List costs = Config.Structure.ROAD.getCosts(); for (Config.Resource resource : costs) { - substractResourceFromPlayer(allPlayers.get(activePlayer), resource, 1); + subtractResourceFromPlayer(allPlayers.get(activePlayer), resource, 1); } //3. Insert Road to map @@ -371,19 +376,19 @@ public class SiedlerGame { /** * This Method is used to check if the chosen position for a road is valid or not. * @param roadStart the coordinates where the road begins. - * @param roadEnd the coordinates where the roads ends. + * @param roadEnd the coordinates where the road ends. * @return true if road position is valid otherwise false */ private boolean validPositionForRoad(Point roadStart, Point roadEnd){ - //1. Check if Edge + //1. Check if it is an edge if (!board.hasEdge(roadStart, roadEnd)) { return false; } - //2. Check if Edge is empty + //2. Check if edge is empty if (board.getEdge(roadStart, roadEnd) != null) { return false; } - //3. Check if NeighbourEdge are Roads + //3. Check if neighbouring edges are roads boolean hasNeighbourRoad = (checkAdjacentEdgesList(roadStart) || checkAdjacentEdgesList(roadEnd)); if(hasNeighbourRoad) { return true; @@ -399,7 +404,7 @@ public class SiedlerGame { * @return true if valid position for settlement */ private boolean validPositionForSettlement(Point position){ - //1. Check if Corner + //1. Check if corner if (!board.hasCorner(position)) { return false; } @@ -407,11 +412,11 @@ public class SiedlerGame { if(checkIfWater(position)) { return false; } - //3. Check if Corner is empty + //3. Check if corner is empty if(board.getCorner(position) != null) { return false; } - //3. Check if neighbourCorners are empty + //3. Check if neighbouring corners are empty return checkAdjacentCornerList(position); } @@ -464,7 +469,7 @@ public class SiedlerGame { public boolean tradeWithBankFourToOne(Resource offer, Resource want) { Player player = allPlayers.get(activePlayer); if(player.getSpecificResource(offer) >= FOUR_TO_ONE_TRADE_OFFER && addResourcesToPlayer(player, want, FOUR_TO_ONE_TRADE_WANT)){ - substractResourceFromPlayer(player, offer, FOUR_TO_ONE_TRADE_OFFER); + subtractResourceFromPlayer(player, offer, FOUR_TO_ONE_TRADE_OFFER); return true; } return false; @@ -476,13 +481,13 @@ public class SiedlerGame { * @return the winner of the game or null, if there is no winner (yet) */ public Faction getWinner() { - if(getCurrentPlayerWinpoints() >= winPointsForWin){ + if(getCurrentPlayerWinPoints() >= winPointsForWin){ return getCurrentPlayerFaction(); } return null; } - - public int getCurrentPlayerWinpoints(){ + //Todo Java Doc + public int getCurrentPlayerWinPoints(){ int winPoints = 0; List settlements = board.getCorners(); for(Structure structure : settlements) { @@ -515,7 +520,7 @@ public class SiedlerGame { * placed there (e.g., on water) */ public boolean placeThiefAndStealCard(Point field) { - //TODO: Implement (or longest road functionality) + // Implemented longest road. return false; } From f0e8e20511e3441cd4c01de9f6a81af151b028f8 Mon Sep 17 00:00:00 2001 From: Speedy Gonzalez Date: Thu, 9 Dec 2021 16:12:57 +0100 Subject: [PATCH 2/2] First comand of the readme of Siedler of catan has been written. --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index c754a74..a33f4b7 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,35 @@ at random. For a more detailed version of the rules please look here: https://www.catan.de/sites/prod/files/2021-06/CATAN_DasSpiel_Spielregel.pdf #Usermanual +First the program will ask how many players will be playing the game. The minimum +amount of players is 2 and the maximum amount of players is 4. Each player will +be appointed to a faction. Now every player can build a settlement and a road +after every player has built a settlement and road, they can build a second +settlement and road in reversed order. When the players build their second +settlement they then receive the resources surrounding that specific settlement. +Now that the setup is complete the player that placed the last settlement will +begin. After the players have rolled the dice the resources connected to the +number that the player rolled with the dice. + +Now as for the commands a player has to put in while it's their turn: +#Build Settlement +When it's the players turn, they can build a new settlement by giving the command +build settlement. with that they will be asked where they want to build said settlement +and the program will check if those coordinates are available or not. Then the +program will subtract the resources needed to build a settlement. If the player has +insufficient resources the settlement will not be built and an error message will +appear. The turn of the current player will continue until the player ends it. + +#Build City +During the players turn they can build a city on the same coordinates that they +have already built a settlement on. To do that they have to enter the command +build city. Then they have to add the coordinates that they want the city to be +built at. If the coordinates are available and the settlement at that coordinate is +of the same faction as the player then the city can be built there. The program +will then check if the player has sufficient resources to build the city, then +the program will subtract them of the players resources, otherwise the city won't +be build and the player continues their turn until they end it. + +#Build Road +build road