134 lines
4.6 KiB
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);
|
|
}
|
|
|
|
|
|
}
|