diff --git a/quellen b/quellen new file mode 100644 index 0000000..246b419 --- /dev/null +++ b/quellen @@ -0,0 +1,2 @@ +JFileChoser in UI: (mit GPT) +Prompt: "Wie kann ich in swing in java Files aus einem Explorer auswählen?". \ No newline at end of file diff --git a/src/main/java/de/mannheim/th/chess/utl/Clock.java b/src/main/java/de/mannheim/th/chess/utl/Clock.java index 88f7e52..fa09d17 100644 --- a/src/main/java/de/mannheim/th/chess/utl/Clock.java +++ b/src/main/java/de/mannheim/th/chess/utl/Clock.java @@ -3,10 +3,138 @@ package de.mannheim.th.chess.utl; /** * Zeigt die Zeitangabe während eines Spiels eines Spielers an. */ -public class Clock{ +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSplitPane; +import javax.swing.Timer; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Clock extends Thread implements Runnable { + private volatile boolean whiteToMove = true; + private volatile boolean gameHasFinished = false; + private static final Logger clockLogger = LogManager.getLogger(Clock.class); + private int minutes; - public Clock() { + public Clock(String mode) { + setMode(mode); } + public void pressClock() { + whiteToMove = !whiteToMove; + if (whiteToMove) { + clockLogger.info("Weiß ist am Zug"); + } else { + clockLogger.info("Schwarz ist am Zug"); + } + } + + public void endGame() { + gameHasFinished = true; + } + + public void run() { + JFrame clockFrame = new JFrame("Clock"); + + JPanel player1Panel = new JPanel(); + player1Panel.setBackground(Color.BLACK); + JPanel player2Panel = new JPanel(); + player2Panel.setBackground(Color.BLACK); + clockFrame.setBounds(1000, 500, 10000, 10000); + clockFrame.setLayout(new BorderLayout()); + JLabel clock1 = new JLabel(" " + minutes + ":00 "); + clock1.setForeground(Color.WHITE); + clock1.setFont(new Font("Arial", Font.BOLD, 50)); + JLabel clock2 = new JLabel(" " + minutes + ":00 "); + clock2.setForeground(Color.WHITE); + clock2.setFont(new Font("Arial", Font.BOLD, 50)); + player1Panel.add(clock1); + player2Panel.add(clock2); + JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT, player1Panel, player2Panel); + split.setFont(new Font("Arial", Font.BOLD, 50)); + clockFrame.add(split); + + var min1 = new AtomicInteger(minutes); + var sec1 = new AtomicInteger(0); + var min2 = new AtomicInteger(minutes); + var sec2 = new AtomicInteger(0); + clockFrame.pack(); + clockFrame.setVisible(true); + + var t = new Timer(1000, (ae) -> { + + if (!gameHasFinished) { + + StringBuilder clockShower = new StringBuilder(); + if (whiteToMove) { + if (sec1.intValue() == 00) { + sec1.set(60); + min1.decrementAndGet(); + } + if (min1.intValue() < 10) { + clockShower.append("0"); + } + clockShower.append(min1.get()); + clockShower.append(":"); + if (sec1.intValue() < 10) { + clockShower.append("0"); + } + clockShower.append(sec1.decrementAndGet()); + clock1.setText(clockShower.toString()); + + } else { + if (sec2.intValue() == 00) { + sec2.set(60); + min2.decrementAndGet(); + } + if (min2.intValue() < 10) { + clockShower.append("0"); + } + clockShower.append(min2.get()); + clockShower.append(":"); + if (sec2.intValue() < 10) { + clockShower.append("0"); + } + clockShower.append(sec2.decrementAndGet()); + clock2.setText(clockShower.toString()); + } + clockFrame.repaint(); + if ((sec1.intValue() == 0 && min1.intValue() == 0) || (sec2.intValue() == 0 && min2.intValue() == 0)) { + endGame(); + } + } }); + + t.start(); + } + public static void main(String[] args) throws InterruptedException { + Clock st = new Clock("classic"); + st.start(); + st.pressClock(); + } + + private void setMode(String mode) { + switch(mode) { + case "blitz": + minutes = 5; + clockLogger.info("Neue Blitz-Uhr wurde erstellt"); + break; + case "rapid": + minutes = 10; + clockLogger.info("Neue Schnellschach-Uhr wurde erstellt"); + break; + case "classic": + minutes = 120; + clockLogger.info("Neue klassische Schachuhr wurde erstellt"); + break; + } + } + } \ No newline at end of file