From 4029d455f02c1bb88999d737def1d1881dc78846 Mon Sep 17 00:00:00 2001
From: Justin Klein <justin.klein@student.reutlingen-university.de>
Date: Sun, 21 May 2023 20:05:16 +0000
Subject: [PATCH] Upload New File

---
 src/UnoSpielfeld.java | 354 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 354 insertions(+)
 create mode 100644 src/UnoSpielfeld.java

diff --git a/src/UnoSpielfeld.java b/src/UnoSpielfeld.java
new file mode 100644
index 0000000..2d2e62b
--- /dev/null
+++ b/src/UnoSpielfeld.java
@@ -0,0 +1,354 @@
+
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+public class UnoSpielfeld extends JFrame {
+    private JPanel spielfeldPanel;
+    private JPanel spielerPanel;
+    private JPanel buttonsPanel;
+    private JScrollPane kartenScrollPane;
+    private JPanel kartenPanel;
+    private JPanel centerPanel;
+    public JButton zugButton;
+    public JButton unoButton;
+    public JButton karteLegen;
+    public JButton karteBehalten;
+    public JLabel kartenLabel;
+    public JButton zieheButton;
+    public JButton farbeundo = null;
+    public boolean zugStarten = false;
+    public boolean kartelegen = false;
+    public boolean karteziehen = false;
+    public boolean neuekartelegen = false;
+    public boolean neuekartebehalten = false;
+    public boolean uno = false;
+    public int Index;
+    public int spielerIndex = 0;
+    private int size = 0;
+    public Wert wert;
+    public Farbe farbe;
+    Object lock = null;
+    private ArrayList<JButton> spielerButton;
+
+
+    public UnoSpielfeld(UnoKarte aktuelleKarte, SpielerHand spilerhand, Regelwerk regel,Object lock1,int lenght) {
+        this.lock = lock1;
+
+        spielerButton = new ArrayList<JButton>();
+
+        size = lenght;
+        // Fenstereinstellungen
+        setTitle("Uno Spielfeld");
+        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        setLayout(new BorderLayout());
+
+
+        // Spielfeldpanel
+        spielfeldPanel = new JPanel(new BorderLayout());
+        add(spielfeldPanel, BorderLayout.CENTER);
+
+        // Kartenanzeige
+        kartenPanel = new JPanel();
+        kartenPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+        kartenScrollPane = new JScrollPane(kartenPanel);
+        spielfeldPanel.add(kartenScrollPane, BorderLayout.SOUTH);
+
+        // Spielerliste
+        spielerPanel = new JPanel();
+        spielfeldPanel.add(spielerPanel, BorderLayout.EAST);
+
+        // Knöpfe
+        buttonsPanel = new JPanel();
+        spielfeldPanel.add(buttonsPanel, BorderLayout.WEST);
+
+        //Spielfeld
+        centerPanel = new JPanel();
+        spielfeldPanel.add(centerPanel, BorderLayout.CENTER);
+
+        // Knöpfe hinzufügen
+        zugStartenKnopf(spilerhand,regel);
+        unoKnopf();
+        buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.Y_AXIS));
+
+        // Spieler hinzufügen
+        SpielerHinzufuegen(spilerhand);
+
+        karteBehalten();
+
+        //Karten ziehe Platz hinzufügen
+        zieheKarte();
+
+        ImageIcon kartenIcon = new ImageIcon("UnoKarten/BackSide.png"); // Passe den Pfad zum Kartenbild an
+        kartenLabel = new JLabel(kartenIcon);
+        centerPanel.add(kartenLabel);
+
+        karteLegen();
+
+
+        setSize(1200,700);
+        setVisible(true);
+        //Es wird das Spielfeld erstellt mit der größe 1200 x 700
+    }
+
+    public JButton createImageButton(String imagePath) {
+        ImageIcon icon = new ImageIcon(imagePath);
+        JButton button = new JButton(icon);
+        button.setBorderPainted(false);
+        button.setFocusPainted(false);
+        button.setContentAreaFilled(false);
+        return button;
+    }
+    public void SpielerHinzufuegen(SpielerHand spielerHand){
+        for(int j = 0; j < size ; j++){
+            int w = j;
+            int finalJ = j;
+            JButton spielerLabel = new JButton("Spieler " + (w + 1) + ": \t " + spielerHand.spielerNamen[j]);
+            spielerPanel.add(spielerLabel);
+            spielerButton.add(spielerLabel);
+            spielerLabel.setFont(new Font("Arial", Font.PLAIN, 20));
+            spielerLabel.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    JOptionPane.showMessageDialog(null,"Spieler " + spielerHand.spielerNamen[finalJ] + " besitzt " + spielerHand.spielerHaende.get(finalJ).size() + " Karten") ;
+                }
+            });
+        }
+        spielerPanel.setLayout(new BoxLayout(spielerPanel, BoxLayout.Y_AXIS));
+
+        //Es werden die Spieler angezeigt
+        //Beim drücken des Spielers öffnet sich ein Fenster mit der Anzahl der karten des Spielers
+    }
+
+    public void colorPlayer(int reihen){
+        if (farbeundo != null) {
+            farbeundo.setBackground(null);
+        }
+        JButton farbe = spielerButton.get(reihen);
+        farbeundo = farbe;
+        farbe.setBackground(Color.decode("#F2F723"));
+
+        //Es werde der Spieler der gerade am zug ist sichtbar angezeigt
+    }
+    public void karteBehalten(){
+        karteBehalten = new JButton("Behalten");
+        centerPanel.add(karteBehalten);
+        karteBehalten.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                neuekartebehalten = true;
+                try {
+                    Thread.sleep(150);
+                } catch (InterruptedException ex) {
+                    throw new RuntimeException(ex);
+                }
+                neuekartebehalten = false;
+            }
+        });
+        //Der knopf zur Behalten der Karte und seine funktion werden Hier erstellt
+    }
+    public void karteLegen(){
+        karteLegen = new JButton("Legen");
+        centerPanel.add(karteLegen);
+        karteLegen.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                neuekartelegen = true;
+                try {
+                    Thread.sleep(150);
+                } catch (InterruptedException ex) {
+                    throw new RuntimeException(ex);
+                }
+                neuekartelegen = false;
+            }
+        });
+        //Der knopf zum Legen der Karte und seine funktion werden Hier erstellt
+    }
+
+    public void zieheKarte(){
+        zieheButton = createImageButton("UnoKarten/BackSide.png");
+        centerPanel.add(zieheButton);
+        zieheButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                karteziehen = true;
+                try {
+                    Thread.sleep(150);
+                } catch (InterruptedException ex) {
+                    throw new RuntimeException(ex);
+                }
+                    synchronized (lock) {
+                        lock.notify();
+                    }
+                karteziehen = false;
+            }
+        });
+        //Der Stapel zum ziehen der Karte wird erstellt und bekommt das Bild von der Rückseite einer Uno Karte
+    }
+
+    public void changeKarteziehen(UnoKarte gezogeneKarte){
+        ImageIcon newIcon = new ImageIcon("UnoKarten/"+Bild(gezogeneKarte)+".png");    // Passe den Pfad zum Uno-Bild an
+        zieheButton.setIcon(newIcon);
+
+        //Diese funktion ändert das Bild des Stapels zu dem Bild welches der Spiler neu gezogen hat
+    }
+
+    public void changeKarteziehenundo(){
+        ImageIcon newIcon = new ImageIcon("UnoKarten/BackSide.png");    // Passe den Pfad zum Uno-Bild an
+        zieheButton.setIcon(newIcon);
+        //Diese Methode ändert das Bild wieder zur Rückseite einer Karte
+    }
+
+    public void aktuelleKarte(UnoKarte aktuelleKarte){
+        ImageIcon oldIcon = (ImageIcon)  kartenLabel.getIcon();
+        kartenLabel.setIcon(null);
+
+        revalidate();
+        repaint();
+
+        ImageIcon newIcon = new ImageIcon("UnoKarten/" + Bild(aktuelleKarte) + ".png");    // Passe den Pfad zum Uno-Bild an
+        kartenLabel.setIcon(newIcon);
+        if(aktuelleKarte.getFarbe() == Farbe.Wild) {
+            if (wert == Wert.Multicolor) {
+                newIcon = new ImageIcon("UnoKarten/Wild_" + wert + "_" + farbe + ".png");    // Passe den Pfad zum Uno-Bild an
+                kartenLabel.setIcon(newIcon);
+            } else if (wert == Wert.Draw_Four) {
+                newIcon = new ImageIcon("UnoKarten/Wild_" + wert + "_" + farbe + ".png");    // Passe den Pfad zum Uno-Bild an
+                kartenLabel.setIcon(newIcon);
+            }
+            revalidate();
+            repaint();
+        }
+        //Es wird die Aktuelle Karte erstellt, welche zuletzt gelegt wurde
+    }
+
+    public void KarteHinzufuegen( SpielerHand spielerHand, int reihen){
+        spielerIndex = reihen;
+        int size = spielerHand.spielerHaende.get(reihen).size()-1;
+        for( int k = 0; k < 100; k++) {
+        }
+        kartenPanel.removeAll();
+        revalidate();
+        repaint();
+        for (int i = 0; i <= size; i++) {
+            JButton kartenButton = createImageButton("UnoKarten/"+Bild(spielerHand.spielerHaende.get(reihen).get(i))+".png"); // Passe den Pfad zum Kartenbild an
+            int finalI = i;
+            kartenButton.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    kartelegen = true;
+                    Index = finalI;
+                    try {
+                        Thread.sleep(150);
+                    } catch (InterruptedException ex) {
+                        throw new RuntimeException(ex);
+                    }
+                    kartelegen = false;
+                }
+            });
+            kartenPanel.add(kartenButton);
+        }
+        //es werden die Aktuellen Karten des Spilers der gerade am zug ist angezeigt
+    }
+    public void unoKnopf(){
+        unoButton = new JButton("Uno");
+        buttonsPanel.add(unoButton);
+        unoButton.setFont(new Font("Arial", Font.PLAIN, 20));
+        unoButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                uno = true;
+                try {
+                    Thread.sleep(3000);
+                } catch (InterruptedException ex) {
+                    throw new RuntimeException(ex);
+                }
+                uno = false;
+            }
+        });
+        //Es wird ein Uno Knopf erstellt, mit seiner funktion
+    }
+
+    public void zugStartenKnopf(SpielerHand spielerHand, Regelwerk regel){
+        zugButton = new JButton("Zug Starten");
+        buttonsPanel.add(zugButton);
+        zugButton.setFont(new Font("Arial", Font.PLAIN, 20));
+        zugButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                zugStarten = true;
+                try {
+                    Thread.sleep(150);
+                } catch (InterruptedException ex) {
+                    throw new RuntimeException(ex);
+                }
+                zugStarten = false;
+            }
+        });
+        //Es wird ein Knopf erstellt der den nächsten zug Starten lässt
+    }
+    public void Kartenausschalten(){
+        kartenPanel.removeAll();
+        revalidate();
+        repaint();
+    }
+
+    public void wechsleWunschKarte(Farbe wunschFarbe, Wert wunschWert){
+        farbe = wunschFarbe;
+        wert = wunschWert;
+    }
+
+    public void beenden(){
+        dispose();
+    }
+
+    public String Bild(UnoKarte aktuelleKarte){
+        Farbe farbe = aktuelleKarte.getFarbe();
+        Wert wert = aktuelleKarte.getWert();
+        String wort = farbe + "_" + wert;
+        return wort;
+
+    }
+    public void highUno(){
+        unoButton.setBackground(Color.decode("#F2F723"));
+    }
+    public void highUnoundo(){
+        unoButton.setBackground(null);
+    }
+    public void highBehalten(){
+        karteBehalten.setBackground(Color.decode("#F2F723"));
+    }
+    public void highBehaltenundo(){
+        karteBehalten.setBackground(null);
+    }
+    public void highLegen(){
+        karteLegen.setBackground(Color.decode("#F2F723"));
+    }
+    public void highLegenundo(){
+        karteLegen.setBackground(null);
+    }
+    public void highZugStarten(){
+        zugButton.setBackground(Color.decode("#F2F723"));
+    }
+    public void highZugStartenundo(){
+        zugButton.setBackground(null);
+    }
+
+    public boolean getzugStarten(){
+        return zugStarten;
+    }
+    public boolean getkartelegen(){
+        return kartelegen;
+    }
+    public boolean getkarteziehen(){
+        return karteziehen;
+    }
+    public boolean getneuekartelegen(){ return neuekartelegen; }
+    public boolean getneuekartebehalten(){ return neuekartebehalten; }
+    public boolean getUno(){ return uno; }
+    public int getKartenIndex(){ return Index; }
+    public int getSpielerIndex(){ return spielerIndex; }
+}
-- 
GitLab