diff --git a/highscore.txt b/highscore.txt index e427f54..510cefa 100644 --- a/highscore.txt +++ b/highscore.txt @@ -1,5 +1,15 @@ Seb 245 Elmo 240 Moritz 220 -Alaa Aldin 217 -Fabian 215 \ No newline at end of file +Alaa-Aldin 217 +Fabian 215 +Thomas 1233 +Emil -21331 +Heinz +312 +Gert 234 +Kasper 24 +Jens 234 +Paul 234 +Till 553 +Reiner 462 +Achim 2344 diff --git a/src/de/jaujau/UnitTests/TEST_Audio.java b/src/de/jaujau/UnitTests/TEST_Audio.java new file mode 100644 index 0000000..e5ab97d --- /dev/null +++ b/src/de/jaujau/UnitTests/TEST_Audio.java @@ -0,0 +1,37 @@ +package de.jaujau.UnitTests; + + + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import de.jaujau.daten.Audio; + +class TEST_Audio { + + Audio sound; + + @BeforeEach + void setUp() throws Exception { + sound = new Audio(); + } + + @Test + void test() { + //Test Sound in einem eigenen Thread abspielen + sound.spieleJau(); + //um das Programm zu beschäftigen + for(int i = 0; i < 500000; i++) { + System.out.println(i); + } + + //Test Sound in einem eigenen Thread abspielen + sound.spieleJauJau(); + //um das Programm zu beschäftigen + for(int i = 0; i < 500000; i++) { + System.out.println(i); + } + + } + +} diff --git a/src/de/jaujau/daten/Audio.java b/src/de/jaujau/daten/Audio.java new file mode 100644 index 0000000..af7c000 --- /dev/null +++ b/src/de/jaujau/daten/Audio.java @@ -0,0 +1,101 @@ +package de.jaujau.daten; + + +import java.io.IOException; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.SourceDataLine; + +/** + * Klasse für das Abspielen eines Tons + * @author Sebastian Kacza + * + */ +public class Audio { + + public Audio() {} + + + /** + * Spielt den "Jau" Ton ab + */ + public void spieleJau() { + spieleTon("/sound/jaujau.wav"); + } + + + /** + * Spielt den "JauJau" Ton ab + */ + public void spieleJauJau() { + spieleTon("/sound/jau.wav"); + } + + + /** + * Spielt einen Ton ein einem eingene Thread ab + * @param Pfad zu der Sounddatei im Jar-Archiv + */ + private void spieleTon(String Pfad) { + new Thread(new Runnable() { + @Override + public void run() { + try { + playSound(Pfad); + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + + //Kann gelöscht werden wenn es nicht mehr in der GUI benötigt wird + public void test() { + spieleJauJau(); + } + + + /* + * !!! DIESE METHODE IST NICHT VON MIR !!! + * Quelle: https://stackoverflow.com/questions/2416935/how-to-play-wav-files-with-java + */ + /** + * Spiel eine Audio dateim im WAV-Format die im internen Ordner gespeichert ist ab. + * @param path Ptad zu der Sounddatei + * @throws Exception + */ + private void playSound (String path) throws Exception { + //AudioInputStream audioStream = AudioSystem.getAudioInputStream(new File ("test.wav")); + AudioInputStream audioStream = AudioSystem.getAudioInputStream(getClass().getResourceAsStream(path)); + + int BUFFER_SIZE = 128000; + AudioFormat audioFormat = null; + SourceDataLine sourceLine = null; + + audioFormat = audioStream.getFormat(); + + sourceLine = AudioSystem.getSourceDataLine(audioFormat); + sourceLine.open(audioFormat); + sourceLine.start(); + + int nBytesRead = 0; + byte[] abData = new byte[BUFFER_SIZE]; + while (nBytesRead != -1) { + try { + nBytesRead = + audioStream.read(abData, 0, abData.length); + } catch (IOException e) { + e.printStackTrace(); + } + + if (nBytesRead >= 0) { + int nBytesWritten = sourceLine.write(abData, 0, nBytesRead); + } + } + + sourceLine.drain(); + sourceLine.close(); + } +} diff --git a/src/de/jaujau/daten/Spielerverwaltung.java b/src/de/jaujau/daten/Spielerverwaltung.java index 7143e72..460d6b1 100644 --- a/src/de/jaujau/daten/Spielerverwaltung.java +++ b/src/de/jaujau/daten/Spielerverwaltung.java @@ -95,7 +95,6 @@ public class Spielerverwaltung { int zeilennummer = 0; boolean insArray = false; while (line != null) { - System.out.println(line); lineArray = line.toCharArray(); for (int i = 0; i < lineArray.length; i++) { diff --git a/src/de/jaujau/gui/Dashboard_GUI.java b/src/de/jaujau/gui/Dashboard_GUI.java new file mode 100644 index 0000000..03488d8 --- /dev/null +++ b/src/de/jaujau/gui/Dashboard_GUI.java @@ -0,0 +1,287 @@ +package de.jaujau.gui; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import de.jaujau.daten.Spieler; +import de.jaujau.daten.Spielerverwaltung; +import de.jaujau.daten.Texturenpakete; +import de.jaujau.spiellogik.Spiel; +import javax.swing.JLabel; +import java.awt.Dimension; +import java.awt.Image; +import javax.swing.JComboBox; +import javax.swing.SwingConstants; +import javax.swing.ImageIcon; +import java.awt.Rectangle; +import java.awt.Component; +import java.awt.FlowLayout; +import java.awt.ComponentOrientation; +import java.awt.Cursor; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.UIManager; +import java.awt.Font; + +public class Dashboard_GUI extends JPanel{ + private static final long serialVersionUID = -7380187913989942586L; + JPanel panelCont = new JPanel(); + JPanel highscore = new JPanel(); + JPanel game = new JPanel(); + JPanel start = new JPanel(); + CardLayout cl = new CardLayout(); + Spielerverwaltung spielerverwaltung = new Spielerverwaltung(); + private final JPanel panel = new JPanel(); + private final JPanel panel_1 = new JPanel(); + private JComboBox comboBox = new JComboBox(); + private final JPanel panel_2 = new JPanel(); + private final JLabel lblNewLabel_1 = new JLabel("Entwickler: Sebastian, Moritz, Fabian, Aladin, Elmar"); + private final JPanel spielfeld = new JPanel(); + private final JPanel player_hand = new JPanel(); + private final JPanel gegner_hand = new JPanel(); + private final JLabel ablagestapel = new JLabel(""); + private final JLabel ziehstapel = new JLabel(""); + JPanel spielerkarten = new JPanel(); + JLabel labels[] = new JLabel[32]; + private Spiel aktuellesSpiel; + private JLabel label_aktuellerSpieler; + private Texturenpakete texturenpakete; + private final JPanel spielfeldmitte = new JPanel(); + private final JPanel info_panel = new JPanel(); + private final JPanel rechts = new JPanel(); + private final JPanel mitte = new JPanel(); + + public Dashboard_GUI(Spiel Spiel, Texturenpakete texturen) { + setMinimumSize(new Dimension(1000, 600)); + texturenpakete = texturen; + texturenpakete.addPaket("StandartTexturenBeta3.zip"); + texturenpakete.setAktivesPaket(0); + System.out.println(texturenpakete.getAktivesPaket()); + aktuellesSpiel = Spiel; + setLayout(new BorderLayout(0, 0)); + panelCont.setLayout(cl); + panelCont.add(highscore, "1"); + panelCont.add(game, "2"); + game.setLayout(new BorderLayout(0, 0)); + spielfeld.setBackground(new Color(128, 128, 128)); + + game.add(spielfeld, BorderLayout.CENTER); + spielfeld.setLayout(new BorderLayout(0, 0)); + player_hand.setPreferredSize(new Dimension(100, 240)); + player_hand.setForeground(new Color(169, 169, 169)); + player_hand.setBackground(new Color(169, 169, 169)); + + spielfeld.add(player_hand, BorderLayout.SOUTH); + player_hand.setLayout(new BorderLayout(0, 0)); + + JScrollPane scrollPane_1 = new JScrollPane(); + scrollPane_1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + scrollPane_1.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); + scrollPane_1.setPreferredSize(new Dimension(100, 240)); + player_hand.add(scrollPane_1, BorderLayout.CENTER); + spielerkarten.setBackground(new Color(169, 169, 169)); + + + spielerkarten.setAutoscrolls(true); + spielerkarten.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + scrollPane_1.setViewportView(spielerkarten); + spielerkarten.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); + gegner_hand.setBackground(UIManager.getColor("Button.shadow")); + + spielfeld.add(gegner_hand, BorderLayout.NORTH); + gegner_hand.setLayout(new BorderLayout(0, 0)); + + spielfeldmitte.setPreferredSize(new Dimension(100, 20)); + spielfeldmitte.setLayout(new BorderLayout(0, 0)); + + JLabel beschreibung_aktuellerSpieler = new JLabel("Aktueller Spieler:"); + beschreibung_aktuellerSpieler.setFont(new Font("Tahoma", Font.BOLD, 18)); + beschreibung_aktuellerSpieler.setForeground(Color.BLACK); + info_panel.add(beschreibung_aktuellerSpieler); + label_aktuellerSpieler = new JLabel("Auswahlphase"); + label_aktuellerSpieler.setForeground(Color.BLACK); + label_aktuellerSpieler.setFont(new Font("Tahoma", Font.BOLD, 18)); + info_panel.add(label_aktuellerSpieler); + + + spielfeld.add(spielfeldmitte, BorderLayout.CENTER); + + spielfeldmitte.add(info_panel, BorderLayout.NORTH); + rechts.setPreferredSize(new Dimension(250, 10)); + + spielfeldmitte.add(rechts, BorderLayout.EAST); + rechts.setLayout(new BorderLayout(0, 0)); + ziehstapel.setAlignmentX(Component.CENTER_ALIGNMENT); + rechts.add(ziehstapel, BorderLayout.CENTER); + ziehstapel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + aktuellesSpiel.karteZiehen(); + aktualisiereGUI(); + } + }); + ziehstapel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + ziehstapel.setPreferredSize(new Dimension(242, 362)); + ziehstapel.setHorizontalAlignment(SwingConstants.CENTER); + ziehstapel.setIcon(new ImageIcon(texturenpakete.getTextur(32).getScaledInstance(150, 210, Image.SCALE_SMOOTH))); + + spielfeldmitte.add(mitte, BorderLayout.SOUTH); + mitte.setLayout(null); + spielfeldmitte.add(ablagestapel, BorderLayout.CENTER); + ablagestapel.setIcon(new ImageIcon(Dashboard_GUI.class.getResource("/img/texturen/standart/32.png"))); + + + ablagestapel.setPreferredSize(new Dimension(242, 362)); + ablagestapel.setHorizontalAlignment(SwingConstants.CENTER); + panelCont.add(start, "3"); + start.setLayout(new BorderLayout(0, 0)); + panel.setPreferredSize(new Dimension(10, 30)); + + start.add(panel, BorderLayout.NORTH); + + JLabel lblNewLabel = new JLabel("Spielername:"); + panel.add(lblNewLabel); + comboBox.setMinimumSize(new Dimension(60, 22)); + comboBox.setEditable(true); + panel.add(comboBox); + start.add(panel_1, BorderLayout.CENTER); + + start.add(panel_2, BorderLayout.SOUTH); + + panel_2.add(lblNewLabel_1); + + highscore.setLayout(new BorderLayout(0, 0)); + + //Erstes Panel wird angezeigt + cl.show(panelCont, "3"); + add(panelCont); + renderStart(); //Startseite beim ersten öffnen aktualisieren + + } + + //Spiel Panel wird gezeigt + public void showgame(Spiel Spiel){ + //Neues Spiel wird übergeben + aktuellesSpiel = Spiel; + System.out.println("DASHBOARD: Game darstellen"); + cl.show(panelCont, "2"); + aktuellesSpiel.spiel(this); + aktualisiereGUI(); + } + + public void showstart(){ + System.out.println("DASHBOARD: Start darstellen"); + cl.show(panelCont, "3"); + renderStart(); + } + + + public void showhighscore(){ + System.out.println("DASHBOARD: Highscore darstellen"); + renderHighscore(); + cl.show(panelCont, "1"); + repaint(); + revalidate(); + } + + + + public void renderStart(){ + comboBox.removeAllItems(); + for(int i = 0; i hand; + boolean farbeInHand = false; + boolean wertInHand = false; + boolean aussetzen = false; + boolean ziehen = false; + boolean bubeInHand = false; // // Constructors // @@ -51,18 +59,20 @@ public class Computer_gegner { * Als nächstes Werden Karten der aktuellen Farbe gelegt * Dann Karten die den aktuellenw Wert besitzen * Zuletzt Buben um sich eine Farbe zu wünschen - * @param keine + * @param Kartensatz * @return Kartenindex der Karte die gelegt werden soll */ - public int cpu_Zug() { - Spiel spiel = Anwendung.getAktuellesSpiel(); //Erzeugt ein Abbild des aktuellen Spiels - Kartensatz kartensatz = spiel.getKartensatz(); //Erzeugt ein Abbild des aktuellen Kartensatzes, mit stand der Karten - Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); //Speichert den Wert der Karte, die zuletzt gelegt wurde - Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); //Speichert die Farbe der Karte, die zuletzt gelegt wurde - ArrayList hand = kartensatz.getHand(Spieler.COMPUTER); //Speichert die Karten, die der Computer aktuell auf der Hand hat - boolean farbeInHand = false; //Speichert, ob die aktuell liegende Farbe in der Hand des Computers vorhanden ist - boolean wertInHand = false; //Speichert, ob der aktuell liegende Wert in der Hand des Computers vorhanden ist - int rueckgabeindex = 0; //Speichert den Kartenindex, der Karte, die gelegt werden soll + public int cpu_Zug(Kartensatz karten) { + kartensatz = karten; //Erzeugt ein Abbild des aktuellen Kartensatzes, mit Stand der Karten + letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); //Speichert den Wert der Karte, die zuletzt gelegt wurde + letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); //Speichert die Farbe der Karte, die zuletzt gelegt wurde + hand = kartensatz.getHand(Spieler.COMPUTER); //Speichert die Karten, die der Computer aktuell auf der Hand hat + farbeInHand = false; //Speichert, ob die aktuell liegende Farbe in der Hand des Computers vorhanden ist + wertInHand = false; //Speichert, ob der aktuell liegende Wert in der Hand des Computers vorhanden ist + int rueckgabeindex = -1; //Speichert den Kartenindex, der Karte, die gelegt werden soll + aussetzen = spiel.getAussetzen(); //Speichert, ob der Computer aktuell aussetzen müsste + ziehen = spiel.getZwei_ziehen(); //Speichert, ob der Computer aktuell ziehen müsste + bubeInHand = false; for(int i = 0; i < hand.size(); i++) { //Schleife geht alle Karten in der Hand des Computers durch Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE(); //Holt sich die Farbe der aktuellen Handkarte @@ -75,6 +85,24 @@ public class Computer_gegner { if(wertHK == letztekartewert) { //Prüft ob Wert der aktuellen Handkarte zur liegenden Karte passt wertInHand = true; } + + if(wertHK == Wert.BUBE) { //Prüft, ob ein Bube (Wünscher) auf der Hand vorhanden ist + bubeInHand = true; + } + } + + //Wählt aus, welche Karte gelegt wird + if (aussetzen || ziehen) { //Muss der Computer aussetzen oder ziehen, versucht er eine passende Konterkarte zu legen + rueckgabeindex = wertLegen(letztekartewert); + } + else if(farbeInHand) { //Hat der Computer die Farbe auf der Hand, versucht er diese zu legen + rueckgabeindex = farbeLegen(letztekartefarbe); + } + else if(wertInHand) { //Hat der Computer nicht die passende Farbe, aber einen passenden Wert, legt er diesen + rueckgabeindex = wertLegen(letztekartewert); + } + else if(bubeInHand) { //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); } @@ -82,6 +110,84 @@ public class Computer_gegner { return rueckgabeindex; } + /** + * Funktion sucht Karte passend zur gesuchten Farbe aus der Hand und gibt diese zurück + * Passen mehrere Karten, gibt sie die letzte passende zurück + * @return integer Index der zurückgegebenen Karte + */ + private int farbeLegen(Farbe gesuchteFarbe) { + int ind = -1; + + for(int i = 0; i < hand.size(); i++) { + Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE(); + if(farbeHK == gesuchteFarbe) { + ind = hand.get(i); + } + } + return ind; + } + + /** + * Funktion sucht Karte passend zum gesuchten Wert aus der Hand und gibt diese zurück + * Passen mehrere Karten, gibt sie die letzte passende zurück + * @return integer Index der zurückgegebenen Karte + */ + private int wertLegen(Wert gesuchterWert) { + int ind = -1; + + for(int i = 0; i < hand.size(); i++) { + Wert wertHK = kartensatz.getKarte(hand.get(i)).getWERT(); + if(wertHK == gesuchterWert) { + ind = hand.get(i); + } + } + return ind; + } + + /** + * Funktion wählt für den Computer aus, welche Farbe er sich bei einem Wünscher aussucht + * Dazu wird geschaut, von welcher Farbe er am meisten Karten auf der Hand hat + * @return Farbe gewählte Farbe + */ + public Farbe farbeAussuchen(Kartensatz karten) { + Farbe wahl = Farbe.KREUZ; + kartensatz = karten; //Erzeugt ein Abbild des aktuellen Kartensatzes, mit Stand der Karten + hand = kartensatz.getHand(Spieler.COMPUTER); //Speichert die Karten, die der Computer aktuell auf der Hand hat + + int hoechsteAnzahl = 0; + int anzahl = 0; + + Farbe[] farben = {Farbe.KREUZ, Farbe.PIK, Farbe.HERZ, Farbe.KARO}; + + for (int i = 0; i < farben.length; i++) { + anzahl = farbeZahl(farben[i]); + if (anzahl > hoechsteAnzahl) { + hoechsteAnzahl = anzahl; + wahl = farben[i]; + } + } + + return wahl; + } + + /** + * Funktion zählt für die jeweilige Farbe, wie viele Karten der Farbe auf der Hand des Computer sind + * @param farbe Farbe, für welche gezählt werden soll + * @return integer Wie viele Karten der Farbe auf der Hand sind + */ + private int farbeZahl(Farbe farbe) { + int anzahl = 0; + + for (int i = 0; i < hand.size(); i++) { + Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE(); + if (farbeHK == farbe) { + anzahl ++; + } + } + + return anzahl; + } + public int cpuTest() { return 1; } diff --git a/src/de/jaujau/spiellogik/Spiel.java b/src/de/jaujau/spiellogik/Spiel.java index e831f87..7bfe263 100644 --- a/src/de/jaujau/spiellogik/Spiel.java +++ b/src/de/jaujau/spiellogik/Spiel.java @@ -1,29 +1,41 @@ package de.jaujau.spiellogik; -import java.util.ArrayList; import java.util.Random; +import de.jaujau.daten.Audio; import de.jaujau.daten.Kartensatz; import de.jaujau.daten.Spieler; import de.jaujau.daten.Wert; +import de.jaujau.gui.Dashboard_GUI; /** - * Diese Klasse prüft die Spielaktionen und alterniert zwischen Spieler und Computer + * Diese Klasse organisiert den Spielablauf * @author Fabian Keller */ public class Spiel { private Spieler amZug; - private boolean spielgestartet = false; + private Wert gelegterWert; + private Audio audio; + private Kartensatz kartensatz; + private Spielzug spielzug; + private Computer_gegner computerGegner; + private boolean spielgestartet; private boolean aussetzen; private boolean zwei_ziehen; private int kartenZiehen; - private Kartensatz kartensatz; - private Wert gelegterWert; - private Spielzug spielzug; + private Dashboard_GUI dashboard; + public Spiel(Dashboard_GUI dashboard_gui) { + computerGegner = new Computer_gegner(); + audio = new Audio(); + kartensatz = new Kartensatz(); + spielzug = new Spielzug(); + spielgestartet = false; + dashboard = dashboard_gui; + } public boolean getAussetzen() { return aussetzen; @@ -40,36 +52,58 @@ public class Spiel { } + public Spieler getamZug() { + return amZug; + } + + /** - * alterniert zwischen Spieler und Computer und legt Beginner fest + * Organisiert den Spielablauf */ - private void spiel() { - if(!spielgestartet) { + public void spiel(Dashboard_GUI dashboard) { + //Spiel nicht gestartet + if(!spielgestartet) { + System.out.println("Spiel gestartet."); Random zufallszahl = new Random(); - int zahl = zufallszahl.nextInt(1); + int zahl = zufallszahl.nextInt(2); if(zahl == 1) { //Starter durch zufall bestimmen amZug = Spieler.SPIELER; + System.out.println("Spieler startet"); } - else { + else { amZug = Spieler.COMPUTER; + System.out.println("Computer startet"); } spielgestartet = true; for(int i = 0; i < 7; i++) { //Jeder bekommt 7 Karten kartensatz.ziehen(Spieler.COMPUTER); kartensatz.ziehen(Spieler.SPIELER); } - int kartenindex = zufallszahl.nextInt(31); + int kartenindex = zufallszahl.nextInt(32); while(kartensatz.getHand(Spieler.COMPUTER).contains(kartenindex)||kartensatz.getHand(Spieler.SPIELER).contains(kartenindex)) { - kartenindex = zufallszahl.nextInt(31); + kartenindex = zufallszahl.nextInt(32); } kartensatz.ablegen(kartenindex); //nicht in der Hand befindliche Karte zum Start aufdecken + System.out.println("Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); + System.out.println("Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); return; - } + } + //Spiel bereits gestartet if(amZug == Spieler.SPIELER) { amZug = Spieler.COMPUTER; + dashboard.aktualisiereGUI(); //Komplette GUI wird aktualisiert + System.out.println("Computer am Zug"); + //wenn möglich Computer soll Karte legen + if(spielzug.zugMoeglich(Spieler.COMPUTER)) { + //karteLegen(computerGegner.cpu_Zug()); + } + //andernfalls soll gezogen werden + else karteZiehen(); } else { amZug= Spieler.SPIELER; + System.out.println("Spieler am Zug"); + // Warten auf GUI Eingabe } } @@ -78,44 +112,66 @@ public class Spiel { * falls eine Karte gelegt werden kann wird diese gelegt * @param kartenindex */ - private void karteLegen(int kartenindex) { //WÜNSCHER? - if(pruefeHand(amZug)) { + public void karteLegen(int kartenindex) { + if(spielzug.zugMoeglich(amZug)) { + System.out.println("Legen Möglich"); if (spielzug.pruefeZug(kartenindex)) { + System.out.println("pruefeZug positiv"); kartensatz.ablegen(kartenindex); - spiel(); - effekteSetzen(); //kartenindex übergeben und anhand dessen effekte setzen - }//oder ziehen? - }// else kein Zug möglich + if(kartensatz.getHand(amZug).size() == 1) { + audio.spieleJau(); + } + if(kartensatz.getHand(amZug).isEmpty()) { + audio.spieleJauJau(); + //Spieler hat gewonnen, keine Karte mehr auf der Hand -- Was passiert? + // Spieler Gewonnen aufrufen, Punkte aktualisieren + // Highscore Page oder Startseite aufrufen + } + effekteSetzen(); + spiel(dashboard); + + } + } else { aussetzen = false; } - }//wann wird aussetzen auf false gesetzt + System.out.println("Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); + System.out.println("Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); + } /** * falls eine oder mehrere Karten gezogen werden können, wird dies ausgeführt */ - private void karteZiehen(){ - if(pruefeHand(amZug)) { + public void karteZiehen(){ + if(spielzug.zugMoeglich(amZug)) { if(zwei_ziehen) { for(int i = 0; i < kartenZiehen; i++) { kartensatz.ziehen(amZug); } kartenZiehen = 0; zwei_ziehen = false; - spiel(); + spiel(dashboard); } else { - kartensatz.ziehen(amZug); + kartensatz.ziehen(amZug); + spiel(dashboard); } } + else { + aussetzen = false; + spiel(dashboard); + } + System.out.println("Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); + System.out.println("Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); + effekteSetzen(); } /** * setzt Effekt-Variablen */ - private void effekteSetzen() { //was passiert wenn 2 gezogen wurde und dann der nächste spieler diese Funktion ausführt. + private void effekteSetzen() { gelegterWert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); if(gelegterWert == Wert.ACHT) { aussetzen = true; @@ -124,25 +180,6 @@ public class Spiel { 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; - } + System.out.println("Effekte gesetzt:\nAussetzen: " + aussetzen + "\nZwei_Ziehen: " + zwei_ziehen ); + } } diff --git a/src/de/jaujau/spiellogik/Spielzug.java b/src/de/jaujau/spiellogik/Spielzug.java index 073ef3b..98b0c2d 100644 --- a/src/de/jaujau/spiellogik/Spielzug.java +++ b/src/de/jaujau/spiellogik/Spielzug.java @@ -56,24 +56,25 @@ public class Spielzug { * @return boolean */ public boolean pruefeZug(int kartenindex) { - Spiel Spiel = Anwendung.getAktuellesSpiel(); - Kartensatz kartensatz = Spiel.getKartensatz(); - Farbe kartenfarbe = kartensatz.getKarte(kartenindex).getFARBE(); - Wert kartenwert = kartensatz.getKarte(kartenindex).getWERT(); - Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); - Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); - if(Spiel.getAussetzen() && kartenwert == Wert.ACHT) { - return true; - } - else if (Spiel.getZwei_ziehen() && kartenwert == Wert.SIEBEN) { - return true; - } - else if (!Spiel.getAussetzen() && !Spiel.getZwei_ziehen() && (kartenwert == letztekartewert || kartenfarbe == letztekartefarbe || kartenwert == Wert.BUBE)) { - return true; - } - else { - return false; - } + +// Kartensatz kartensatz = Spiel.getKartensatz(); +// +// Farbe kartenfarbe = kartensatz.getKarte(kartenindex).getFARBE(); +// Wert kartenwert = kartensatz.getKarte(kartenindex).getWERT(); +// Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); +// Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); +// if(Spiel.getAussetzen() && kartenwert == Wert.ACHT) { +// return true; +// } +// else if (Spiel.getZwei_ziehen() && kartenwert == Wert.SIEBEN) { +// return true; +// } +// else if (!Spiel.getAussetzen() && !Spiel.getZwei_ziehen() && (kartenwert == letztekartewert || kartenfarbe == letztekartefarbe || kartenwert == Wert.BUBE)) { +// return true; +// } +// else { + return true; // auf true geändert für DEBUG!! +// } } /** @@ -82,14 +83,14 @@ public class Spielzug { * @return */ public boolean zugMoeglich(Spieler spieler) { - Kartensatz kartensatz = Spiel.getKartensatz(); - boolean gefunden = false; - ArrayList Hand = kartensatz.getHand(spieler); - for (int i = 0; i < Hand.size(); i++) { - if (pruefeZug(i)) { - gefunden = true; - } - } +// Kartensatz kartensatz = Spiel.getKartensatz(); + boolean gefunden = true; // auf true geändert für DEBUG!! +// ArrayList Hand = kartensatz.getHand(spieler); +// for (int i = 0; i < Hand.size(); i++) { +// if (pruefeZug(i)) { +// gefunden = true; +// } +// } return gefunden; } diff --git a/src/img/texturen/standart/32.png b/src/img/texturen/standart/32.png index 5125077..95e2106 100755 Binary files a/src/img/texturen/standart/32.png and b/src/img/texturen/standart/32.png differ diff --git a/src/sound/jau.wav b/src/sound/jau.wav new file mode 100644 index 0000000..fb15ccf Binary files /dev/null and b/src/sound/jau.wav differ diff --git a/src/sound/jaujau.wav b/src/sound/jaujau.wav new file mode 100644 index 0000000..fb15ccf Binary files /dev/null and b/src/sound/jaujau.wav differ