diff --git a/src/de/jaujau/spiellogik/Spiel.java b/src/de/jaujau/spiellogik/Spiel.java index 1c3f880..c2a6611 100644 --- a/src/de/jaujau/spiellogik/Spiel.java +++ b/src/de/jaujau/spiellogik/Spiel.java @@ -1,13 +1,14 @@ package de.jaujau.spiellogik; +import java.util.ArrayList; import java.util.Random; -import de.jaujau.daten.Farbe; import de.jaujau.daten.Kartensatz; import de.jaujau.daten.Spieler; import de.jaujau.daten.Wert; + /** * Diese Klasse prüft die Spielaktionen und alterniert zwischen Spieler und Computer * @author Fabian Keller @@ -19,12 +20,20 @@ public class Spiel { private boolean aussetzen; private boolean zwei_ziehen; private int kartenZiehen; - private Kartensatz kartensatz; - private Farbe gelegteFarbe; + protected Kartensatz kartensatz; private Wert gelegterWert; private Spielzug spielzug; + boolean getAussetzen() { + return aussetzen; + } + + + boolean getZwei_ziehen() { + return zwei_ziehen; + } + /** * alterniert zwischen Spieler und Computer und legt Beginner fest */ @@ -60,52 +69,74 @@ public class Spiel { /** - * prüft ob eine Karte mit einem bestimmten Kartenindex gelegt werden kann + * falls eine Karte gelegt werden kann wird diese gelegt * @param kartenindex */ - private void karteLegen(int kartenindex) { //Nur Strukturüberlegung, WÜNSCHER? - zugMoeglich(); - if (spielzug.pruefeZug(kartenindex)) { - kartensatz.ablegen(kartenindex); - } - } - - - /** - * prüft ob eine Karte gezogen werden kann - */ - private void karteZiehen(){ - zugMoeglich(); - if(zwei_ziehen) { - for(int i = 0; i < kartenZiehen; i++) { - kartensatz.ziehen(amZug); - } - spiel(); - kartenZiehen = 0; - zwei_ziehen = false; - } - if(aussetzen) { - spiel(); + private void karteLegen(int kartenindex) { //WÜNSCHER? + if(pruefeHand(amZug)) { + if (spielzug.pruefeZug(kartenindex)) { + kartensatz.ablegen(kartenindex); + spiel(); + effekteSetzen(); //kartenindex übergeben und anhand dessen effekte setzen + }//oder ziehen? + }// else kein Zug möglich + else { aussetzen = false; } + }//wann wird aussetzen auf false gesetzt + + + /** + * falls eine oder mehrere Karten gezogen werden können, wird dies ausgeführt + */ + private void karteZiehen(){ + if(pruefeHand(amZug)) { + if(zwei_ziehen) { + for(int i = 0; i < kartenZiehen; i++) { + kartensatz.ziehen(amZug); + } + kartenZiehen = 0; + zwei_ziehen = false; + spiel(); + } + else { + kartensatz.ziehen(amZug); + } + } } /** - * prüft ob ein Zug überhaupt möglich ist und ließt Werte zum weiterarbeiten ein + * setzt Effekt-Variablen */ - private void zugMoeglich() { - gelegteFarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); + private void effekteSetzen() { //was passiert wenn 2 gezogen wurde und dann der nächste spieler diese Funktion ausführt. gelegterWert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); if(gelegterWert == Wert.ACHT) { aussetzen = true; } - else { - aussetzen = false; - } if(gelegterWert == Wert.SIEBEN) { zwei_ziehen = true; kartenZiehen += 2; } } + + + /** + * prüft ob, wenn eine 8 gelegt wurde, eine 8 auf der Hand ist + * und der Zug somit möglich ist + * @return true falls ein Zug möglich ist + * @return false falls kein Zug möglich ist + */ + private boolean pruefeHand(Spieler amZug) { + if(aussetzen) { + ArrayList handvonSpieler = kartensatz.getHand(amZug); + for(int i = 0; i < handvonSpieler.size(); i++) { + if(kartensatz.getKarte(handvonSpieler.get(i)).getWERT() == Wert.ACHT) { + return true; + } + } + return false; + } + return true; + } }