diff --git a/src/de/jaujau/gui/Dashboard_GUI.java b/src/de/jaujau/gui/Dashboard_GUI.java index 54b5c66..281a64d 100644 --- a/src/de/jaujau/gui/Dashboard_GUI.java +++ b/src/de/jaujau/gui/Dashboard_GUI.java @@ -64,6 +64,7 @@ public class Dashboard_GUI extends JPanel{ private JButton btnpik = new JButton("Pik"); private JButton btnkaro = new JButton("Karo"); private JButton btnkreuz = new JButton("Kreuz"); + private final JLabel label_final = new JLabel("Spiel beendet"); public Dashboard_GUI(Spiel Spiel, Texturenpakete texturen) { setMinimumSize(new Dimension(1000, 600)); @@ -167,6 +168,12 @@ public class Dashboard_GUI extends JPanel{ mitte.add(mitte_center); + label_final.setVisible(false); + label_final.setFont(new Font("Tahoma", Font.PLAIN, 34)); + label_final.setHorizontalAlignment(SwingConstants.CENTER); + label_final.setForeground(Color.BLACK); + + mitte_center.add(label_final, BorderLayout.SOUTH); //Wunschfarben Button Listener @@ -176,7 +183,7 @@ public class Dashboard_GUI extends JPanel{ @Override public void mouseClicked(MouseEvent e) { aktuellesSpiel.getKartensatz().SetWunschfarbe(Farbe.PIK); - btnpik.setVisible(false); + showwunsch(false); } }); @@ -186,7 +193,7 @@ public class Dashboard_GUI extends JPanel{ @Override public void mouseClicked(MouseEvent e) { aktuellesSpiel.getKartensatz().SetWunschfarbe(Farbe.KARO); - btnkaro.setVisible(false); + showwunsch(false); } }); @@ -196,7 +203,7 @@ public class Dashboard_GUI extends JPanel{ @Override public void mouseClicked(MouseEvent e) { aktuellesSpiel.getKartensatz().SetWunschfarbe(Farbe.KREUZ); - btnkreuz.setVisible(false); + showwunsch(false); } }); @@ -204,7 +211,7 @@ public class Dashboard_GUI extends JPanel{ @Override public void mouseClicked(MouseEvent e) { aktuellesSpiel.getKartensatz().SetWunschfarbe(Farbe.HERZ); - btnherz.setVisible(false); + showwunsch(false); } }); @@ -244,6 +251,8 @@ public class Dashboard_GUI extends JPanel{ aktuellesSpiel = Spiel; System.out.println("DASHBOARD: Game darstellen"); cl.show(panelCont, "2"); + showwunsch(false); + aussetzen.setVisible(false); aktuellesSpiel.spiel(this); aktualisiereGUI(); } @@ -373,16 +382,39 @@ public class Dashboard_GUI extends JPanel{ aktualisiereSpieleranzeige(); aktualisiereAblage(); aktualisiereHand(); + revalidate(); + repaint(); } - public void showwunsch(){ - btnpik.setVisible(true); - btnherz.setVisible(true); - btnkaro.setVisible(true); - btnkreuz.setVisible(true); + public void showwunsch(boolean status){ + btnpik.setVisible(status); + btnherz.setVisible(status); + btnkaro.setVisible(status); + btnkreuz.setVisible(status); mitte_unten.updateUI(); - //mitte_unten.revalidate(); - //mitte_unten.repaint(); + } + + public Farbe getwunschfarbe() { + return Farbe.KARO; + } + + + public void gewonnen(Spieler spieler) { + + if(spieler == spieler.SPIELER) { + System.out.println("Spiel gewonnen"); + label_final.setText("Spiel gewonnen"); + } + if(spieler == spieler.COMPUTER) { + System.out.println("Spieler verloren"); + label_final.setText("Spieler verloren"); + } + player_hand.setVisible(false); + label_final.setVisible(true); + ablagestapel.setVisible(false); + rechts.setVisible(false); + updateUI(); + aktualisiereGUI(); } } diff --git a/src/de/jaujau/spiellogik/Computer_gegner.java b/src/de/jaujau/spiellogik/Computer_gegner.java index ada770d..302b486 100644 --- a/src/de/jaujau/spiellogik/Computer_gegner.java +++ b/src/de/jaujau/spiellogik/Computer_gegner.java @@ -3,6 +3,7 @@ package de.jaujau.spiellogik; import java.util.ArrayList; +import java.util.Random; import de.jaujau.daten.Farbe; import de.jaujau.daten.Kartensatz; @@ -107,11 +108,24 @@ public class Computer_gegner { if ((aussetzen || ziehen) && wertInHand) { //Muss der Computer aussetzen oder ziehen, versucht er eine passende Konterkarte zu legen rueckgabeindex = wertLegen(letztekartewert); } - else if(farbeInHand && !aussetzen && !ziehen) { //Hat der Computer die Farbe auf der Hand, versucht er diese zu legen - rueckgabeindex = farbeLegen(letztekartefarbe); - } - else if(wertInHand && !aussetzen && !ziehen) { //Hat der Computer nicht die passende Farbe, aber einen passenden Wert, legt er diesen - rueckgabeindex = wertLegen(letztekartewert); + else if((wertInHand || farbeInHand) && !aussetzen && !ziehen) { + if (hand.size() > 3) { //Hat der Computer viele Karten in der Hand versucht er passende Farben zu legen, bei weniger Karten passende Werte + if(farbeInHand && !aussetzen && !ziehen) { //Hat der Computer die Farbe auf der Hand, versucht er diese zu legen + rueckgabeindex = farbeLegen(letztekartefarbe); + } + else if(wertInHand && !aussetzen && !ziehen) { //Hat der Computer nicht die passende Farbe, aber einen passenden Wert, legt er diesen + rueckgabeindex = wertLegen(letztekartewert); + } + } + else { + if(wertInHand && !aussetzen && !ziehen) { //Hat der Computer die Wert auf der Hand, versucht er diese zu legen + rueckgabeindex = wertLegen(letztekartewert); + } + else if(farbeInHand && !aussetzen && !ziehen) { //Hat der Computer nicht den passenden Wert, aber eine passende Farbe, legt er diese + rueckgabeindex = farbeLegen(letztekartefarbe); + } + + } } else if(bubeInHand && !aussetzen && !ziehen) { //Hat der Computer weder die passende Farbe, noch den passenden Wert auf der Hand, aber einen Wünscher, legt er diesen rueckgabeindex = wertLegen(Wert.BUBE); @@ -184,11 +198,34 @@ public class Computer_gegner { hoechsteAnzahl = anzahl; wahl = farben[i]; } + if (hand.size() < 6 && hand.size() > 2) { + if(zufall(10) > 7) { + wahl = farben[zufall(4)]; + } + } + if (hand.size() < 3) { + if(zufall(10) > 5) { + wahl = farben[zufall(4)]; + } + } } return wahl; } + /** + * Funktion, die eine zufällige Zahl zwischen 0 und einer andere Zahl r-1 ausgibt + * @param int r + * @return int zufällige Zahl + */ + private int zufall(int r){ + Random zufall = new Random(); + + int diced = 0; + diced = zufall.nextInt(r); + return diced; + } + /** * Funktion zählt für die jeweilige Farbe, wie viele Karten der Farbe auf der Hand des Computer sind * @param farbe, für welche gezählt werden soll diff --git a/src/de/jaujau/spiellogik/Spiel.java b/src/de/jaujau/spiellogik/Spiel.java index dc31e0b..1c17e6d 100644 --- a/src/de/jaujau/spiellogik/Spiel.java +++ b/src/de/jaujau/spiellogik/Spiel.java @@ -3,6 +3,7 @@ package de.jaujau.spiellogik; import java.util.Random; import de.jaujau.daten.Audio; +import de.jaujau.daten.Farbe; import de.jaujau.daten.Kartensatz; import de.jaujau.daten.Spieler; import de.jaujau.daten.Wert; @@ -149,12 +150,17 @@ public class Spiel { } + /** + * Wird aufgerufen wenn das Spiel entschieden wurde + * @param spieler Spieler, welcher gewonnen hat + */ private void gewinn(Spieler spieler) { - System.out.println("HERZLICHEN GLÜCKWUNSCH " + amZug + ". DU HAST GEWONNEN"); - dashboard.aktualisiereGUI(); + System.out.println("HERZLICHEN GLÜCKWUNSCH " + spieler + ". DU HAST GEWONNEN"); + dashboard.gewonnen(spieler); spielGewonnen = true; } + /** * Bietet die Möglichkeit auszusetzen */ @@ -189,13 +195,15 @@ public class Spiel { System.out.println("SPIEL Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); System.out.println("SPIEL Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); effekteSetzen(); - alternieren(dashboard); + if(kartensatz.getKarte(kartenindex).getWERT() == Wert.BUBE) { + if(amZug == Spieler.COMPUTER) alternieren(dashboard); + } } } /** - * falls eine oder mehrere Karten gezogen werden können, wird dies ausgeführt + * falls eine oder mehrere Karten gezogen werden können, wird dies ausgeführt */ public void karteZiehen(){ if(spielGewonnen) return; @@ -221,7 +229,17 @@ public class Spiel { /** - * setzt Effekt-Variablen und Wunschfarbe für einen Wünscher + * Setzt die Wünscher Farbe + * @param farbe + */ + public void wuenscher(Farbe farbe) { + kartensatz.SetWunschfarbe(farbe); + alternieren(dashboard); + } + + + /** + * setzt Effekt-Variablen und Wunschfarbe für einen Wünscher */ private void effekteSetzen() { if(spielGewonnen) return; @@ -238,7 +256,7 @@ public class Spiel { kartensatz.SetWunschfarbe(computerGegner.farbeAussuchen(kartensatz)); } else { - dashboard.showwunsch(); //Returnwert! + dashboard.showwunsch(true); } } System.out.println("\nSPIEL Effekte gesetzt:\nSPIEL Aussetzen: " + aussetzen + "\nSPIEL Zwei_Ziehen: " + zwei_ziehen + "\nSPIEL Anzahl: " + kartenZiehen);