Skip to content
Snippets Groups Projects
Commit 616d7bbb authored by Peter Hertkorn's avatar Peter Hertkorn
Browse files

Using statemachine pattern

parent 1a0e612c
No related branches found
No related tags found
No related merge requests found
package kaugummiautomat;
public class AusverkauftZustand implements Zustand {
KaugummiAutomat kaugummiAutomat;
public AusverkauftZustand(KaugummiAutomat kaugummiAutomat) {
this.kaugummiAutomat = kaugummiAutomat;
}
public void muenzeEinwerfen() {
System.out.println("Sie konnen keine Münze einwerfen, Automat ist ausverkauft");
}
public void muenzeAuswerfen() {
System.out.println("Auswurf nicht möglich, Sie haben keine Münze eingeworfen");
}
public void griffDrehen() {
System.out.println("Sie haben gedreht, aber es sind keine Kugeln da");
}
public void kugelAuswerfen() {
System.out.println("Es wird keine Kugel ausgegeben");
}
public String toString() {
return "ausverkauft";
}
}
package kaugummiautomat;
public class GewinnZustand implements Zustand {
KaugummiAutomat kaugummiAutomat;
public GewinnZustand(KaugummiAutomat kaugummiAutomat) {
this.kaugummiAutomat = kaugummiAutomat;
}
public void muenzeEinwerfen() {
System.out.println("Bitte warten Sie, Sie erhalten eine Kugel");
}
public void muenzeAuswerfen() {
System.out.println("Bitte warten Sie, Sie erhalten eine Kugel");
}
public void griffDrehen() {
System.out.println("Auch wenn Sie zweimal drehen, bekommen Sie keine zweite Kugel");
}
public void kugelAuswerfen() {
System.out.println("SIE HABEN GEWONNEN! Sie bekommen zwei Kugeln für Ihr Geld");
kaugummiAutomat.kugelFreigeben();
if (kaugummiAutomat.getAnzahl() == 0) {
kaugummiAutomat.setZustand(kaugummiAutomat.getAusverkauftZustand());
} else {
kaugummiAutomat.kugelFreigeben();
if (kaugummiAutomat.getAnzahl() > 0) {
kaugummiAutomat.setZustand(kaugummiAutomat.getKeineMuenzeZustand());
} else {
System.out.println("Hoppla, keine Kugeln da!");
kaugummiAutomat.setZustand(kaugummiAutomat.getAusverkauftZustand());
}
}
}
public String toString() {
return "gibt zwei Kugeln aus, denn SIE HABEN GEWONNEN!";
}
}
package kaugummiautomat;
import java.util.Random;
public class HatMuenzeZustand implements Zustand {
Random randomGewinn = new Random(System.currentTimeMillis());
KaugummiAutomat kaugummiAutomat;
public HatMuenzeZustand(KaugummiAutomat kaugummiAutomat) {
this.kaugummiAutomat = kaugummiAutomat;
}
public void muenzeEinwerfen() {
System.out.println("Sie können keine weitere Münze einwerfen");
}
public void muenzeAuswerfen() {
System.out.println("Münze wird zurückgegeben");
kaugummiAutomat.setZustand(kaugummiAutomat.getKeineMuenzeZustand());
}
public void griffDrehen() {
System.out.println("Sie haben den Griff gedreht ...");
int gewinn = randomGewinn.nextInt(10);
if ((gewinn == 0) && (kaugummiAutomat.getAnzahl() > 1)) {
kaugummiAutomat.setZustand(kaugummiAutomat.getGewinnZustand());
} else {
kaugummiAutomat.setZustand(kaugummiAutomat.getVerkauftZustand());
}
}
public void kugelAuswerfen() {
System.out.println("Es wird keine Kugel ausgegeben");
}
public String toString() {
return "bereit für Drehen des Griffs";
}
}
package kaugummiautomat;
import java.util.Random;
public class KaugummiAutomat {
StateEnum zustand = StateEnum.AUSVERKAUFT;
Zustand ausverkauftZustand;
Zustand keineMuenzeZustand;
Zustand hatMuenzeZustand;
Zustand verkauftZustand;
Zustand gewinnZustand;
Zustand zustand = ausverkauftZustand;
int anzahl = 0;
Random randomGewinn = new Random(System.currentTimeMillis());
public KaugummiAutomat(int anzahl) {
this.anzahl = anzahl;
if (anzahl > 0) {
zustand = StateEnum.KEINE_MUENZE;
public KaugummiAutomat(int anzahlKugeln) {
ausverkauftZustand = new AusverkauftZustand(this);
keineMuenzeZustand = new KeineMuenzeZustand(this);
hatMuenzeZustand = new HatMuenzeZustand(this);
verkauftZustand = new VerkauftZustand(this);
gewinnZustand = new GewinnZustand(this);
this.anzahl = anzahlKugeln;
if (anzahlKugeln > 0) {
zustand = keineMuenzeZustand;
}
}
public void muenzeEinwerfen() {
if (zustand == StateEnum.HAT_MUENZE) {
System.out.println("Sie können keine weitere Münze einwerfen");
} else if (zustand == StateEnum.KEINE_MUENZE) {
zustand = StateEnum.HAT_MUENZE;
System.out.println("Sie haben eine Münze eingeworfen");
} else if (zustand == StateEnum.AUSVERKAUFT) {
System.out.println("Sie können keine Münze einwerfen, Automat ist ausverkauft");
} else if (zustand == StateEnum.VERKAUFT) {
System.out.println("Bitte warten Sie, Sie erhalten eine Kugel");
} else if (zustand == StateEnum.WINNER) {
System.out.println("Bitte warten Sie, Sie erhalten eine Gratiskugel");
}
zustand.muenzeEinwerfen();
}
public void muenzeAuswerfen() {
if (zustand == StateEnum.HAT_MUENZE) {
System.out.println("Münze wird zurückgegeben");
zustand = StateEnum.KEINE_MUENZE;
} else if (zustand == StateEnum.KEINE_MUENZE) {
System.out.println("Sie haben keine Münze eingeworfen");
} else if (zustand == StateEnum.VERKAUFT) {
System.out.println("Zu spät, leider haben Sie den Griff schon gedreht");
} else if (zustand == StateEnum.AUSVERKAUFT) {
System.out.println("Auswurf nicht möglich, Sie haben keine Münze eingeworfen");
} else if (zustand == StateEnum.WINNER) {
System.out.println("Zu spät, leider haben Sie den Griff schon gedreht");
zustand.muenzeAuswerfen();
}
}
public void griffDrehen() {
zustand.griffDrehen();
zustand.kugelAuswerfen();
}
void setZustand(Zustand zustand) {
this.zustand = zustand;
}
public void griffDrehen() {
if (zustand == StateEnum.VERKAUFT) {
System.out.println("Auch wenn Sie zweimal drehen, bekommen Sie keine zweite Kugel!");
} else if (zustand == StateEnum.KEINE_MUENZE) {
System.out.println("Sie haben gedreht, aber es ist keine Münze da");
} else if (zustand == StateEnum.AUSVERKAUFT) {
System.out.println("Sie haben gedreht, aber es sind keine Kugeln da");
} else if (zustand == StateEnum.HAT_MUENZE) {
System.out.println("Sie haben den Griff gedreht ...");
int gewinn = randomGewinn.nextInt(3);
if ((gewinn == 0) && (this.anzahl > 1)) {
zustand = StateEnum.WINNER;
} else {
zustand = StateEnum.VERKAUFT;
}
kugelAusgeben();
} else if (zustand == StateEnum.WINNER) {
System.out.println("Auch wenn Sie zweimal drehen, bekommen Sie keine zweite Kugel!");
}
}
public void kugelAusgeben() {
if (zustand == StateEnum.VERKAUFT) {
void kugelFreigeben() {
System.out.println("Eine Kugel rollt aus dem Ausgabeschacht");
if (anzahl != 0) {
anzahl = anzahl - 1;
if (anzahl == 0) {
System.out.println("Hoppla, keine Kugeln da!");
zustand = StateEnum.AUSVERKAUFT;
} else {
zustand = StateEnum.KEINE_MUENZE;
}
} else if (zustand == StateEnum.KEINE_MUENZE) {
System.out.println("Sie müssen zuerst bezahlen");
} else if (zustand == StateEnum.AUSVERKAUFT) {
System.out.println("Es wird keine Kugel ausgegeben");
} else if (zustand == StateEnum.HAT_MUENZE) {
System.out.println("Es wird keine Kugel ausgegeben");
} else if (zustand == StateEnum.WINNER) {
System.out.println("\n GEWINN");
System.out.println("Eine Kugel rollt aus dem Ausgabeschacht");
System.out.println("Eine kostenlose Kugel rollt aus dem Ausgabeschacht");
anzahl = anzahl - 1;
if (anzahl == 0) {
System.out.println("Hoppla, keine Kugeln da!");
zustand = StateEnum.AUSVERKAUFT;
} else {
zustand = StateEnum.KEINE_MUENZE;
}
}
int getAnzahl() {
return anzahl;
}
public void auffuellen(int anzahl) {
void auffuellen(int anzahl) {
this.anzahl = anzahl;
zustand = StateEnum.KEINE_MUENZE;
zustand = keineMuenzeZustand;
}
public Zustand getZustand() {
return zustand;
}
public Zustand getAusverkauftZustand() {
return ausverkauftZustand;
}
public Zustand getKeineMuenzeZustand() {
return keineMuenzeZustand;
}
public Zustand getHatMuenzeZustand() {
return hatMuenzeZustand;
}
public Zustand getVerkauftZustand() {
return verkauftZustand;
}
public Zustand getGewinnZustand() {
return gewinnZustand;
}
public String toString() {
StringBuffer result = new StringBuffer();
result.append("\nKaukugel & Co KG");
result.append("\nJava-gestützter Kaugummi-Standautomat Modell Nr. 2005\n");
result.append("Bestand: " + anzahl + " Kaugummikugel");
result.append("\nJava-gesttzter Kaugummi-Standautomat Modell Nr. 2005");
result.append("\nBestand: " + anzahl + " Kaugummikugel");
if (anzahl != 1) {
result.append("n");
}
result.append("\nAutomat ");
if (zustand == StateEnum.AUSVERKAUFT) {
result.append("ausverkauft");
} else if (zustand == StateEnum.KEINE_MUENZE) {
result.append("bereit für Münzeinwurf");
} else if (zustand == StateEnum.HAT_MUENZE) {
result.append("bereit für Drehen des Griffs");
} else if (zustand == StateEnum.VERKAUFT) {
result.append("gibt Kugel aus");
} else if (zustand == StateEnum.WINNER) {
result.append("Gewinn");
}
result.append("\n");
result.append("Automat " + zustand + "\n");
return result.toString();
}
}
......@@ -3,17 +3,21 @@ package kaugummiautomat;
public class KaugummiAutomatTestlauf {
public static void main(String[] args) {
KaugummiAutomat kaugummiAutomat = new KaugummiAutomat(5);
KaugummiAutomat kaugummiAutomat =
new KaugummiAutomat(10);
System.out.println(kaugummiAutomat);
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.griffDrehen();
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.griffDrehen();
System.out.println(kaugummiAutomat);
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.muenzeAuswerfen();
kaugummiAutomat.griffDrehen();
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.griffDrehen();
System.out.println(kaugummiAutomat);
......@@ -22,13 +26,16 @@ public class KaugummiAutomatTestlauf {
kaugummiAutomat.griffDrehen();
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.griffDrehen();
kaugummiAutomat.muenzeAuswerfen();
System.out.println(kaugummiAutomat);
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.griffDrehen();
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.griffDrehen();
System.out.println(kaugummiAutomat);
kaugummiAutomat.muenzeEinwerfen();
kaugummiAutomat.griffDrehen();
kaugummiAutomat.muenzeEinwerfen();
......
......
package kaugummiautomat;
public class KeineMuenzeZustand implements Zustand {
KaugummiAutomat kaugummiAutomat;
public KeineMuenzeZustand(KaugummiAutomat kaugummiAutomat) {
this.kaugummiAutomat = kaugummiAutomat;
}
public void muenzeEinwerfen() {
System.out.println("Sie haben eine Münze eingeworfen");
kaugummiAutomat.setZustand(kaugummiAutomat.getHatMuenzeZustand());
}
public void muenzeAuswerfen() {
System.out.println("Sie haben keine Münze eingeworfen");
}
public void griffDrehen() {
System.out.println("Sie haben gedreht, aber es ist keine Münze da");
}
public void kugelAuswerfen() {
System.out.println("Sie müssen zuerst bezahlen");
}
public String toString() {
return "bereit für Münzeinwurf";
}
}
package kaugummiautomat;
public enum StateEnum {
AUSVERKAUFT,
KEINE_MUENZE,
HAT_MUENZE,
VERKAUFT,
WINNER
}
package kaugummiautomat;
public class VerkauftZustand implements Zustand {
KaugummiAutomat kaugummiAutomat;
public VerkauftZustand(KaugummiAutomat kaugummiAutomat) {
this.kaugummiAutomat = kaugummiAutomat;
}
public void muenzeEinwerfen() {
System.out.println("Bitte warten Sie, Sie erhalten eine Kugel");
}
public void muenzeAuswerfen() {
System.out.println("Zu spät, leider haben Sie den Griff schon gedreht");
}
public void griffDrehen() {
System.out.println("Auch wenn Sie zweimal drehen, bekommen Sie keine zweite Kugel");
}
public void kugelAuswerfen() {
kaugummiAutomat.kugelFreigeben();
if (kaugummiAutomat.getAnzahl() > 0) {
kaugummiAutomat.setZustand(kaugummiAutomat.getKeineMuenzeZustand());
} else {
System.out.println("Hoppla, keine Kugeln da!");
kaugummiAutomat.setZustand(kaugummiAutomat.getAusverkauftZustand());
}
}
public String toString() {
return "gibt Kugel aus";
}
}
package kaugummiautomat;
public interface Zustand {
public void muenzeEinwerfen();
public void muenzeAuswerfen();
public void griffDrehen();
public void kugelAuswerfen();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment