fixed minor refactoring issues and removed import of ch.zhaw.catan in SiedlerBoard and used as package.
This commit is contained in:
parent
187302afd5
commit
afd874bafa
|
@ -2,8 +2,8 @@ package ch.zhaw.catan;
|
||||||
|
|
||||||
//TODO:JavaDoc
|
//TODO:JavaDoc
|
||||||
public enum Command {
|
public enum Command {
|
||||||
NEXTPLAYER("next player"), BUILDSETTLEMENT("build settlement"), BUILDCITY("build city"),
|
NEXT_PLAYER("next player"), BUILD_SETTLEMENT("build settlement"), BUILD_CITY("build city"),
|
||||||
BUILDROAD("build road"), TRADEWITHBANK("trade with bank"), QUIT("quit");
|
BUILD_ROAD("build road"), TRADE_WITH_BANK("trade with bank"), QUIT("quit");
|
||||||
|
|
||||||
private final String commandWord;
|
private final String commandWord;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import ch.zhaw.hexboard.Label;
|
||||||
|
|
||||||
public class Field {
|
public class Field {
|
||||||
|
|
||||||
private Config.Land land;
|
private final Config.Land land;
|
||||||
private final Label label;
|
private final Label label;
|
||||||
|
|
||||||
public Field(Config.Land land, Label label) {
|
public Field(Config.Land land, Label label) {
|
||||||
|
|
|
@ -13,8 +13,8 @@ import java.util.HashMap;
|
||||||
* @author Leonardo Brandenberger
|
* @author Leonardo Brandenberger
|
||||||
*/
|
*/
|
||||||
public class Parser {
|
public class Parser {
|
||||||
TextIO textIO;
|
private final TextIO textIO;
|
||||||
TextTerminal<?> textTerminal;
|
private final TextTerminal<?> textTerminal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a parser Object, initializes the textIO components TextTerminal and textIO.
|
* Constructs a parser Object, initializes the textIO components TextTerminal and textIO.
|
||||||
|
|
|
@ -5,7 +5,7 @@ import java.awt.*;
|
||||||
//TODO Java Doc
|
//TODO Java Doc
|
||||||
public class Settlement extends Structure {
|
public class Settlement extends Structure {
|
||||||
|
|
||||||
private Point position;
|
private final Point position;
|
||||||
|
|
||||||
public Settlement(Config.Faction faction, Point position) {
|
public Settlement(Config.Faction faction, Point position) {
|
||||||
super(faction);
|
super(faction);
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class Siedler {
|
||||||
boolean diceThrown = false;
|
boolean diceThrown = false;
|
||||||
while (running) {
|
while (running) {
|
||||||
Config.Faction currentPlayerFaction = game.getCurrentPlayerFaction();
|
Config.Faction currentPlayerFaction = game.getCurrentPlayerFaction();
|
||||||
parser.displayGameboard(game.getBoard().getTextView()); //todo jedesmal ausgeben? oder nur wenn neuer Spieler oder separater Befehl?
|
parser.displayGameboard(game.getBoard().getTextView()); //TODO Every turn or separate command?
|
||||||
parser.playerTurn(currentPlayerFaction);
|
parser.playerTurn(currentPlayerFaction);
|
||||||
if (!diceThrown) {
|
if (!diceThrown) {
|
||||||
throwDice(parser, game);
|
throwDice(parser, game);
|
||||||
|
@ -37,23 +37,23 @@ public class Siedler {
|
||||||
}
|
}
|
||||||
parser.displayPlayerInfo(game.getCurrentPlayerResource(), game.getCurrentPlayerWinPoints());
|
parser.displayPlayerInfo(game.getCurrentPlayerResource(), game.getCurrentPlayerWinPoints());
|
||||||
switch (parser.getAction()) {
|
switch (parser.getAction()) {
|
||||||
case NEXTPLAYER:
|
case NEXT_PLAYER:
|
||||||
if (caseNextPlayer(parser, game)) {
|
if (caseNextPlayer(parser, game)) {
|
||||||
running = false;
|
running = false;
|
||||||
} else {
|
} else {
|
||||||
diceThrown = false;
|
diceThrown = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BUILDSETTLEMENT:
|
case BUILD_SETTLEMENT:
|
||||||
caseBuildStructure(parser, game, Config.Structure.SETTLEMENT);
|
caseBuildStructure(parser, game, Config.Structure.SETTLEMENT);
|
||||||
break;
|
break;
|
||||||
case BUILDCITY:
|
case BUILD_CITY:
|
||||||
caseBuildStructure(parser, game, Config.Structure.CITY);
|
caseBuildStructure(parser, game, Config.Structure.CITY);
|
||||||
break;
|
break;
|
||||||
case BUILDROAD:
|
case BUILD_ROAD:
|
||||||
caseBuildStructure(parser, game, Config.Structure.ROAD);
|
caseBuildStructure(parser, game, Config.Structure.ROAD);
|
||||||
break;
|
break;
|
||||||
case TRADEWITHBANK:
|
case TRADE_WITH_BANK:
|
||||||
caseTradeWithBank(parser, game);
|
caseTradeWithBank(parser, game);
|
||||||
break;
|
break;
|
||||||
case QUIT:
|
case QUIT:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package ch.zhaw.catan;
|
package ch.zhaw.catan;
|
||||||
|
|
||||||
import ch.zhaw.catan.Config.Land;
|
|
||||||
import ch.zhaw.hexboard.HexBoard;
|
import ch.zhaw.hexboard.HexBoard;
|
||||||
import ch.zhaw.hexboard.Label;
|
import ch.zhaw.hexboard.Label;
|
||||||
|
|
||||||
|
@ -18,7 +17,7 @@ import java.util.Collections;
|
||||||
* Subclass of HexBoard
|
* Subclass of HexBoard
|
||||||
* Saves the fields which are set and handles Methods with specific Dice Numbers.
|
* Saves the fields which are set and handles Methods with specific Dice Numbers.
|
||||||
*/
|
*/
|
||||||
public class SiedlerBoard extends HexBoard<Land, Settlement, Road, String> {
|
public class SiedlerBoard extends HexBoard<Config.Land, Settlement, Road, String> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HashMap to save all Fields which are set yet.
|
* HashMap to save all Fields which are set yet.
|
||||||
|
@ -26,7 +25,7 @@ public class SiedlerBoard extends HexBoard<Land, Settlement, Road, String> {
|
||||||
* //TODO Enhance JavaDoc
|
* //TODO Enhance JavaDoc
|
||||||
* Value: Field Object
|
* Value: Field Object
|
||||||
*/
|
*/
|
||||||
HashMap<Point, Field> fields = new HashMap<>();
|
private final HashMap<Point, Field> fields = new HashMap<>();
|
||||||
Config.Faction longestRoadFaction = null;
|
Config.Faction longestRoadFaction = null;
|
||||||
int longestRoadLenth = 0;
|
int longestRoadLenth = 0;
|
||||||
|
|
||||||
|
@ -34,9 +33,9 @@ public class SiedlerBoard extends HexBoard<Land, Settlement, Road, String> {
|
||||||
* Method to create the predefined game field from Config.
|
* Method to create the predefined game field from Config.
|
||||||
*/
|
*/
|
||||||
public void createFixGameField() {
|
public void createFixGameField() {
|
||||||
Map<Point, Land> resourcePlacement = Config.getStandardLandPlacement();
|
Map<Point, Config.Land> resourcePlacement = Config.getStandardLandPlacement();
|
||||||
Map<Point, Integer> dicePlacement = Config.getStandardDiceNumberPlacement();
|
Map<Point, Integer> dicePlacement = Config.getStandardDiceNumberPlacement();
|
||||||
for (Map.Entry<Point, Land> resourceField : resourcePlacement.entrySet()) {
|
for (Map.Entry<Point, Config.Land> resourceField : resourcePlacement.entrySet()) {
|
||||||
addField(resourceField.getKey(), resourceField.getValue());
|
addField(resourceField.getKey(), resourceField.getValue());
|
||||||
if (dicePlacement.get(resourceField.getKey()) != null) {
|
if (dicePlacement.get(resourceField.getKey()) != null) {
|
||||||
String numberAsString = dicePlacement.get(resourceField.getKey()).toString();
|
String numberAsString = dicePlacement.get(resourceField.getKey()).toString();
|
||||||
|
@ -113,15 +112,15 @@ public class SiedlerBoard extends HexBoard<Land, Settlement, Road, String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link Land}s adjacent to the specified corner.
|
* Returns the {@link Config.Land}s adjacent to the specified corner.
|
||||||
*
|
*
|
||||||
* @param corner the corner
|
* @param corner the corner
|
||||||
* @return the list with the adjacent {@link Land}s
|
* @return the list with the adjacent {@link Config.Land}s
|
||||||
*/
|
*/
|
||||||
public List<Land> getLandsForCorner(Point corner) {
|
public List<Config.Land> getLandsForCorner(Point corner) {
|
||||||
Point above = new Point(corner.x, corner.y + 2);
|
Point above = new Point(corner.x, corner.y + 2);
|
||||||
Point below = new Point(corner.x, corner.y - 2);
|
Point below = new Point(corner.x, corner.y - 2);
|
||||||
Land[] lands = new Land[3];
|
Config.Land[] lands = new Config.Land[3];
|
||||||
if (hasField(above)) {
|
if (hasField(above)) {
|
||||||
lands[0] = getField(above);
|
lands[0] = getField(above);
|
||||||
lands[1] = getField(new Point(corner.x + 1, corner.y - 1));
|
lands[1] = getField(new Point(corner.x + 1, corner.y - 1));
|
||||||
|
@ -135,13 +134,11 @@ public class SiedlerBoard extends HexBoard<Land, Settlement, Road, String> {
|
||||||
}
|
}
|
||||||
return List.of(lands);
|
return List.of(lands);
|
||||||
}
|
}
|
||||||
//TODO Java Doc no return
|
//TODO Java Doc more details
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method checks for the player with the longest road according to the siedler game rules.
|
* This method checks for the player with the longest road according to the siedler game rules.
|
||||||
*
|
*
|
||||||
* @return a HashMap<Faction,Integer> where faction is the player with the longest road longer according to siedler game rules
|
|
||||||
* and the Integer representing the length of the road
|
|
||||||
*/
|
*/
|
||||||
public Config.Faction getLongestRoadFaction(List<Config.Faction> factionList) {
|
public Config.Faction getLongestRoadFaction(List<Config.Faction> factionList) {
|
||||||
List<Settlement> corners = getCorners();
|
List<Settlement> corners = getCorners();
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
package ch.zhaw.catan;
|
package ch.zhaw.catan;
|
||||||
|
|
||||||
import ch.zhaw.catan.Config.Faction;
|
|
||||||
import ch.zhaw.catan.Config.Resource;
|
|
||||||
|
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -78,7 +75,7 @@ public class SiedlerGame {
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO JavaDoc
|
//TODO JavaDoc
|
||||||
private boolean addResourcesToPlayer(Player player, Resource resource, int numberToAdd) {
|
private boolean addResourcesToPlayer(Player player, Config.Resource resource, int numberToAdd) {
|
||||||
if (bank.getResourceFromBank(resource, numberToAdd)) {
|
if (bank.getResourceFromBank(resource, numberToAdd)) {
|
||||||
player.addResource(resource, numberToAdd);
|
player.addResource(resource, numberToAdd);
|
||||||
return true;
|
return true;
|
||||||
|
@ -87,7 +84,7 @@ public class SiedlerGame {
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO JavaDoc
|
//TODO JavaDoc
|
||||||
private boolean subtractResourceFromPlayer(Player player, Resource resource, int numberToSubtract) {
|
private boolean subtractResourceFromPlayer(Player player, Config.Resource resource, int numberToSubtract) {
|
||||||
if (player.subtractResource(resource, numberToSubtract)) {
|
if (player.subtractResource(resource, numberToSubtract)) {
|
||||||
bank.storeResourceToBank(resource, numberToSubtract);
|
bank.storeResourceToBank(resource, numberToSubtract);
|
||||||
return true;
|
return true;
|
||||||
|
@ -96,7 +93,7 @@ public class SiedlerGame {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link Faction}s of the active players.
|
* Returns the {@link Config.Faction}s of the active players.
|
||||||
*
|
*
|
||||||
* <p>The order of the player's factions in the list must
|
* <p>The order of the player's factions in the list must
|
||||||
* correspond to the oder in which they play.
|
* correspond to the oder in which they play.
|
||||||
|
@ -108,8 +105,8 @@ public class SiedlerGame {
|
||||||
*
|
*
|
||||||
* @return the list with player's factions
|
* @return the list with player's factions
|
||||||
*/
|
*/
|
||||||
public List<Faction> getPlayerFactions() {
|
public List<Config.Faction> getPlayerFactions() {
|
||||||
List<Faction> factions = new ArrayList<>();
|
List<Config.Faction> factions = new ArrayList<>();
|
||||||
for (Player player : allPlayers) {
|
for (Player player : allPlayers) {
|
||||||
factions.add(player.getFaction());
|
factions.add(player.getFaction());
|
||||||
}
|
}
|
||||||
|
@ -126,11 +123,11 @@ public class SiedlerGame {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link Faction} of the current player.
|
* Returns the {@link Config.Faction} of the current player.
|
||||||
*
|
*
|
||||||
* @return the faction of the current player
|
* @return the faction of the current player
|
||||||
*/
|
*/
|
||||||
public Faction getCurrentPlayerFaction() {
|
public Config.Faction getCurrentPlayerFaction() {
|
||||||
return allPlayers.get(activePlayer).getFaction();
|
return allPlayers.get(activePlayer).getFaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,11 +138,11 @@ public class SiedlerGame {
|
||||||
* @param resource the resource type
|
* @param resource the resource type
|
||||||
* @return the number of resource cards of this type
|
* @return the number of resource cards of this type
|
||||||
*/
|
*/
|
||||||
public int getCurrentPlayerResourceStock(Resource resource) {
|
public int getCurrentPlayerResourceStock(Config.Resource resource) {
|
||||||
return allPlayers.get(activePlayer).getSpecificResource(resource);
|
return allPlayers.get(activePlayer).getSpecificResource(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HashMap<Resource, Integer> getCurrentPlayerResource() {
|
public HashMap<Config.Resource, Integer> getCurrentPlayerResource() {
|
||||||
return allPlayers.get(activePlayer).getResources();
|
return allPlayers.get(activePlayer).getResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +199,7 @@ public class SiedlerGame {
|
||||||
* {@link Config#MAX_CARDS_IN_HAND_NO_DROP} resource cards.
|
* {@link Config#MAX_CARDS_IN_HAND_NO_DROP} resource cards.
|
||||||
* <p>
|
* <p>
|
||||||
* If a player does not get resource cards, the list for this players'
|
* If a player does not get resource cards, the list for this players'
|
||||||
* {@link Faction} is <b>an empty list (not null)</b>!.
|
* {@link Config.Faction} is <b>an empty list (not null)</b>!.
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* The payout rules of the game take into account factors such as, the number
|
* The payout rules of the game take into account factors such as, the number
|
||||||
|
@ -214,18 +211,18 @@ public class SiedlerGame {
|
||||||
* @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
|
* @return the resource cards added to the stock of the different players
|
||||||
*/
|
*/
|
||||||
public Map<Faction, List<Resource>> throwDice(int diceThrow) {
|
public Map<Config.Faction, List<Config.Resource>> throwDice(int diceThrow) {
|
||||||
if (diceThrow == 7) {
|
if (diceThrow == 7) {
|
||||||
for (Player player : allPlayers) {
|
for (Player player : allPlayers) {
|
||||||
handleDiceThrow7(player);
|
handleDiceThrow7(player);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Map<Faction, List<Resource>> returnMap = new HashMap<>();
|
Map<Config.Faction, List<Config.Resource>> returnMap = new HashMap<>();
|
||||||
List<Point> diceValueFields = board.getFieldsForDiceValue(diceThrow);
|
List<Point> diceValueFields = board.getFieldsForDiceValue(diceThrow);
|
||||||
for (Player player : allPlayers) {
|
for (Player player : allPlayers) {
|
||||||
returnMap.put(player.getFaction(), new ArrayList<>());
|
returnMap.put(player.getFaction(), new ArrayList<>());
|
||||||
for (Point field : diceValueFields) {
|
for (Point field : diceValueFields) {
|
||||||
List<Resource> resources = board.getResourcesForFaction(field, player.getFaction());
|
List<Config.Resource> resources = board.getResourcesForFaction(field, player.getFaction());
|
||||||
for (Config.Resource resource : resources) {
|
for (Config.Resource resource : resources) {
|
||||||
returnMap.get(player.getFaction()).add(resource);
|
returnMap.get(player.getFaction()).add(resource);
|
||||||
addResourcesToPlayer(player, resource, 1);
|
addResourcesToPlayer(player, resource, 1);
|
||||||
|
@ -240,7 +237,7 @@ public class SiedlerGame {
|
||||||
//TODO JavaDoc
|
//TODO JavaDoc
|
||||||
public void handleDiceThrow7(Player player) {
|
public void handleDiceThrow7(Player player) {
|
||||||
ArrayList<Config.Resource> resourceArrayList = new ArrayList<>();
|
ArrayList<Config.Resource> resourceArrayList = new ArrayList<>();
|
||||||
HashMap<Resource, Integer> resources = player.getResources();
|
HashMap<Config.Resource, Integer> resources = player.getResources();
|
||||||
for (Config.Resource resource : resources.keySet()) {
|
for (Config.Resource resource : resources.keySet()) {
|
||||||
for (int i = 0; i < resources.get(resource); i++) {
|
for (int i = 0; i < resources.get(resource); i++) {
|
||||||
resourceArrayList.add(resource);
|
resourceArrayList.add(resource);
|
||||||
|
@ -379,7 +376,7 @@ public class SiedlerGame {
|
||||||
if (!board.hasEdge(roadStart, roadEnd)) {
|
if (!board.hasEdge(roadStart, roadEnd)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//2. Check if edge is empty
|
//2. Check if edge is empty //TODO Check if always inverted is allowed
|
||||||
if (board.getEdge(roadStart, roadEnd) != null) {
|
if (board.getEdge(roadStart, roadEnd) != null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -446,7 +443,7 @@ public class SiedlerGame {
|
||||||
* Checks if Adjacent Corners are empty
|
* Checks if Adjacent Corners are empty
|
||||||
*
|
*
|
||||||
* @param point Corner to check
|
* @param point Corner to check
|
||||||
* @return true if all Neighbour Corners are emtpy
|
* @return true if all Neighbour Corners are empty
|
||||||
*/
|
*/
|
||||||
private boolean checkAdjacentCornerList(Point point) {
|
private boolean checkAdjacentCornerList(Point point) {
|
||||||
List<Settlement> results = board.getNeighboursOfCorner(point);
|
List<Settlement> results = board.getNeighboursOfCorner(point);
|
||||||
|
@ -464,7 +461,7 @@ public class SiedlerGame {
|
||||||
* @param want wanted type
|
* @param want wanted type
|
||||||
* @return true, if the trade was successful
|
* @return true, if the trade was successful
|
||||||
*/
|
*/
|
||||||
public boolean tradeWithBankFourToOne(Resource offer, Resource want) {
|
public boolean tradeWithBankFourToOne(Config.Resource offer, Config.Resource want) {
|
||||||
Player player = allPlayers.get(activePlayer);
|
Player player = allPlayers.get(activePlayer);
|
||||||
if (player.getSpecificResource(offer) >= FOUR_TO_ONE_TRADE_OFFER && addResourcesToPlayer(player, want, FOUR_TO_ONE_TRADE_WANT)) {
|
if (player.getSpecificResource(offer) >= FOUR_TO_ONE_TRADE_OFFER && addResourcesToPlayer(player, want, FOUR_TO_ONE_TRADE_WANT)) {
|
||||||
subtractResourceFromPlayer(player, offer, FOUR_TO_ONE_TRADE_OFFER);
|
subtractResourceFromPlayer(player, offer, FOUR_TO_ONE_TRADE_OFFER);
|
||||||
|
@ -478,7 +475,7 @@ public class SiedlerGame {
|
||||||
*
|
*
|
||||||
* @return the winner of the game or null, if there is no winner (yet)
|
* @return the winner of the game or null, if there is no winner (yet)
|
||||||
*/
|
*/
|
||||||
public Faction getWinner() {
|
public Config.Faction getWinner() {
|
||||||
if (getCurrentPlayerWinPoints() >= winPointsForWin) {
|
if (getCurrentPlayerWinPoints() >= winPointsForWin) {
|
||||||
return getCurrentPlayerFaction();
|
return getCurrentPlayerFaction();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package ch.zhaw.catan;
|
package ch.zhaw.catan;
|
||||||
|
|
||||||
public abstract class Structure {
|
public abstract class Structure {
|
||||||
private Config.Faction faction;
|
private final Config.Faction faction;
|
||||||
|
|
||||||
public Structure(Config.Faction faction) {
|
public Structure(Config.Faction faction) {
|
||||||
this.faction = faction;
|
this.faction = faction;
|
||||||
|
|
Loading…
Reference in New Issue