From 820694917aad5b02c2c83146cef0cb8be645c576 Mon Sep 17 00:00:00 2001 From: Sebastian Kacza Date: Mon, 11 Jan 2021 11:48:20 +0100 Subject: [PATCH 01/14] =?UTF-8?q?Textur=20GUI=20Kommentiert=20und=20Lavel?= =?UTF-8?q?=20Anzeige=20zuzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/jaujau/gui/texturenauswaehlen_GUI.java | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/de/jaujau/gui/texturenauswaehlen_GUI.java b/src/de/jaujau/gui/texturenauswaehlen_GUI.java index ee83278..0ab0070 100644 --- a/src/de/jaujau/gui/texturenauswaehlen_GUI.java +++ b/src/de/jaujau/gui/texturenauswaehlen_GUI.java @@ -1,10 +1,9 @@ package de.jaujau.gui; -import java.awt.BorderLayout; + import java.awt.Font; import java.awt.Image; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; + import javax.swing.ImageIcon; import javax.swing.JButton; @@ -20,16 +19,23 @@ import javax.swing.JFileChooser; /** * Klasse texturenauswaehlen_GUI + * @author Sebastian Kacza + * Diese Klasse erstelt ein Fenster für die Texturenpaket auswahl */ public class texturenauswaehlen_GUI extends JFrame{ private static final long serialVersionUID = 1L; private JPanel contentPane; private Texturenpakete pakete; - private JComboBox comboBox; + private JComboBox comboBox; private JLabel vorschaubild; private JButton speichern, hinzufuegen, schliessen; + + /** + * Konstruktor fpr das Fenster + * @param texturenpakete + */ public texturenauswaehlen_GUI (Texturenpakete texturenpakete) { pakete = texturenpakete; erstelleFenster(); @@ -37,6 +43,9 @@ public class texturenauswaehlen_GUI extends JFrame{ } + /** + * Erstelt alle komponenten des Fensters + */ private void erstelleFenster() { //Fenster größen fetslegen setAlwaysOnTop(true); @@ -81,13 +90,19 @@ public class texturenauswaehlen_GUI extends JFrame{ //Auswahl Box - comboBox = new JComboBox(); + comboBox = new JComboBox(); comboBox.setBounds(117, 69, 351, 25); contentPane.add(comboBox); aktualisiereInhalt(); } + + + /** + * Öffent einen auswahl dialog zu Öfnnen einer Datei + * Beo klick auf OK wird das Paket hinzugefügt + */ private void paketHinzufuegeb() { //Quelle: https://www.java-tutorial.org/jfilechooser.html @@ -101,31 +116,43 @@ public class texturenauswaehlen_GUI extends JFrame{ pakete.addPaket(chooser.getSelectedFile().toString()); aktualisiereInhalt(); } - } + /** + * Schießt das Auswahlfenster + */ private void schliessen() { this.setVisible(false); } + + /** + * Speichert die Auswahl des akutellen Paketes + */ private void speichern() { pakete.setAktivesPaket(comboBox.getSelectedIndex()); aktualisiereBild(); - } + + /** + * Aktualaiset die Inhalte der ComboBox + */ private void aktualisiereInhalt() { comboBox.removeAllItems(); for(int i = 0; i < pakete.getAnzahlPakete(); i++) { - comboBox.addItem(pakete.getName(i)); + comboBox.addItem(pakete.getName(i) + " [Level " + pakete.getLevel(i) + "]"); } comboBox.setSelectedIndex(pakete.getAktivesPaket()); aktualisiereBild(); } + /** + * Aktualisiert das Vorschaubild + */ private void aktualisiereBild() { vorschaubild.setIcon(new ImageIcon(pakete.getTextur(32).getScaledInstance(150, 210, Image.SCALE_SMOOTH))); } From 31325b2fabfd5b1c2779d10ae085c53b1c92bcda Mon Sep 17 00:00:00 2001 From: Sebastian Kacza Date: Mon, 11 Jan 2021 11:48:48 +0100 Subject: [PATCH 02/14] =?UTF-8?q?Funktion=20zum=20Pr=C3=BCfen=20des=20Spie?= =?UTF-8?q?lerlevels=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/jaujau/daten/Texturenpakete.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/de/jaujau/daten/Texturenpakete.java b/src/de/jaujau/daten/Texturenpakete.java index d9a6472..6556c25 100644 --- a/src/de/jaujau/daten/Texturenpakete.java +++ b/src/de/jaujau/daten/Texturenpakete.java @@ -18,7 +18,7 @@ public class Texturenpakete { TexturenpaketListe = new ArrayList(); //Hinzufügen eines Internen Texturenpaketes - TexturenpaketListe.add(new TexturenpaketIntern("/img/texturen/standart", "JauJau Standart Texturen Französisch", 0)); + TexturenpaketListe.add(new TexturenpaketIntern("/img/texturen/standart", "JauJau Französisch", 0)); //Internes Texturenpaket als Aktiv festlegen setAktivesPaket(0); @@ -118,5 +118,17 @@ public class Texturenpakete { } return Texturen[32]; } + + + /** + * Prüft ob mit dem Aktuellen level das akteulle Texturenpaket genutzet werden kann + * Wenn das nicht zutrifft wird das erste Standart Paket genutzt + * @param Level des aktuellen Spielers + */ + public void pruefeLevel(int Level) { + if(TexturenpaketListe.get(AktivesPaket).getLevel() > Level) { + setAktivesPaket(0); + } + } } From fc42ab2238c90791c8a91916ba82551c122c171a Mon Sep 17 00:00:00 2001 From: Sebastian Kacza Date: Mon, 11 Jan 2021 14:21:35 +0100 Subject: [PATCH 03/14] Debug Ausgaben ein/ausschaltbar gemacht --- src/de/jaujau/daten/Kartensatz.java | 4 +++- src/de/jaujau/daten/Texturenpaket.java | 20 ++++++++++--------- src/de/jaujau/daten/Texturenpakete.java | 7 +++++-- src/de/jaujau/gui/texturenauswaehlen_GUI.java | 7 ++++--- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/de/jaujau/daten/Kartensatz.java b/src/de/jaujau/daten/Kartensatz.java index 6c9c066..9fb0eec 100644 --- a/src/de/jaujau/daten/Kartensatz.java +++ b/src/de/jaujau/daten/Kartensatz.java @@ -10,6 +10,7 @@ import java.util.Random; public class Kartensatz { private Karte kartensatz[]; private int letztekarte; + private boolean debug; /** * Konstruktor für den Kartensatz @@ -19,6 +20,7 @@ public class Kartensatz { */ public Kartensatz() { + debug = true; kartensatz = new Karte[32]; //Standart Skat Kartensatz erstellen @@ -116,7 +118,7 @@ public class Kartensatz { } } else { - System.out.println("Keine Karten zum ziehen verfügbar!"); + if(debug)System.out.println("Keine Karten zum ziehen verfügbar!"); return false; } return false; diff --git a/src/de/jaujau/daten/Texturenpaket.java b/src/de/jaujau/daten/Texturenpaket.java index 38347f3..4272cb9 100755 --- a/src/de/jaujau/daten/Texturenpaket.java +++ b/src/de/jaujau/daten/Texturenpaket.java @@ -42,6 +42,7 @@ public class Texturenpaket { protected String name; //Protektet weil die abgeleitet Klasse TexturenpaketIntern auf die Werte zugreifen können muss protected int level; private final String pfad; + private boolean debug; /** @@ -49,6 +50,7 @@ public class Texturenpaket { * @param Pfad zu der Zip-Datei des Texturenpaketes */ public Texturenpaket(String Pfad) { + debug = true; name = "Nicht geladen"; level = 0; pfad = Pfad; @@ -60,7 +62,7 @@ public class Texturenpaket { * @return Paket vollständig geladen, true/false */ public boolean ladePacket() { - System.out.println("TEXTURENPAKET: Lade Paket"); + if(debug)System.out.println("TEXTURENPAKET: Lade Paket"); if(testePaket()) { //Paket ist OK @@ -82,12 +84,12 @@ public class Texturenpaket { //Name Auslesen if(Spalte[0].equals("name")) { name = Spalte[1]; - System.out.println("TEXTURENPAKET: Name: " + name); + if(debug)System.out.println("TEXTURENPAKET: Name: " + name); } //Level Auslesen if(Spalte[0].equals("level")) { level = Integer.parseInt(Spalte[1]); - System.out.println("TEXTURENPAKET: Level: " + level); + if(debug)System.out.println("TEXTURENPAKET: Level: " + level); } } @@ -166,7 +168,7 @@ public class Texturenpaket { * @return Paket vollständig, true/false */ private boolean testePaket() { - System.out.println("TEXTURENPAKET: Paket auf Fehler untersuchen:"); + if(debug)System.out.println("TEXTURENPAKET: Paket auf Fehler untersuchen:"); //Testen ob Zip-Datei vorhanden und lesabar ist File zipDatei = new File(pfad); if(zipDatei.exists() || zipDatei.canRead()) { @@ -184,7 +186,7 @@ public class Texturenpaket { while(scanner.hasNext()) { //Prüfen ob Konfigurations Datei die Einträge "name" und "level" enthält String Zeile = scanner.nextLine(); - System.out.println("TEXTURENPAKET: Konfigzeile:" + Zeile); + if(debug)System.out.println("TEXTURENPAKET: Konfigzeile:" + Zeile); if(Zeile.contains("name:")) { PaketName = true; } @@ -194,7 +196,7 @@ public class Texturenpaket { } scanner.close(); if(!PaketName || !PaketLevel) { - System.out.println("TEXTURENPAKET: Paket Konfiguration fehlerhaft"); + if(debug)System.out.println("TEXTURENPAKET: Paket Konfiguration fehlerhaft"); paketDatei.close(); return false; } @@ -205,10 +207,10 @@ public class Texturenpaket { InputStream eingabeStromTextur = paketDatei.getInputStream(zipInhaltTextur); Image bild = ImageIO.read(eingabeStromTextur); if(bild == null) { - System.out.println("TEXTURENPAKET: Datei: " + i + ".png nicht gefunden"); + if(debug)System.out.println("TEXTURENPAKET: Datei: " + i + ".png nicht gefunden"); return false; } - System.out.println("TEXTURENPAKET: Datei: " + i + ".png OK!"); + if(debug)System.out.println("TEXTURENPAKET: Datei: " + i + ".png OK!"); } paketDatei.close(); @@ -229,7 +231,7 @@ public class Texturenpaket { } //Alles OK - System.out.println("TEXTURENPAKET: Texturen Paket ist OK"); + if(debug)System.out.println("TEXTURENPAKET: Texturen Paket ist OK"); return true; } } diff --git a/src/de/jaujau/daten/Texturenpakete.java b/src/de/jaujau/daten/Texturenpakete.java index 6556c25..cbb13ee 100644 --- a/src/de/jaujau/daten/Texturenpakete.java +++ b/src/de/jaujau/daten/Texturenpakete.java @@ -12,9 +12,12 @@ public class Texturenpakete { private ArrayList TexturenpaketListe; private BufferedImage Texturen[]; private int AktivesPaket; + private boolean debug; public Texturenpakete(){ + debug = true; + TexturenpaketListe = new ArrayList(); //Hinzufügen eines Internen Texturenpaketes @@ -80,7 +83,7 @@ public class Texturenpakete { if((PaketNr >= 0) && (PaketNr < TexturenpaketListe.size())) { AktivesPaket = PaketNr; Texturen = TexturenpaketListe.get(PaketNr).getTexturen(); - System.out.println("TEXTURENPAKETE: Paket (" + PaketNr + ") '" + TexturenpaketListe.get(PaketNr).getName() + "' aktiv gesetzt!"); + if(debug)System.out.println("TEXTURENPAKETE: Paket (" + PaketNr + ") '" + TexturenpaketListe.get(PaketNr).getName() + "' aktiv gesetzt!"); return true; } return false; @@ -98,7 +101,7 @@ public class Texturenpakete { Texturenpaket NeuesPaket = new Texturenpaket(Pfad); if(NeuesPaket.ladePacket()) { TexturenpaketListe.add(NeuesPaket); - System.out.println("TEXTURENPAKETE: Paket '" + NeuesPaket.getName() + "' hinzugfügt!"); + if(debug)System.out.println("TEXTURENPAKETE: Paket '" + NeuesPaket.getName() + "' hinzugfügt!"); return true; } diff --git a/src/de/jaujau/gui/texturenauswaehlen_GUI.java b/src/de/jaujau/gui/texturenauswaehlen_GUI.java index 0ab0070..a005893 100644 --- a/src/de/jaujau/gui/texturenauswaehlen_GUI.java +++ b/src/de/jaujau/gui/texturenauswaehlen_GUI.java @@ -98,10 +98,9 @@ public class texturenauswaehlen_GUI extends JFrame{ } - /** * Öffent einen auswahl dialog zu Öfnnen einer Datei - * Beo klick auf OK wird das Paket hinzugefügt + * Bei klick auf OK wird das Paket hinzugefügt */ private void paketHinzufuegeb() { //Quelle: https://www.java-tutorial.org/jfilechooser.html @@ -127,11 +126,13 @@ public class texturenauswaehlen_GUI extends JFrame{ } - /** * Speichert die Auswahl des akutellen Paketes */ private void speichern() { +// if(spielerlevel >= pakete.getLevel(comboBox.getSelectedIndex())) { +// +// } pakete.setAktivesPaket(comboBox.getSelectedIndex()); aktualisiereBild(); } From d590449289200398c41c07169c92dd0c29ad1554 Mon Sep 17 00:00:00 2001 From: mokoe Date: Mon, 11 Jan 2021 14:28:14 +0100 Subject: [PATCH 04/14] Debug prints durch debug boolean kontrolliert --- src/de/jaujau/spiellogik/Computer_gegner.java | 37 +++++++--- src/de/jaujau/spiellogik/Spielzug.java | 73 ++++++------------- 2 files changed, 49 insertions(+), 61 deletions(-) diff --git a/src/de/jaujau/spiellogik/Computer_gegner.java b/src/de/jaujau/spiellogik/Computer_gegner.java index 98d033c..ba56817 100644 --- a/src/de/jaujau/spiellogik/Computer_gegner.java +++ b/src/de/jaujau/spiellogik/Computer_gegner.java @@ -30,6 +30,7 @@ public class Computer_gegner { private Kartensatz kartensatz; private boolean siebenInHand; private boolean achtInHand; + private boolean debug = false; // // Constructors // @@ -103,7 +104,9 @@ public class Computer_gegner { Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE(); Wert wertHK = kartensatz.getKarte(hand.get(i)).getWERT(); if((farbeHK == letztekartefarbe && wertHK == Wert.ACHT) || (wertHK == letztekartewert && wertHK == Wert.ACHT)) { - System.out.println("COMPUTER: Ausnahme 1"); + if (debug) { + System.out.println("COMPUTER: Ausnahme 1"); + } return hand.get(i); } } @@ -116,7 +119,9 @@ public class Computer_gegner { Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE(); Wert wertHK = kartensatz.getKarte(hand.get(i)).getWERT(); if((farbeHK == letztekartefarbe && wertHK == Wert.SIEBEN) || (wertHK == letztekartewert && wertHK == Wert.SIEBEN)) { - System.out.println("COMPUTER: Ausnahme 2"); + if (debug) { + System.out.println("COMPUTER: Ausnahme 2"); + } return hand.get(i); } } @@ -128,39 +133,53 @@ public class Computer_gegner { //Wählt aus, welche Karte gelegt wird if ((aussetzen || ziehen) && wertInHand) { //Muss der Computer aussetzen oder ziehen, versucht er eine passende Konterkarte zu legen rueckgabeindex = wertLegen(letztekartewert); - System.out.println("COMPUTER: Fall 1"); + if (debug) { + System.out.println("COMPUTER: Fall 1"); + } } 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); - System.out.println("COMPUTER: Fall 2"); + if (debug) { + System.out.println("COMPUTER: Fall 2"); + } } else if(wertInHand && !aussetzen && !ziehen) { //Hat der Computer nicht die passende Farbe, aber einen passenden Wert, legt er diesen rueckgabeindex = wertLegen(letztekartewert); - System.out.println("COMPUTER: Fall 3"); + if (debug) { + System.out.println("COMPUTER: Fall 3"); + } } } else { if(wertInHand && !aussetzen && !ziehen) { //Hat der Computer die Wert auf der Hand, versucht er diese zu legen rueckgabeindex = wertLegen(letztekartewert); - System.out.println("COMPUTER: Fall 4"); + if (debug) { + System.out.println("COMPUTER: Fall 4"); + } } else if(farbeInHand && !aussetzen && !ziehen) { //Hat der Computer nicht den passenden Wert, aber eine passende Farbe, legt er diese rueckgabeindex = farbeLegen(letztekartefarbe); - System.out.println("COMPUTER: Fall 5"); + if (debug) { + System.out.println("COMPUTER: Fall 5"); + } } } } 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); - System.out.println("COMPUTER: Fall 6"); + if (debug) { + System.out.println("COMPUTER: Fall 6"); + } } else if(aussetzen && !wertInHand) { //Muss der Computer aussetzen und kann nicht reagieren, gibt er eine -2 zurück rueckgabeindex = -2; - System.out.println("COMPUTER: Fall 7"); + if (debug) { + System.out.println("COMPUTER: Fall 7"); + } } diff --git a/src/de/jaujau/spiellogik/Spielzug.java b/src/de/jaujau/spiellogik/Spielzug.java index 6371778..5050543 100644 --- a/src/de/jaujau/spiellogik/Spielzug.java +++ b/src/de/jaujau/spiellogik/Spielzug.java @@ -21,6 +21,7 @@ public class Spielzug { // private Kartensatz kartensatz; + private boolean debug = true; // // Constructors @@ -46,28 +47,40 @@ public class Spielzug { Wert kartenwert = kartensatz.getKarte(kartenindex).getWERT(); Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); - System.out.println("SPIELZUG: Versucht Karte für Funktion: " + kartenindex); - System.out.println("SPIELZUG: Letzte Karte für Funktion: " + letztekartewert + " " + letztekartefarbe); + if (debug) { + System.out.println("SPIELZUG: Versucht Karte für Funktion: " + kartenindex); + System.out.println("SPIELZUG: Letzte Karte für Funktion: " + letztekartewert + " " + letztekartefarbe); + } if(aussetzen && kartenwert == Wert.ACHT) { - System.out.println("SPIELZUG: Bedingung 1"); + if (debug) { + System.out.println("SPIELZUG: Bedingung 1"); + } return true; } else if(aussetzen && !(kartenwert == Wert.ACHT)) { - System.out.println("SPIELZUG: Bedingung 2"); + if (debug) { + System.out.println("SPIELZUG: Bedingung 2"); + } return false; } else if (ziehen && kartenwert == Wert.SIEBEN) { - System.out.println("SPIELZUG: Bedingung 3"); + if (debug) { + System.out.println("SPIELZUG: Bedingung 3"); + } return true; } else if (!aussetzen && !ziehen && ((kartenwert == letztekartewert || kartenfarbe == letztekartefarbe) || kartenwert == Wert.BUBE)) { - System.out.println("SPIELZUG: Bedingung 4"); - System.out.println("SPIELZUG: Aussetzen: " + aussetzen + " ziehen:" + ziehen); + if (debug) { + System.out.println("SPIELZUG: Bedingung 4"); + System.out.println("SPIELZUG: Aussetzen: " + aussetzen + " ziehen:" + ziehen); + } return true; } else { - System.out.println("SPIELZUG: Bedingung 5"); + if (debug) { + System.out.println("SPIELZUG: Bedingung 5"); + } return false; } } @@ -90,48 +103,4 @@ public class Spielzug { } return gefunden; } - //// - - - // - // Methods - // - - - // - // Accessor methods - // - - // - // Other methods - // - - /** - * @param spieler - * @param kartensatz - */ - public static void legen(Spielerdaten spieler, Kartensatz kartensatz) - { - } - - - /** - * @param spieler - * @param kartensatz - */ - public static void aussetzen(Spielerdaten spieler, Kartensatz kartensatz) - { - } - - - /** - * @param spieler - * @param kartensatz - * @param anzahl - */ - public static void ziehen(Spielerdaten spieler, Kartensatz kartensatz, int anzahl) - { - } - - } From 75d3cae4d3de0c300696f7e8675f3551786c4b02 Mon Sep 17 00:00:00 2001 From: mokoe Date: Mon, 11 Jan 2021 14:29:00 +0100 Subject: [PATCH 05/14] Debug ausgabe jetzt ausschaltbar --- src/de/jaujau/spiellogik/Computer_gegner.java | 2 +- src/de/jaujau/spiellogik/Spielzug.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/jaujau/spiellogik/Computer_gegner.java b/src/de/jaujau/spiellogik/Computer_gegner.java index ba56817..cf8848d 100644 --- a/src/de/jaujau/spiellogik/Computer_gegner.java +++ b/src/de/jaujau/spiellogik/Computer_gegner.java @@ -130,7 +130,7 @@ public class Computer_gegner { - //Wählt aus, welche Karte gelegt wird + //Wählt aus, welche Karte gelegt wird if ((aussetzen || ziehen) && wertInHand) { //Muss der Computer aussetzen oder ziehen, versucht er eine passende Konterkarte zu legen rueckgabeindex = wertLegen(letztekartewert); if (debug) { diff --git a/src/de/jaujau/spiellogik/Spielzug.java b/src/de/jaujau/spiellogik/Spielzug.java index 5050543..e19a1f6 100644 --- a/src/de/jaujau/spiellogik/Spielzug.java +++ b/src/de/jaujau/spiellogik/Spielzug.java @@ -23,7 +23,7 @@ public class Spielzug { private Kartensatz kartensatz; private boolean debug = true; - // + // // Constructors // public Spielzug (Kartensatz karten) { From 4708fb0e1f622d714d284b242da3db3f389a0eb3 Mon Sep 17 00:00:00 2001 From: ekresse Date: Mon, 11 Jan 2021 14:51:13 +0100 Subject: [PATCH 06/14] GUI Update --- src/de/jaujau/gui/Dashboard_GUI.java | 26 ++++++++++++++++++++------ src/de/jaujau/gui/GUI.java | 1 - 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/de/jaujau/gui/Dashboard_GUI.java b/src/de/jaujau/gui/Dashboard_GUI.java index 45b1719..c646457 100644 --- a/src/de/jaujau/gui/Dashboard_GUI.java +++ b/src/de/jaujau/gui/Dashboard_GUI.java @@ -40,7 +40,7 @@ public class Dashboard_GUI extends JPanel{ Spielerverwaltung spielerverwaltung = new Spielerverwaltung(); private final JPanel panel = new JPanel(); private final JPanel panel_1 = new JPanel(); - private JComboBox comboBox = new JComboBox(); + private JComboBox spielername = 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(); @@ -69,6 +69,7 @@ public class Dashboard_GUI extends JPanel{ private final JLabel label_final = new JLabel("Spiel beendet"); private final JScrollPane gegnerkartenpane = new JScrollPane(); private final JPanel gegnerkarten = new JPanel(); + private final JButton getname = new JButton("setzen"); //Moving Image @@ -232,9 +233,16 @@ public class Dashboard_GUI extends JPanel{ JLabel lblNewLabel = new JLabel("Spielername:"); panel.add(lblNewLabel); - comboBox.setMinimumSize(new Dimension(60, 22)); - comboBox.setEditable(true); - panel.add(comboBox); + spielername.setMinimumSize(new Dimension(60, 22)); + spielername.setEditable(true); + panel.add(spielername); + panel.add(getname); + getname.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + getspielername(); + } + }); start.add(panel_1, BorderLayout.CENTER); start.add(panel_2, BorderLayout.SOUTH); @@ -284,9 +292,9 @@ public class Dashboard_GUI extends JPanel{ public void renderStart(){ - comboBox.removeAllItems(); + spielername.removeAllItems(); for(int i = 0; i Date: Mon, 11 Jan 2021 14:54:43 +0100 Subject: [PATCH 07/14] =?UTF-8?q?Level=20Anzeige=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/jaujau/gui/Dashboard_GUI.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/de/jaujau/gui/Dashboard_GUI.java b/src/de/jaujau/gui/Dashboard_GUI.java index c646457..bdd4710 100644 --- a/src/de/jaujau/gui/Dashboard_GUI.java +++ b/src/de/jaujau/gui/Dashboard_GUI.java @@ -70,6 +70,9 @@ public class Dashboard_GUI extends JPanel{ private final JScrollPane gegnerkartenpane = new JScrollPane(); private final JPanel gegnerkarten = new JPanel(); private final JButton getname = new JButton("setzen"); + private final JPanel panel_3 = new JPanel(); + private final JLabel level_beschreibung = new JLabel("Aktuelles Level:"); + private final JLabel level_count = new JLabel("0"); //Moving Image @@ -244,6 +247,18 @@ public class Dashboard_GUI extends JPanel{ } }); start.add(panel_1, BorderLayout.CENTER); + panel_1.setLayout(new BorderLayout(0, 0)); + panel_3.setPreferredSize(new Dimension(100, 50)); + + panel_1.add(panel_3, BorderLayout.NORTH); + level_beschreibung.setHorizontalTextPosition(SwingConstants.CENTER); + level_beschreibung.setHorizontalAlignment(SwingConstants.CENTER); + level_beschreibung.setFont(new Font("Tahoma", Font.PLAIN, 22)); + + panel_3.add(level_beschreibung); + level_count.setFont(new Font("Tahoma", Font.PLAIN, 22)); + + panel_3.add(level_count); start.add(panel_2, BorderLayout.SOUTH); From 93e62e1b0116a7ba8ec98a52cfd9e3ff6bb0e58e Mon Sep 17 00:00:00 2001 From: ekresse Date: Mon, 11 Jan 2021 15:08:21 +0100 Subject: [PATCH 08/14] texturenauswahl added --- src/de/jaujau/gui/Dashboard_GUI.java | 1 + src/de/jaujau/gui/GUI.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/de/jaujau/gui/Dashboard_GUI.java b/src/de/jaujau/gui/Dashboard_GUI.java index bdd4710..7accde5 100644 --- a/src/de/jaujau/gui/Dashboard_GUI.java +++ b/src/de/jaujau/gui/Dashboard_GUI.java @@ -277,6 +277,7 @@ public class Dashboard_GUI extends JPanel{ public void showgame(Spiel Spiel){ //Neues Spiel wird übergeben aktuellesSpiel = Spiel; + texturenpakete.pruefeLevel(spielerverwaltung.getLevel()); System.out.println("DASHBOARD: Game darstellen"); cl.show(panelCont, "2"); showwunsch(false); diff --git a/src/de/jaujau/gui/GUI.java b/src/de/jaujau/gui/GUI.java index c8d5035..19c4e0f 100644 --- a/src/de/jaujau/gui/GUI.java +++ b/src/de/jaujau/gui/GUI.java @@ -193,7 +193,8 @@ public class GUI extends JFrame{ texturenlabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - texturenauswaehlen_GUI texturenauswahl = new texturenauswaehlen_GUI(texturenpakete); + texturenauswaehlen_GUI texturenauswahl = new texturenauswaehlen_GUI(texturenpakete, speicherung); + System.out.println("GUI: Start geöffnet"); texturenauswahl.setVisible(true); } }); From 8d4aa295666f4630aebecabb93b4d646c7e4a777 Mon Sep 17 00:00:00 2001 From: Sebastian Kacza Date: Mon, 11 Jan 2021 15:09:23 +0100 Subject: [PATCH 09/14] =?UTF-8?q?Spieler=20Level=20pr=C3=BCfung=20bei=20Te?= =?UTF-8?q?xturenauswahl=20vorbereitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/jaujau/gui/texturenauswaehlen_GUI.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/de/jaujau/gui/texturenauswaehlen_GUI.java b/src/de/jaujau/gui/texturenauswaehlen_GUI.java index a005893..4319eca 100644 --- a/src/de/jaujau/gui/texturenauswaehlen_GUI.java +++ b/src/de/jaujau/gui/texturenauswaehlen_GUI.java @@ -13,6 +13,7 @@ import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; +import de.jaujau.daten.Spielerverwaltung; import de.jaujau.daten.Texturenpakete; import javax.swing.JComboBox; import javax.swing.JFileChooser; @@ -30,16 +31,18 @@ public class texturenauswaehlen_GUI extends JFrame{ private JComboBox comboBox; private JLabel vorschaubild; private JButton speichern, hinzufuegen, schliessen; + private Spielerverwaltung spielerverwaltung; /** * Konstruktor fpr das Fenster * @param texturenpakete */ - public texturenauswaehlen_GUI (Texturenpakete texturenpakete) { + public texturenauswaehlen_GUI (Texturenpakete texturenpakete, Spielerverwaltung spieler) { pakete = texturenpakete; erstelleFenster(); aktualisiereInhalt(); + spielerverwaltung = spieler; } @@ -130,7 +133,10 @@ public class texturenauswaehlen_GUI extends JFrame{ * Speichert die Auswahl des akutellen Paketes */ private void speichern() { -// if(spielerlevel >= pakete.getLevel(comboBox.getSelectedIndex())) { +// Austauschen sobalt Spielerverwaltung fertig +// if(spieler.getLevel() >= pakete.getLevel(comboBox.getSelectedIndex())) { +// pakete.setAktivesPaket(comboBox.getSelectedIndex()); +// aktualisiereBild(); // // } pakete.setAktivesPaket(comboBox.getSelectedIndex()); @@ -139,7 +145,7 @@ public class texturenauswaehlen_GUI extends JFrame{ /** - * Aktualaiset die Inhalte der ComboBox + * Aktualisiert die Inhalte der ComboBox */ private void aktualisiereInhalt() { comboBox.removeAllItems(); From 955fe052f81263d3c07fade24d369dba8dfc6dcb Mon Sep 17 00:00:00 2001 From: ekresse Date: Mon, 11 Jan 2021 15:15:07 +0100 Subject: [PATCH 10/14] GUI Update 5.3 --- src/de/jaujau/gui/texturenauswaehlen_GUI.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/de/jaujau/gui/texturenauswaehlen_GUI.java b/src/de/jaujau/gui/texturenauswaehlen_GUI.java index 4319eca..def228f 100644 --- a/src/de/jaujau/gui/texturenauswaehlen_GUI.java +++ b/src/de/jaujau/gui/texturenauswaehlen_GUI.java @@ -52,7 +52,7 @@ public class texturenauswaehlen_GUI extends JFrame{ private void erstelleFenster() { //Fenster größen fetslegen setAlwaysOnTop(true); - setBounds(100, 100, 588, 558); + setBounds(100, 100, 391, 361); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); @@ -61,40 +61,40 @@ public class texturenauswaehlen_GUI extends JFrame{ //Vorschaubild vorschaubild = new JLabel(); - vorschaubild.setBounds(117, 111, 167, 214); + vorschaubild.setBounds(32, 79, 167, 214); contentPane.add(vorschaubild); //Text "Texturenauswahl" JLabel lblNewLabel = new JLabel("Texturenauswahl"); - lblNewLabel.setBounds(5, 5, 562, 25); + lblNewLabel.setBounds(34, 11, 304, 25); lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 20)); lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); contentPane.add(lblNewLabel); //Teste Hinzufügen hinzufuegen = new JButton("Hinzuf\u00FCgen"); - hinzufuegen.setBounds(309, 125, 137, 23); + hinzufuegen.setBounds(209, 82, 137, 23); hinzufuegen.addActionListener(e-> paketHinzufuegeb()); contentPane.add(hinzufuegen); //Teste Speichern speichern = new JButton("Speichern"); - speichern.setBounds(306, 231, 140, 23); + speichern.setBounds(209, 180, 140, 23); speichern.addActionListener(e-> speichern()); contentPane.add(speichern); //Teste Schießen schliessen = new JButton("Schlie\u00DFen"); - schliessen.setBounds(306, 177, 140, 23); + schliessen.setBounds(209, 130, 140, 23); schliessen.addActionListener(e-> schliessen()); contentPane.add(schliessen); //Auswahl Box comboBox = new JComboBox(); - comboBox.setBounds(117, 69, 351, 25); + comboBox.setBounds(10, 37, 351, 25); contentPane.add(comboBox); aktualisiereInhalt(); From 9d3d5a403cc054ef760e98a479ddb09a520d4792 Mon Sep 17 00:00:00 2001 From: ekresse Date: Mon, 11 Jan 2021 15:30:59 +0100 Subject: [PATCH 11/14] JFrame Image Icon 1.0 --- src/de/jaujau/gui/GUI.java | 7 +++++++ src/de/jaujau/spiellogik/Anwendung.java | 2 ++ src/img/jaujau.png | Bin 0 -> 7118 bytes 3 files changed, 9 insertions(+) create mode 100644 src/img/jaujau.png diff --git a/src/de/jaujau/gui/GUI.java b/src/de/jaujau/gui/GUI.java index 19c4e0f..477ca22 100644 --- a/src/de/jaujau/gui/GUI.java +++ b/src/de/jaujau/gui/GUI.java @@ -16,8 +16,13 @@ import de.jaujau.spiellogik.Spiel; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; import javax.swing.BoxLayout; import java.awt.Font; +import java.awt.Toolkit; @@ -38,6 +43,7 @@ public class GUI extends JFrame{ // Constructors // public GUI (Texturenpakete texturenpakete, Spielerverwaltung speicherung) { + setIconImage(Toolkit.getDefaultToolkit().getImage(GUI.class.getResource("/img/jaujau.png"))); setMinimumSize(new Dimension(1000, 600)); // jaujau.getAktuellesSpiel(); @@ -46,6 +52,7 @@ public class GUI extends JFrame{ setPreferredSize(new Dimension(800, 500)); setSize(1565, 916); getContentPane().setLayout(new BorderLayout(0, 0)); + JPanel Menue = new JPanel(); Menue.setPreferredSize(new Dimension(270, 450)); diff --git a/src/de/jaujau/spiellogik/Anwendung.java b/src/de/jaujau/spiellogik/Anwendung.java index 01a43f1..5410449 100644 --- a/src/de/jaujau/spiellogik/Anwendung.java +++ b/src/de/jaujau/spiellogik/Anwendung.java @@ -7,6 +7,8 @@ */ package de.jaujau.spiellogik; +import javax.swing.ImageIcon; + import de.jaujau.daten.Spielerverwaltung; import de.jaujau.daten.Texturenpakete; import de.jaujau.gui.GUI; diff --git a/src/img/jaujau.png b/src/img/jaujau.png new file mode 100644 index 0000000000000000000000000000000000000000..e966ba012dbc588ff8318f0b1e2b7fa39a9f2f5d GIT binary patch literal 7118 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 Eg1Ml$ Date: Mon, 11 Jan 2021 15:33:10 +0100 Subject: [PATCH 12/14] Kommentierung verbessert, Debug durch debug-boolean ausgeblendet --- src/de/jaujau/spiellogik/Spiel.java | 97 +++++++++++++++-------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/src/de/jaujau/spiellogik/Spiel.java b/src/de/jaujau/spiellogik/Spiel.java index 6ae3695..5ad3e6a 100644 --- a/src/de/jaujau/spiellogik/Spiel.java +++ b/src/de/jaujau/spiellogik/Spiel.java @@ -29,6 +29,7 @@ public class Spiel { private int kartenZiehen; private Dashboard_GUI dashboard; private boolean spielGewonnen; + private boolean debug = false; public Spiel(Dashboard_GUI dashboard_gui) { audio = new Audio(); @@ -65,41 +66,41 @@ public class Spiel { * @param dashboard */ public void spiel(Dashboard_GUI dashboard) { - System.out.println("\nSPIEL Spiel gestartet."); + if(debug) System.out.println("\nSPIEL Spiel gestartet."); Random zufallszahl = new Random(); int zahl = zufallszahl.nextInt(2); if(zahl == 1) { //Starter durch zufall bestimmen amZug = Spieler.SPIELER; - System.out.println("SPIEL Spieler startet"); + if(debug) System.out.println("SPIEL Spieler startet"); } else { amZug = Spieler.COMPUTER; - System.out.println("SPIEL Computer startet"); + if(debug) System.out.println("SPIEL Computer startet"); } for(int i = 0; i < 7; i++) { //Jeder bekommt 7 Karten kartensatz.ziehen(Spieler.COMPUTER); kartensatz.ziehen(Spieler.SPIELER); } - System.out.println("SPIEL Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); - System.out.println("SPIEL Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); - effekteSetzen(); - if(amZug == Spieler.COMPUTER) { + if(debug) System.out.println("SPIEL Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); + if(debug) System.out.println("SPIEL Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); + effekteSetzen(); //effekte für den Start setzen + if(amZug == Spieler.COMPUTER) { //falls der PC startet, findet hier der erste Zug statt int computerZug = computerGegner.cpu_Zug(zwei_ziehen, aussetzen, kartensatz); - System.out.println("\nSPIEL Computerauswahl: " + computerZug); + if(debug) System.out.println("\nSPIEL Computerauswahl: " + computerZug); switch(computerZug) { - case -2: + case -2: //aussetzen aussetzen = false; alternieren(dashboard); break; - case -1: + case -1: //Karte ziehen karteZiehen(); break; - default: + default: //Karte legen karteLegen(computerZug); break; } } - else if(amZug == Spieler.SPIELER) { + else if(amZug == Spieler.SPIELER) {//falls der Spieler startet wird noch der Aussetzen-Button eingeblendet if(aussetzen) dashboard.showaussetzen(true); } return; @@ -107,17 +108,17 @@ public class Spiel { /** - * Organisiert den Spielablauf nach jedem gültigen Zug + * Organisiert den Spielablauf nach jedem gültigen Zug, wechselt zwischen Spieler und Computer * @param dashboard */ private void alternieren(Dashboard_GUI dashboard) { if(spielGewonnen) return; - if(amZug == Spieler.SPIELER) { + if(amZug == Spieler.SPIELER) { //CPU Zug findet statt amZug = Spieler.COMPUTER; dashboard.aktualisiereGUI(); - System.out.println("\nSPIEL Computer am Zug"); + if(debug) System.out.println("\nSPIEL Computer am Zug"); int computerZug = computerGegner.cpu_Zug(zwei_ziehen, aussetzen, kartensatz); - System.out.println("SPIEL Computerauswahl: " + computerZug); + if(debug) System.out.println("SPIEL Computerauswahl: " + computerZug); switch(computerZug) { case -2: aussetzen = false; @@ -132,12 +133,12 @@ public class Spiel { } } - else { + else { //Spieler Zug findet statt amZug = Spieler.SPIELER; dashboard.aktualisiereGUI(); - System.out.println("\nSPIEL Spieler am Zug"); - if(aussetzen) { - System.out.println("\nSPIEL Aussetzen möglich"); + if(debug) System.out.println("\nSPIEL Spieler am Zug"); + if(aussetzen) { //falls aussetzen aktiv, wird die Möglichkeit über den Button aktiviert + if(debug) System.out.println("\nSPIEL Aussetzen möglich"); dashboard.showaussetzen(true); dashboard.aktualisiereGUI(); } @@ -150,14 +151,14 @@ public class Spiel { * @param spieler Spieler, welcher gewonnen hat */ private void gewinn(Spieler spieler) { - System.out.println("HERZLICHEN GLÜCKWUNSCH " + spieler + ". DU HAST GEWONNEN"); + if(debug) System.out.println("HERZLICHEN GLÜCKWUNSCH " + spieler + ". DU HAST GEWONNEN"); dashboard.gewonnen(spieler); spielGewonnen = true; } /** - * Bietet die Möglichkeit auszusetzen + * Bietet für den Spieler die Möglichkeit auszusetzen */ public void aussetzen() { if(spielGewonnen) return; @@ -166,35 +167,35 @@ public class Spiel { } /** - * falls eine Karte gelegt werden kann, wird diese gelegt + * falls eine Karte gelegt werden kann, wird diese für den Teilnehmer gelegt * @param kartenindex */ public void karteLegen(int kartenindex) { if(spielGewonnen) return; - System.out.println("SPIEL Versuche Karte " + kartenindex + " zu legen"); - if (spielzug.pruefeZug(kartenindex, zwei_ziehen, aussetzen, kartensatz)) { //gewählte Karte kann gelegt werden - System.out.println("SPIEL pruefeZug positiv"); - System.out.println("SPIEL Lege Karte " + kartenindex); - kartensatz.ablegen(kartenindex); + if(debug) System.out.println("SPIEL Versuche Karte " + kartenindex + " zu legen"); + if (spielzug.pruefeZug(kartenindex, zwei_ziehen, aussetzen, kartensatz)) { //gewählte Karte kann gelegt werden - Zug kann stattfinden | sonst nichts + if(debug) System.out.println("SPIEL pruefeZug positiv"); + if(debug) System.out.println("SPIEL Lege Karte " + kartenindex); + kartensatz.ablegen(kartenindex); //karte ablegen if(kartensatz.getHand(amZug).size() == 1) { //Teilnehmer hat nur noch eine Karte audio.spieleJau(); } if(kartensatz.getHand(amZug).isEmpty()) { //Teilnehmer hat gewonnen audio.spieleJauJau(); - gewinn(amZug); + gewinn(amZug); //amZug hat gewonnen return; } - System.out.println("SPIEL Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); - System.out.println("SPIEL Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); - effekteSetzen(); - if(kartensatz.getKarte(kartenindex).getWERT() == Wert.ACHT) { //Sonderfall: wiederholtes aussetzen + if(debug) System.out.println("SPIEL Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER)); + if(debug) System.out.println("SPIEL Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER)); + effekteSetzen(); //effekte neu setzen + if(kartensatz.getKarte(kartenindex).getWERT() == Wert.ACHT) { //Sonderfall: wiederholtes aussetzen Spieler if(amZug == Spieler.SPIELER) dashboard.showaussetzen(false); } - if(kartensatz.getKarte(kartenindex).getWERT() == Wert.BUBE) { //Sonderfall: Wünscher wurde gelegt + if(kartensatz.getKarte(kartenindex).getWERT() == Wert.BUBE) { //Sonderfall: Wünscher wurde gelegt Spieler if(amZug == Spieler.COMPUTER) alternieren(dashboard); } else { - alternieren(dashboard); + alternieren(dashboard); //weiter ohne Sonderfall } } } @@ -207,31 +208,31 @@ public class Spiel { if(spielGewonnen) return; if(!aussetzen) { if(zwei_ziehen) { //mehrere ziehen - System.out.println("\nSPIEL " + kartenZiehen + " Karten gezogen"); + if(debug) System.out.println("\nSPIEL " + kartenZiehen + " Karten gezogen"); for(int i = 0; i < kartenZiehen; i++) { kartensatz.ziehen(amZug); } kartenZiehen = 0; zwei_ziehen = false; } - else { //Normales ziehen + else { //Normales (1) ziehen kartensatz.ziehen(amZug); - System.out.println("\nSPIEL 1 Karte gezogen"); + if(debug) System.out.println("\nSPIEL 1 Karte gezogen"); } alternieren(dashboard); } - else { //ziehen nicht möglich + else { //ziehen nicht möglich - nichts passiert return; } } /** - * Setzt die Wünscher Farbe + * Setzt die Wunschfarbe für den Spieler * @param farbe */ public void wuenscher(Farbe farbe) { - System.out.println("\nSPIEL Wünsche Farbe"); + if(debug) System.out.println("\nSPIEL Wünsche Farbe"); kartensatz.SetWunschfarbe(farbe); alternieren(dashboard); dashboard.aktualisiereGUI(); @@ -239,26 +240,26 @@ public class Spiel { /** - * setzt Effekt-Variablen und Wunschfarbe für einen Wünscher + * setzt Effekt-Variablen und Wunschfarbe für einen Wünscher vom Spieler, ruft Farbauswahl für Spieler-Wünscher auf */ private void effekteSetzen() { if(spielGewonnen) return; gelegterWert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); - if(gelegterWert == Wert.ACHT) { + if(gelegterWert == Wert.ACHT) {//Aussetzen aussetzen = true; } - if(gelegterWert == Wert.SIEBEN) { + if(gelegterWert == Wert.SIEBEN) {//Ziehen zwei_ziehen = true; kartenZiehen += 2; } - if(gelegterWert == Wert.BUBE) { - if(amZug == Spieler.COMPUTER) { + if(gelegterWert == Wert.BUBE) {//Wünscher + if(amZug == Spieler.COMPUTER) {//Wunschfarbe durch PC wird gesetzt kartensatz.SetWunschfarbe(computerGegner.farbeAussuchen(kartensatz)); } - else { + else { //Wunschfarbe durch Spieler setzen dashboard.showwunsch(true); } } - System.out.println("\nSPIEL Effekte gesetzt:\nSPIEL Aussetzen: " + aussetzen + "\nSPIEL Zwei_Ziehen: " + zwei_ziehen + "\nSPIEL Anzahl: " + kartenZiehen); + if(debug) System.out.println("\nSPIEL Effekte gesetzt:\nSPIEL Aussetzen: " + aussetzen + "\nSPIEL Zwei_Ziehen: " + zwei_ziehen + "\nSPIEL Anzahl: " + kartenZiehen); } } From 4b64a40cfe9560a468b6cd87dca1f45692209cc4 Mon Sep 17 00:00:00 2001 From: Fabian Keller Date: Mon, 11 Jan 2021 15:33:27 +0100 Subject: [PATCH 13/14] Kommentierung verbessert, Debug durch debug-boolean ausgeblendet --- src/de/jaujau/spiellogik/Spiel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/jaujau/spiellogik/Spiel.java b/src/de/jaujau/spiellogik/Spiel.java index 5ad3e6a..1554d82 100644 --- a/src/de/jaujau/spiellogik/Spiel.java +++ b/src/de/jaujau/spiellogik/Spiel.java @@ -148,7 +148,7 @@ public class Spiel { /** * Wird aufgerufen wenn das Spiel entschieden wurde, führt zum Spielende - * @param spieler Spieler, welcher gewonnen hat + * @param spieler Spieler, welcher gewonnen hat */ private void gewinn(Spieler spieler) { if(debug) System.out.println("HERZLICHEN GLÜCKWUNSCH " + spieler + ". DU HAST GEWONNEN"); From dd760ac35a5abb6902e1f56ca43418aa1a40493d Mon Sep 17 00:00:00 2001 From: ekresse Date: Mon, 11 Jan 2021 16:30:29 +0100 Subject: [PATCH 14/14] GUI Beta Status --- src/de/jaujau/gui/Dashboard_GUI.java | 66 ++++++++------ src/de/jaujau/gui/GUI.java | 41 ++++----- src/de/jaujau/gui/Hilfe_GUI.java | 6 +- src/de/jaujau/gui/Navigation_GUI.java | 126 -------------------------- src/img/jaujau.gif | Bin 0 -> 49681 bytes 5 files changed, 62 insertions(+), 177 deletions(-) delete mode 100644 src/de/jaujau/gui/Navigation_GUI.java create mode 100644 src/img/jaujau.gif diff --git a/src/de/jaujau/gui/Dashboard_GUI.java b/src/de/jaujau/gui/Dashboard_GUI.java index 7accde5..2cfa036 100644 --- a/src/de/jaujau/gui/Dashboard_GUI.java +++ b/src/de/jaujau/gui/Dashboard_GUI.java @@ -32,12 +32,12 @@ import javax.swing.JButton; 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 JPanel panelCont = new JPanel(); + private JPanel highscore = new JPanel(); + private JPanel game = new JPanel(); + private JPanel start = new JPanel(); + private CardLayout cl = new CardLayout(); + private Spielerverwaltung spielerverwaltung = new Spielerverwaltung(); private final JPanel panel = new JPanel(); private final JPanel panel_1 = new JPanel(); private JComboBox spielername = new JComboBox(); @@ -46,10 +46,10 @@ 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(); - JLabel ziehstapel = new JLabel(""); - JPanel spielerkarten = new JPanel(); - JLabel labelsspieler[] = new JLabel[32]; - JLabel labelsgegner[] = new JLabel[32]; + private JLabel ziehstapel = new JLabel(""); + private JPanel spielerkarten = new JPanel(); + private JLabel labelsspieler[] = new JLabel[32]; + private JLabel labelsgegner[] = new JLabel[32]; private Spiel aktuellesSpiel; private JLabel label_aktuellerSpieler; private Texturenpakete texturenpakete; @@ -57,22 +57,23 @@ public class Dashboard_GUI extends JPanel{ private final JPanel info_panel = new JPanel(); private final JPanel rechts = new JPanel(); private final JPanel mitte = new JPanel(); - JLabel ablagestapel = new JLabel(""); - JButton aussetzen = new JButton("Aussetzen"); - JPanel mitte_unten = new JPanel(); - JPanel mitte_center = new JPanel(); + private JLabel ablagestapel = new JLabel(""); + private JButton aussetzen = new JButton("Aussetzen"); + private JPanel mitte_unten = new JPanel(); + private JPanel mitte_center = new JPanel(); private JPanel mitte_oben = new JPanel(); private JButton btnherz = new JButton("Herz"); 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"); - private final JScrollPane gegnerkartenpane = new JScrollPane(); - private final JPanel gegnerkarten = new JPanel(); - private final JButton getname = new JButton("setzen"); - private final JPanel panel_3 = new JPanel(); + private JScrollPane gegnerkartenpane = new JScrollPane(); + private JPanel gegnerkarten = new JPanel(); + private JButton getname = new JButton("setzen"); + private JPanel panel_3 = new JPanel(); private final JLabel level_beschreibung = new JLabel("Aktuelles Level:"); - private final JLabel level_count = new JLabel("0"); + private JLabel level_count = new JLabel("0"); + private final JLabel lblNewLabel_2 = new JLabel(""); //Moving Image @@ -228,8 +229,11 @@ public class Dashboard_GUI extends JPanel{ mitte.add(mitte_oben, BorderLayout.NORTH); mitte_oben.setLayout(new BorderLayout(0, 0)); + start.setBackground(Color.WHITE); + start.setForeground(Color.WHITE); panelCont.add(start, "3"); start.setLayout(new BorderLayout(0, 0)); + panel.setBackground(Color.WHITE); panel.setPreferredSize(new Dimension(10, 30)); start.add(panel, BorderLayout.NORTH); @@ -246,8 +250,10 @@ public class Dashboard_GUI extends JPanel{ getspielername(); } }); + panel_1.setBackground(Color.WHITE); start.add(panel_1, BorderLayout.CENTER); panel_1.setLayout(new BorderLayout(0, 0)); + panel_3.setBackground(Color.WHITE); panel_3.setPreferredSize(new Dimension(100, 50)); panel_1.add(panel_3, BorderLayout.NORTH); @@ -259,6 +265,12 @@ public class Dashboard_GUI extends JPanel{ level_count.setFont(new Font("Tahoma", Font.PLAIN, 22)); panel_3.add(level_count); + lblNewLabel_2.setBackground(Color.LIGHT_GRAY); + lblNewLabel_2.setHorizontalTextPosition(SwingConstants.CENTER); + lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER); + lblNewLabel_2.setIcon(new ImageIcon(Dashboard_GUI.class.getResource("/img/jaujau.gif"))); + + panel_1.add(lblNewLabel_2, BorderLayout.CENTER); start.add(panel_2, BorderLayout.SOUTH); @@ -307,7 +319,7 @@ public class Dashboard_GUI extends JPanel{ - public void renderStart(){ + private void renderStart(){ spielername.removeAllItems(); for(int i = 0; iCu{!0 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