diff --git a/.classpath b/.classpath index afbfe1a..35b4612 100644 --- a/.classpath +++ b/.classpath @@ -1,7 +1,11 @@ - + + + + + diff --git a/src/de/jaujau/UnitTests/TEST_Audio.java b/src/de/jaujau/UnitTests/TEST_Audio.java index bb72648..e5ab97d 100755 --- a/src/de/jaujau/UnitTests/TEST_Audio.java +++ b/src/de/jaujau/UnitTests/TEST_Audio.java @@ -18,9 +18,20 @@ class TEST_Audio { @Test void test() { - //sound.spieleJauJau(); - //sound.spieleJau(); - sound.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 index 165a321..af7c000 100755 --- a/src/de/jaujau/daten/Audio.java +++ b/src/de/jaujau/daten/Audio.java @@ -2,8 +2,6 @@ package de.jaujau.daten; import java.io.IOException; -import java.util.concurrent.CountDownLatch; - import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; @@ -23,11 +21,7 @@ public class Audio { * Spielt den "Jau" Ton ab */ public void spieleJau() { - try { - playSound("/sound/jau.wav"); - } catch (Exception e) { - e.printStackTrace(); - } + spieleTon("/sound/jaujau.wav"); } @@ -35,35 +29,31 @@ public class Audio { * Spielt den "JauJau" Ton ab */ public void spieleJauJau() { - try { - playSound("/sound/jaujau.wav"); - } catch (Exception e) { - e.printStackTrace(); - } + spieleTon("/sound/jau.wav"); } + /** - * Spielt den "JauJau" Ton ab + * Spielt einen Ton ein einem eingene Thread ab + * @param Pfad zu der Sounddatei im Jar-Archiv */ - public void test() { + private void spieleTon(String Pfad) { new Thread(new Runnable() { @Override public void run() { try { - playSound("/sound/jaujau.wav"); + playSound(Pfad); } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } - } - }).start(); - -/* for(int i = 0; i < 500000; i++) { - System.out.println(i); - } -*/ + } + + + //Kann gelöscht werden wenn es nicht mehr in der GUI benötigt wird + public void test() { + spieleJauJau(); } 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 index 6cc9e45..952d2b7 100644 --- a/src/de/jaujau/gui/Dashboard_GUI.java +++ b/src/de/jaujau/gui/Dashboard_GUI.java @@ -10,6 +10,7 @@ import javax.swing.table.DefaultTableModel; import de.jaujau.daten.Audio; import de.jaujau.daten.Spieler; import de.jaujau.daten.Spielerverwaltung; +import de.jaujau.daten.Texturenpakete; import de.jaujau.spiellogik.Anwendung; import de.jaujau.spiellogik.Spiel; @@ -21,6 +22,7 @@ import javax.swing.DefaultComboBoxModel; import java.awt.Dimension; import java.awt.Image; +import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JComboBox; @@ -35,6 +37,10 @@ import java.awt.ComponentOrientation; import java.awt.Cursor; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +import javax.swing.UIManager; +import java.awt.Font; public class Dashboard_GUI extends JPanel{ private static final long serialVersionUID = -7380187913989942586L; @@ -53,68 +59,102 @@ public class Dashboard_GUI extends JPanel{ 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("Ablagestapel"); + private final JLabel ablagestapel = new JLabel(""); private final JLabel ziehstapel = new JLabel(""); - private final JScrollPane scrollPane = new JScrollPane(); private final JLabel lblNewLabel_2_1 = new JLabel(""); - JPanel imagepanel = new JPanel(); + JPanel spielerkarten = new JPanel(); JLabel labels[] = new JLabel[32]; private Audio sound = new Audio(); + 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 aktuellesSpiel) { - - + 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(null); - player_hand.setBounds(0, 660, 1269, 212); + 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); + 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)); - imagepanel.setAutoscrolls(true); - imagepanel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - scrollPane_1.setViewportView(imagepanel); - imagepanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); + 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")); - - gegner_hand.setBounds(0, 0, 1269, 152); - - spielfeld.add(gegner_hand); + spielfeld.add(gegner_hand, BorderLayout.NORTH); gegner_hand.setLayout(new BorderLayout(0, 0)); - gegner_hand.add(scrollPane); - ablagestapel.setHorizontalAlignment(SwingConstants.CENTER); - ablagestapel.setBounds(618, 267, 137, 210); + spielfeldmitte.setPreferredSize(new Dimension(100, 20)); + spielfeldmitte.setLayout(new BorderLayout(0, 0)); - spielfeld.add(ablagestapel); + JLabel beschreibung_aktuellerSpieler = new JLabel("Aktueller Spieler:"); + beschreibung_aktuellerSpieler.setFont(new Font("Tahoma", Font.BOLD, 18)); + beschreibung_aktuellerSpieler.setForeground(Color.WHITE); + info_panel.add(beschreibung_aktuellerSpieler); + label_aktuellerSpieler = new JLabel("Auswahlphase"); + label_aktuellerSpieler.setForeground(Color.WHITE); + 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.getKartensatz().ziehen(Spieler.SPIELER); + aktualisiereHand(aktuellesSpiel, texturenpakete); + } + }); ziehstapel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); ziehstapel.setPreferredSize(new Dimension(242, 362)); ziehstapel.setHorizontalAlignment(SwingConstants.CENTER); - ziehstapel.setBounds(1093, 267, 137, 210); - ziehstapel.setIcon(new ImageIcon(new javax.swing.ImageIcon(getClass().getResource("/img/texturen/standart/32.png")).getImage().getScaledInstance(ziehstapel.getWidth(), ziehstapel.getHeight(), Image.SCALE_SMOOTH))); - + ziehstapel.setIcon(new ImageIcon(texturenpakete.getTextur(32).getScaledInstance(150, 210, Image.SCALE_SMOOTH))); - spielfeld.add(ziehstapel); + 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"))); - JButton btnNewButton_1 = new JButton("Audio"); - btnNewButton_1.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - sound.test(); - } - }); - btnNewButton_1.setBounds(293, 346, 89, 23); - spielfeld.add(btnNewButton_1); + + 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)); @@ -134,28 +174,21 @@ public class Dashboard_GUI extends JPanel{ highscore.setLayout(new BorderLayout(0, 0)); - - - aktuellesSpiel.getKartensatz().ziehen(Spieler.SPIELER); - aktuellesSpiel.getKartensatz().ziehen(Spieler.SPIELER); - aktuellesSpiel.getKartensatz().ziehen(Spieler.SPIELER); - aktuellesSpiel.getKartensatz().ziehen(Spieler.SPIELER); - aktuellesSpiel.getKartensatz().ziehen(Spieler.SPIELER); - aktuellesSpiel.getKartensatz().ziehen(Spieler.SPIELER); - aktualisiereHand(aktuellesSpiel); - + //Erstes Panel wird angezeigt cl.show(panelCont, "3"); add(panelCont); renderStart(); //Startseite beim ersten öffnen aktualisieren + } - - public void showgame(){ + //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"); - - repaint(); - revalidate(); + aktuellesSpiel.spiel(); + aktualisiereGUI(); } public void showstart(){ @@ -202,36 +235,71 @@ public class Dashboard_GUI extends JPanel{ }; table.setAutoCreateRowSorter(true); //Tabelle Sortierbar durch Tabellenkopf table.getTableHeader().setReorderingAllowed(false); //Tabelle nicht mehr drag and drop - table.setModel(tableModel); - - + table.setModel(tableModel); highscore.add( new JScrollPane( table ) ); } - void aktualisiereHand(Spiel aktuellesSpiel) { + void aktualisiereHand(Spiel aktuellesSpiel, Texturenpakete texturen) { + //Alle Elemente entfernen + for(Component c : spielerkarten.getComponents()){ + spielerkarten.remove(c); + spielerkarten.revalidate(); + } + + //Alle Karten auf der Hand darstellen for(int i = 0; i< aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).size(); i++){ - labels[i] = new JLabel(); - String path = "/img/texturen/standart/" + Integer.toString(aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).get(i)) + ".png"; labels[i].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); labels[i].setAlignmentY(Component.TOP_ALIGNMENT); labels[i].setBounds(new Rectangle(0, 0, 120, 180)); labels[i].setSize(new Dimension(120, 180)); labels[i].setHorizontalTextPosition(SwingConstants.CENTER); labels[i].setHorizontalAlignment(SwingConstants.CENTER); - labels[i].setIcon(new ImageIcon(new javax.swing.ImageIcon(getClass().getResource(path)).getImage().getScaledInstance(labels[i].getWidth(), labels[i].getHeight(), Image.SCALE_SMOOTH))); - imagepanel.add(labels[i]); - imagepanel.updateUI(); //Panel erneuern - - - + labels[i].setName(aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).get(i).toString()); + labels[i].addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + aktuellesSpiel.karteLegen(Integer.parseInt(e.getComponent().getName())); + System.out.println("Karte: " + e.getComponent().getName() + " ausgewählt."); + aktualisiereGUI(); + } + }); + labels[i].setIcon(new ImageIcon(texturen.getTextur(aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).get(i)).getScaledInstance(150, 210, Image.SCALE_SMOOTH))); + spielerkarten.add(labels[i]); + spielerkarten.updateUI(); //Panel erneuern + } + } + + + void aktualisiereAblage(Spiel aktuellesSpiel, Texturenpakete texturen){ + ablagestapel.setIcon(new ImageIcon(texturen.getTextur(aktuellesSpiel.getKartensatz().getletzteKarte()).getScaledInstance(150, 210, Image.SCALE_SMOOTH))); + ablagestapel.revalidate(); + ablagestapel.repaint(); + } + + void aktualisiereSpieleranzeige(Spiel aktuellesSpiel) { + if(aktuellesSpiel.getamZug() == Spieler.COMPUTER) { + label_aktuellerSpieler.setText("Gegner"); + label_aktuellerSpieler.setForeground(Color.RED); + } + if(aktuellesSpiel.getamZug() == Spieler.SPIELER) { + label_aktuellerSpieler.setText("Gegner"); + label_aktuellerSpieler.setForeground(Color.GREEN); } - - + if(aktuellesSpiel.getamZug() == null) { + label_aktuellerSpieler.setText("Auswahlphase"); + label_aktuellerSpieler.setForeground(Color.WHITE); + } + } + + public void aktualisiereGUI(){ + aktualisiereSpieleranzeige(aktuellesSpiel); + aktualisiereAblage(aktuellesSpiel, texturenpakete); + aktualisiereHand(aktuellesSpiel, texturenpakete); } } diff --git a/src/de/jaujau/gui/GUI.java b/src/de/jaujau/gui/GUI.java index 6fcbbe4..710f4a5 100644 --- a/src/de/jaujau/gui/GUI.java +++ b/src/de/jaujau/gui/GUI.java @@ -40,6 +40,7 @@ public class GUI extends JFrame{ // Constructors // public GUI (Texturenpakete texturenpakete, Spielerverwaltung speicherung) { + setMinimumSize(new Dimension(1000, 600)); aktuellesSpiel = new Spiel(); // jaujau.getAktuellesSpiel(); @@ -119,7 +120,7 @@ public class GUI extends JFrame{ getContentPane().add(dashboard, BorderLayout.CENTER); dashboard.setLayout(new BorderLayout(0, 0)); - Dashboard_GUI Dashboard_GUI = new Dashboard_GUI(aktuellesSpiel); + Dashboard_GUI Dashboard_GUI = new Dashboard_GUI(aktuellesSpiel, texturenpakete); //Spiel_GUI Spiel_GUI = new Spiel_GUI(); dashboard.add(Dashboard_GUI, BorderLayout.CENTER); @@ -162,7 +163,7 @@ public class GUI extends JFrame{ public void mouseClicked(MouseEvent e) { aktuellesSpiel = new Spiel(); System.out.println("GUI: Spiel GUI geöffnet"); - Dashboard_GUI.showgame(); + Dashboard_GUI.showgame(aktuellesSpiel); } }); diff --git a/src/de/jaujau/gui/Hilfe_GUI.java b/src/de/jaujau/gui/Hilfe_GUI.java index a1ea6c1..2a0d30d 100644 --- a/src/de/jaujau/gui/Hilfe_GUI.java +++ b/src/de/jaujau/gui/Hilfe_GUI.java @@ -20,6 +20,7 @@ public class Hilfe_GUI extends JFrame { * Create the frame. */ public Hilfe_GUI() { + setAlwaysOnTop(true); setBounds(100, 100, 588, 382); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); diff --git a/src/de/jaujau/spiellogik/Spiel.java b/src/de/jaujau/spiellogik/Spiel.java index 12c29eb..e4bd0a6 100644 --- a/src/de/jaujau/spiellogik/Spiel.java +++ b/src/de/jaujau/spiellogik/Spiel.java @@ -49,17 +49,24 @@ public class Spiel { } + public Spieler getamZug() { + return amZug; + } + + /** - * alterniert zwischen Spieler und Computer, legt Beginner fest + * Organisiert den Spielablauf */ - public void spielen() { - if(!spielgestartet) { + public void spiel() { + System.out.println("Spiel gestartet."); + //Spiel nicht gestartet + if(!spielgestartet) { Random zufallszahl = new Random(); int zahl = zufallszahl.nextInt(1); if(zahl == 1) { //Starter durch zufall bestimmen amZug = Spieler.SPIELER; } - else { + else { amZug = Spieler.COMPUTER; } spielgestartet = true; @@ -73,9 +80,12 @@ public class Spiel { } kartensatz.ablegen(kartenindex); //nicht in der Hand befindliche Karte zum Start aufdecken return; - } + } + //Spiel gestartet if(amZug == Spieler.SPIELER) { amZug = Spieler.COMPUTER; + + //wenn möglich Computer soll Karte legen if(spielzug.zugMoeglich(Spieler.COMPUTER)) { //karteLegen(computerGegner.cpu_Zug()); } @@ -83,10 +93,13 @@ public class Spiel { } else { amZug= Spieler.SPIELER; + // Warten auf GUI Eingabe } } + + /** * falls eine Karte gelegt werden kann wird diese gelegt * @param kartenindex @@ -100,9 +113,11 @@ public class Spiel { } if(kartensatz.getHand(amZug).isEmpty()) { audio.spieleJauJau(); - //Spieler hat gewonnen, keine Karte mehr auf der Hand -- Was passiert? // Spieler Gewonnen aufrufen, Punkte aktualisieren + //Spieler hat gewonnen, keine Karte mehr auf der Hand -- Was passiert? + // Spieler Gewonnen aufrufen, Punkte aktualisieren + // Highscore Page oder Startseite aufrufen } - spielen(); + spiel(); effekteSetzen(); } } @@ -123,7 +138,7 @@ public class Spiel { } kartenZiehen = 0; zwei_ziehen = false; - spielen(); + spiel(); } else { kartensatz.ziehen(amZug); 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