Tic-Tac-Toe

master
Obai Albek 2025-05-21 19:24:05 +02:00
commit 49302ad890
10 changed files with 470 additions and 0 deletions

1
Tic_tac_toe/.gitignore vendored 100644
View File

@ -0,0 +1 @@
/bin/

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -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

View File

@ -0,0 +1,9 @@
/**
*
*/
/**
*
*/
module Tic_tac_toe {
requires java.desktop;
}

View File

@ -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();
}
}
}

View File

@ -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;
}
}

View File

@ -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();
}
});
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}