Tic-Tac-Toe
commit
49302ad890
|
@ -0,0 +1 @@
|
||||||
|
/bin/
|
|
@ -0,0 +1,2 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding/<project>=UTF-8
|
|
@ -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
|
|
@ -0,0 +1,9 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
module Tic_tac_toe {
|
||||||
|
requires java.desktop;
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue