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

134 lines
4.6 KiB
Java

package ch.zhaw.catan;
import java.util.HashMap;
import java.util.Random;
public class Siedler {
public static void main(String[] args) {
//Spiel erstellen
Parser parser = new Parser();
SiedlerGame game = foundingPhase(parser);
boolean running = true;
boolean diceThrown = false;
while (running){
Config.Faction currentPlayerFaction = game.getCurrentPlayerFaction();
parser.displayGameboard(game.getBoard().getTextView());
parser.playerTurn(currentPlayerFaction);
if(!diceThrown) {
throwDice(game, parser);
diceThrown = true;
}
parser.displayPlayerInfo(game.getCurrentPlayerResource(), game.getCurrentPlayerWinpoints());
switch (parser.getAction()) {
case NEXTPLAYER:
Config.Faction winner = game.getWinner();
if(winner == null) {
game.switchToNextPlayer();
diceThrown = false;
} else {
parser.displayWinnertext(winner);
running = false;
}
break;
case BUILDSETTLEMENT:
parser.giveCoordinatesForStructures(Config.Structure.SETTLEMENT);
if(!game.buildSettlement(parser.getPoint())){
parser.errorMessage();
}
break;
case BUILDCITY:
parser.giveCoordinatesForStructures(Config.Structure.CITY);
if(!game.buildCity(parser.getPoint())){
parser.errorMessage();
}
break;
case BUILDROAD:
parser.giveCoordinatesForStructures(Config.Structure.ROAD);
if(game.buildRoad(parser.getPoint(), parser.getPoint())){
parser.errorMessage();
}
break;
case TRADEWITHBANK:
Config.Resource offer = parser.trade(true);
Config.Resource want = parser.trade(false);
if(!game.tradeWithBankFourToOne(offer, want)){
parser.errorMessage();
}
break;
case QUIT:
running = false;
parser.quit();
break;
default:
parser.errorMessage();
}
}
}
private static void throwDice(SiedlerGame game, Parser parser) {
Random random = new Random();
//sum of two integers from 0-5 + 2 --> sum of two integers from 1-6
int thrownDices = random.nextInt(6) + random.nextInt(6) + 2;
//todo check if 7
parser.thrownDices(thrownDices);
game.throwDice(thrownDices);
}
private static SiedlerGame foundingPhase(Parser parser) {
HashMap<String, Integer> gameInfo = parser.gameStart();
SiedlerGame game = new SiedlerGame(gameInfo.get("NumberOfWinPoints"), gameInfo.get("NumberOfPlayers"));
for(int player = 1; player <= gameInfo.get("NumberOfPlayers"); player++){
buildStructuresInFoundingPhase(game, parser, false);
if(player < gameInfo.get("NumberOfPlayers")){
game.switchToPreviousPlayer();
}
}
for(int player = 1; player <= gameInfo.get("NumberOfPlayers"); player++){
buildStructuresInFoundingPhase(game, parser, true);
game.switchToNextPlayer();
}
return game;
}
private static void buildStructuresInFoundingPhase(SiedlerGame game, Parser parser, Boolean payout){
parser.displayGameboard(game.getBoard().getTextView());
parser.playerTurn(game.getCurrentPlayerFaction());
//build Settlement
parser.giveCoordinatesForStructures(Config.Structure.SETTLEMENT);
boolean sucessful = false;
do{
if(game.placeInitialSettlement(parser.getPoint(), payout)) {
sucessful = true;
}
else{
parser.errorMessage();
}
} while(!sucessful);
//build Road
parser.displayGameboard(game.getBoard().getTextView());
parser.giveCoordinatesForStructures(Config.Structure.ROAD);
sucessful = false;
do{
if(game.placeInitialRoad(parser.getPoint(), parser.getPoint())) {
sucessful = true;
}
else{
parser.errorMessage();
}
} while(!sucessful);
}
}