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