commit 49302ad890d105046fe4979b83e928ee31f5aedf Author: Obai Albek Date: Wed May 21 19:24:05 2025 +0200 Tic-Tac-Toe diff --git a/Tic_tac_toe/.gitignore b/Tic_tac_toe/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/Tic_tac_toe/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/Tic_tac_toe/.settings/org.eclipse.core.resources.prefs b/Tic_tac_toe/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/Tic_tac_toe/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Tic_tac_toe/.settings/org.eclipse.jdt.core.prefs b/Tic_tac_toe/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..6f94d6a --- /dev/null +++ b/Tic_tac_toe/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=23 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=23 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=23 diff --git a/Tic_tac_toe/src/module-info.java b/Tic_tac_toe/src/module-info.java new file mode 100644 index 0000000..0f02a7c --- /dev/null +++ b/Tic_tac_toe/src/module-info.java @@ -0,0 +1,9 @@ +/** + * + */ +/** + * + */ +module Tic_tac_toe { + requires java.desktop; +} \ No newline at end of file diff --git a/Tic_tac_toe/src/spiel/Controller.java b/Tic_tac_toe/src/spiel/Controller.java new file mode 100644 index 0000000..4f1f0ed --- /dev/null +++ b/Tic_tac_toe/src/spiel/Controller.java @@ -0,0 +1,117 @@ +package spiel; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Scanner; + +import javax.swing.*; + +public class Controller { + static Scanner scan = new Scanner(System.in); + static String[][] spielField = new String[3][3]; + + private Modell spieler1; + private Modell spieler2; + private View view; + private String spieler = "X"; + + public Controller() {} + + public Controller(Modell spieler1, Modell spieler2, View view) { + this.spieler1 = spieler1; + this.spieler2 = spieler2; + this.view = view; + initSpielfeld(); + zeigeDaten(); + } + + public void zeigeDaten() { + view.nameSpieler1.setText(spieler1.getName()); + view.anzahlgewinn1.setText(spieler1.getAnzahlGewinn() + ""); + view.nameSpieler2.setText(spieler2.getName()); + view.anzahlgewinn2.setText(spieler2.getAnzahlGewinn() + ""); + view.XoderO.setText(spieler); + } + + public static boolean checkSet(String X_O, int x, int y) { + + if (x < 0 || x > 2 || y < 0 || y > 2) + return false; + + if (!(spielField[x][y].equals("-"))) + return false; + + return true; + } + + + public static boolean checkGewinner(Modell player) { + for (int i = 0; i < 3; i++) { + if (spielField[i][0].equals(player.getZeichen()) && spielField[i][1].equals(player.getZeichen()) && spielField[i][2].equals(player.getZeichen())) + return true; + } + for (int i = 0; i < 3; i++) { + if (spielField[0][i].equals(player.getZeichen()) && spielField[1][i].equals(player.getZeichen()) && spielField[2][i].equals(player.getZeichen())) + return true; + } + if (spielField[0][0].equals(player.getZeichen()) && spielField[1][1].equals(player.getZeichen()) && spielField[2][2].equals(player.getZeichen())) + return true; + + if (spielField[0][2].equals(player.getZeichen()) && spielField[1][1].equals(player.getZeichen()) && spielField[2][0].equals(player.getZeichen())) + return true; + + return false; + } + + public static void ausgabeSpielFeld(String X_O, int x, int y) { + spielField[x][y] = X_O; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + System.out.print(spielField[i][j] + "|"); + } + System.out.println(); + } + } + + + public void initSpielfeld() { + // Spielfeld initialisieren + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + spielField[i][j] = "-"; + view.x_o[i][j].setText("-"); + + final int x = i; + final int y = j; + view.x_o[i][j].addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + handleMove(x, y); + } + }); + } + } + } + + public void handleMove(int x, int y) { + + if (spielField[x][y].equals("-")) { + spielField[x][y] = spieler; + view.x_o[x][y].setText(spieler); + + if (checkGewinner(spieler1)) { + System.out.println("Spieler " + spieler1.getName() + " hat gewonnen!"); + spieler1.setAnzahlGewinn(spieler1.getAnzahlGewinn() + 1); + } + + else if (checkGewinner(spieler2)) { + System.out.println("Spieler " + spieler2.getName() + " hat gewonnen!"); + spieler2.setAnzahlGewinn(spieler2.getAnzahlGewinn() + 1); + } + + + spieler = spieler.equals("X") ? "O" : "X"; + zeigeDaten(); + } + } +} diff --git a/Tic_tac_toe/src/spiel/Modell.java b/Tic_tac_toe/src/spiel/Modell.java new file mode 100644 index 0000000..d0755b8 --- /dev/null +++ b/Tic_tac_toe/src/spiel/Modell.java @@ -0,0 +1,35 @@ +package spiel; + +public class Modell { + + private String name; + private int anzahlGewinn; + private String zeichen; + + public Modell(String name,String zeichen) { + this.name = name; + this.zeichen = zeichen; + this.anzahlGewinn = 0; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public String getZeichen() { + return zeichen; + } + + public int getAnzahlGewinn() { + return anzahlGewinn; + } + + public void setAnzahlGewinn(int anzahlGewinn) { + this.anzahlGewinn = anzahlGewinn; + } + + +} diff --git a/Tic_tac_toe/src/spiel/SpielfeldGUI.java b/Tic_tac_toe/src/spiel/SpielfeldGUI.java new file mode 100644 index 0000000..f17290a --- /dev/null +++ b/Tic_tac_toe/src/spiel/SpielfeldGUI.java @@ -0,0 +1,47 @@ +package spiel; +import javax.swing.*; +import java.awt.*; + +public class SpielfeldGUI { + + private JFrame frame; + private JButton[][] buttons; + + public SpielfeldGUI() { + frame = new JFrame("Spielfeld"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(300, 300); + + // Erstelle ein 3x3 GridLayout + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(3, 3)); + + // Erstelle das Spielfeld mit 3x3 Buttons + buttons = new JButton[4][4]; + + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + buttons[i][j] = new JButton("-"); + buttons[i][j].addActionListener(e -> { + JButton clickedButton = (JButton) e.getSource(); + clickedButton.setText("X"); // Ändert den Text zu "X" beim Klick + }); + panel.add(buttons[i][j]); + } + } + + // Füge das Panel zum Frame hinzu + frame.add(panel); + frame.setVisible(true); // Zeige das Fenster an + } + + public static void main(String[] args) { + // Starte die GUI + SwingUtilities.invokeLater(new Runnable() { + public void run() { + new SpielfeldGUI(); + } + }); + } +} diff --git a/Tic_tac_toe/src/spiel/TicTacToe.java b/Tic_tac_toe/src/spiel/TicTacToe.java new file mode 100644 index 0000000..e65e38d --- /dev/null +++ b/Tic_tac_toe/src/spiel/TicTacToe.java @@ -0,0 +1,148 @@ +package spiel; + +import java.util.Random; +import java.util.Scanner; + +public class TicTacToe { + static String[][] spielField = new String[3][3]; + static String zufälligeZuges = "X"; + static String menschlichenZuges = "O"; + + public static void Spielfelde() { + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + spielField[i][j] = " "; + + } + + public static void SpielfeldeAusgeben() { + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) + System.out.print("[" + spielField[i][j] + "]"); + + System.out.println(); + } + } + + public static void zufälligKreuz() { + Random rand = new Random(); + + while (true) { + int x = rand.nextInt(3); + int y = rand.nextInt(3); + if (spielField[x][y].equals(" ")) { + spielField[x][y] = zufälligeZuges; + break; + } else + continue; + + } + + } + + public static void menschlichenZuges(int x, int y) { + + while (true) { + if (spielField[x][y].equals(" ")) { + spielField[x][y] = menschlichenZuges; + break; + } else { + System.out.println("Falsche Eingabe, Versuche bitte nochmal!"); + continue; + } + + } + + } + + public static boolean checkGewinner() { + // Zeilen überprüfen + for (int i = 0; i < 3; i++) { + if ((spielField[i][0].equals(zufälligeZuges) && spielField[i][1].equals(zufälligeZuges) + && spielField[i][2].equals(zufälligeZuges)) + || (spielField[i][0].equals(menschlichenZuges) && spielField[i][1].equals(menschlichenZuges) + && spielField[i][2].equals(menschlichenZuges))) { + return true; + } + } + + // Spalten überprüfen + for (int i = 0; i < 3; i++) { + if ((spielField[0][i].equals(zufälligeZuges) && spielField[1][i].equals(zufälligeZuges) + && spielField[2][i].equals(zufälligeZuges)) + || (spielField[0][i].equals(menschlichenZuges) && spielField[1][i].equals(menschlichenZuges) + && spielField[2][i].equals(menschlichenZuges))) { + return true; + } + } + + // Diagonalen überprüfen + if ((spielField[0][0].equals(zufälligeZuges) && spielField[1][1].equals(zufälligeZuges) + && spielField[2][2].equals(zufälligeZuges)) + || (spielField[0][0].equals(menschlichenZuges) && spielField[1][1].equals(menschlichenZuges) + && spielField[2][2].equals(menschlichenZuges))) { + return true; + } + if ((spielField[0][2].equals(zufälligeZuges) && spielField[1][1].equals(zufälligeZuges) + && spielField[2][0].equals(zufälligeZuges)) + || (spielField[0][2].equals(menschlichenZuges) && spielField[1][1].equals(menschlichenZuges) + && spielField[2][0].equals(menschlichenZuges))) { + return true; + } + + return false; + } + + public static boolean istSpielfeldVoll() { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (spielField[i][j].equals(" ")) { + return false; + } + } + } + return true; + } + + public static void main(String[] args) { + Scanner scan = new Scanner(System.in); + System.out.println("<< Willkommen in Tic Tac Toe >> "); + Spielfelde(); + SpielfeldeAusgeben(); + + boolean aktiv = true; + while (aktiv) { + System.out.println("Gib bitte Position x und Position y ein: "); + int x = scan.nextInt(); + int y = scan.nextInt(); + menschlichenZuges(x, y); + SpielfeldeAusgeben(); + + if (checkGewinner()) { + System.out.println("Spieler O hat gewonnen!"); + aktiv = false; + } else if (istSpielfeldVoll()) { + System.out.println("Unentschieden!"); + aktiv = false; + } + + if (aktiv) { + System.out.println("Ein Kreuz wird zufällig gesetzt"); + zufälligKreuz(); + SpielfeldeAusgeben(); + + if (checkGewinner()) { + System.out.println("Spieler X hat gewonnen!"); + aktiv = false; + } else if (istSpielfeldVoll()) { + System.out.println("Unentschieden!"); + aktiv = false; + } + } + } + scan.close(); + } + +} diff --git a/Tic_tac_toe/src/spiel/Tic_Tac_Toe.java b/Tic_tac_toe/src/spiel/Tic_Tac_Toe.java new file mode 100644 index 0000000..54af0a0 --- /dev/null +++ b/Tic_tac_toe/src/spiel/Tic_Tac_Toe.java @@ -0,0 +1,15 @@ +package spiel; +import java.util.Scanner; + +public class Tic_Tac_Toe { + + + public static void main(String[] args){ + Modell obai = new Modell("obai","X"); + Modell omar = new Modell("omar","O"); + + View view = new View(); + + Controller spiel = new Controller(obai,omar,view); + } +} diff --git a/Tic_tac_toe/src/spiel/View.java b/Tic_tac_toe/src/spiel/View.java new file mode 100644 index 0000000..cf9e931 --- /dev/null +++ b/Tic_tac_toe/src/spiel/View.java @@ -0,0 +1,85 @@ +package spiel; + +import java.awt.EventQueue; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import java.awt.Color; +import javax.swing.border.LineBorder; +import javax.swing.JLabel; +import javax.swing.JButton; +import javax.swing.JTextField; +import java.awt.GridLayout; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +public class View extends JFrame { + + private static final long serialVersionUID = 1L; + private JPanel contentPane; + JLabel nameSpieler1; + JLabel nameSpieler2; + JLabel anzahlgewinn1; + JLabel anzahlgewinn2; + JLabel XoderO; + JButton[][] x_o; + + public View() { + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setBounds(100, 100, 626, 709); + this.contentPane = new JPanel(); + this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + + setContentPane(contentPane); + contentPane.setLayout(null); + + JPanel panel = new JPanel(); + panel.setBorder(new LineBorder(new Color(128, 255, 128), 2)); + panel.setBackground(new Color(192, 192, 192)); + panel.setBounds(38, 36, 529, 585); + contentPane.add(panel); + panel.setLayout(null); + + nameSpieler1 = new JLabel(); + nameSpieler1.setBounds(46, 27, 100, 14); + panel.add(nameSpieler1); + + anzahlgewinn1 = new JLabel(); + anzahlgewinn1.setBounds(46, 52, 100, 14); + panel.add(anzahlgewinn1); + + nameSpieler2 = new JLabel(); + nameSpieler2.setBounds(391, 27, 100, 14); + panel.add(nameSpieler2); + + anzahlgewinn2 = new JLabel(); + anzahlgewinn2.setBounds(391, 52, 100, 14); + panel.add(anzahlgewinn2); + + XoderO = new JLabel("New label"); + XoderO.setBounds(222, 41, 100, 14); + panel.add(XoderO); + + JButton btnNewButton = new JButton("New Game"); + btnNewButton.setBounds(196, 447, 129, 23); + panel.add(btnNewButton); + + JPanel panel_1 = new JPanel(); + panel_1.setBounds(101, 125, 312, 291); + panel.add(panel_1); + panel_1.setLayout(new GridLayout(3, 3, 0, 0)); + + x_o = new JButton[3][3]; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) { + x_o[i][j] = new JButton("-"); + panel_1.add(x_o[i][j]); + } + + panel.add(panel_1); + + this.setVisible(true); + } +}