diff --git a/Semesterprojekt/src/Anzeige/GUI.java b/Semesterprojekt/src/Anzeige/GUI.java new file mode 100644 index 0000000..b6c801a --- /dev/null +++ b/Semesterprojekt/src/Anzeige/GUI.java @@ -0,0 +1,182 @@ +package Anzeige; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +import Logik.TicTacToe; + +public class GUI extends JFrame{ + + private TicTacToe ttt; + private ArrayList buttons = new ArrayList<>(); + private JButton neuesSpiel = new JButton(); + private JButton konsole = new JButton(); + private boolean spielEnde = false; + + public GUI(TicTacToe ttt) { + + this.ttt = ttt; + + this.setTitle("TicTacToe"); + this.setSize(500,600); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setLocationRelativeTo(null); + this.setLayout(new BorderLayout()); + + fuelleArrayList(); + + JPanel jp2 = new JPanel(); + jp2.setLayout(new BorderLayout()); + jp2.setPreferredSize(new Dimension(500,150)); + + neuesSpiel.setFocusPainted(false); + neuesSpiel.setFont(new Font("Arial",Font.PLAIN, 30)); + neuesSpiel.setBackground(new Color(65,65,65)); + neuesSpiel.setForeground(Color.WHITE); + neuesSpiel.setText("Neues Spiel beginnnen?"); + neuesSpiel.setPreferredSize(new Dimension(500,75)); + neuesSpiel.setBorderPainted(false); + neuesSpiel.addActionListener(new ActionListener() { + + + @Override + public void actionPerformed(ActionEvent e) { + + ttt.setCounter(0); + ttt.setAktuellerSpieler('X'); + spielEnde = false; + ttt.fuelleTreeMap(); + + + for(JButton b: buttons) { + + b.setForeground(Color.WHITE); + b.setText(""); + + } + + revalidate(); + repaint(); + } + }); + + jp2.add(neuesSpiel, BorderLayout.NORTH); + + konsole.setFocusPainted(false); + konsole.setFont(new Font("Arial",Font.PLAIN, 30)); + konsole.setBackground(new Color(90,90,90)); + konsole.setForeground(Color.WHITE); + konsole.setText("Zurück zur Konsole?"); + konsole.setPreferredSize(new Dimension(500,75)); + konsole.setBorderPainted(false); + konsole.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + try { + + dispose(); + ttt.ermittleEingabeAnfang(); + + } catch (Exception e1) { + + System.out.println("Eingabe von GUI zur Konsole konnte nicht aufgerufen werden"); + } + } + + }); + + jp2.add(konsole, BorderLayout.SOUTH); + + + this.add(jp2, BorderLayout.SOUTH); + this.setVisible(true); + + } + + private void fuelleArrayList() { + + JPanel jp = new JPanel(new GridLayout(3,3)); + + for(int i = 0; i < 9; i++) { + + JButton b = new JButton(); + + //System.out.println("Button "+i+" wurde erstellt."); + + b.setFocusPainted(false); + b.setFont(new Font("Arial",Font.PLAIN, 70)); + + if(i%2 == 0) { + b.setBackground(new Color(90,90,90)); + + }else { + b.setBackground(new Color(65,65,65)); + } + + b.setForeground(Color.WHITE); + b.setBorderPainted(false); + + b.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + SwingUtilities.invokeLater(() -> { + + actionListenerInhalt(b); + + }); + } + }); + + + b.setVisible(true); + + + buttons.add(b); + jp.add(b); + this.add(jp); + } + } + + private void actionListenerInhalt(JButton b) { + + int index = buttons.indexOf(b); + if (!ttt.pruefeBelegtesFeld(index) && !spielEnde) { + ttt.belegteFelder.put(index, ttt.getAktuellerSpieler()); + b.setText("" + ttt.getAktuellerSpieler()); + + if (ttt.getCounter() >= 4 && ttt.pruefeSieg()) { + spielEnde = true; + int[] gewinnerIndexe = ttt.getGewinnerIndexe(); + + for (int i = 0; i < 3; i++) { + buttons.get(gewinnerIndexe[i]).setForeground(Color.RED); + buttons.get(gewinnerIndexe[i]).setText("" + ttt.getAktuellerSpieler()); + } + } + + ttt.setCounter(ttt.getCounter() + 1); + + if (ttt.getAktuellerSpieler() == 'X') { + ttt.setAktuellerSpieler('O'); + } else { + ttt.setAktuellerSpieler('X'); + } + + repaint(); + } + } +} diff --git a/Semesterprojekt/src/GUI/GUI.java b/Semesterprojekt/src/GUI/GUI.java deleted file mode 100644 index e4e61b3..0000000 --- a/Semesterprojekt/src/GUI/GUI.java +++ /dev/null @@ -1,71 +0,0 @@ -package GUI; - -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.TreeMap; - -import javax.swing.JButton; -import javax.swing.JFrame; - -import Verarbeitung.TicTacToe; - -public class GUI extends JFrame{ - - private TicTacToe ttt; - private ArrayList buttons = new ArrayList<>(); - - public GUI(TicTacToe ttt) { - - this.ttt = ttt; - - this.setTitle("TicTacToe"); - this.setSize(500,500); - this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - this.setLocationRelativeTo(null); - this.setLayout(new GridLayout(3,3)); - - fuelleArrayList(); - - this.setVisible(true); - - } - - private void fuelleArrayList() { - - for(int i=0;i<9;i++) { - JButton b = new JButton(); - b.setContentAreaFilled(false); - b.setFocusPainted(false); - - b.setVisible(true); - buttons.add(b); - this.add(b); - - final int a = i; - b.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - System.out.println("Button "+buttons.indexOf(b)+" wurde gedrueckt"); - - TreeMap belegteFelder = ttt.getBelegteFelder(); - - if (belegteFelder.get(buttons.indexOf(b)) == 'X' || belegteFelder.get(buttons.indexOf(b)) == 'O') { - System.out.println("Feld " + buttons.indexOf(b) + " schon belegt, machen Sie eine erneute Eingabe..."); - } else { - belegteFelder.put(buttons.indexOf(b), ttt.getAktuellerSpieler()); - b.setName(""+ttt.getAktuellerSpieler()); - } - - - if (ttt.getAktuellerSpieler() == 'X')ttt.setAktuellerSpieler('O'); - else ttt.setAktuellerSpieler('X'); - - } - }); - } - } -} diff --git a/Semesterprojekt/src/Logik/TicTacToe.java b/Semesterprojekt/src/Logik/TicTacToe.java new file mode 100644 index 0000000..c303fa3 --- /dev/null +++ b/Semesterprojekt/src/Logik/TicTacToe.java @@ -0,0 +1,193 @@ +package Logik; + +import java.util.Scanner; +import java.util.TreeMap; + +import Anzeige.GUI; + +public class TicTacToe { + + public TreeMap belegteFelder = new TreeMap<>(); + + private int counter; + private GUI gui; + private char aktuellerSpieler; + private int ausgewaehltesFeld; + private int[] gewinnerIndexe = new int[3]; + + public TicTacToe() throws Exception { + + ermittleEingabeAnfang(); + + } + + public void ermittleEingabeAnfang() throws Exception { + + //setzt praktisch werte zurück + fuelleTreeMap(); + aktuellerSpieler = 'X'; + counter = 0; + + Scanner s = new Scanner(System.in); + System.out.println("\nWollen Sie mit einer GUI('gui' eingeben) oder mit der Konsole('konsole' eingeben) spielen?"); + String befehl = s.nextLine(); + + if (befehl.equalsIgnoreCase("gui")) { + + System.out.println("Um ein Feld für ein Zug auszuwählen muss dieses Feld angeklickt werden..."); + + gui = new GUI(this); + + } else if (befehl.equalsIgnoreCase("konsole")) { + + gibAktuellenStandAus(); + + System.out.println("Die Felder sind von 0 bis 8 durchnummerriert.\nUm ein Feld für ein Zug auszuwählen muss die Zahl des Feldes eingegeben werden..."); + + for (int i = 0; i < 9; i++) { + + erfasseEingabe(); + gibAktuellenStandAus(); + + if (i >= 4 && pruefeSieg()) break; + + if (aktuellerSpieler == 'X')aktuellerSpieler = 'O'; + else aktuellerSpieler = 'X'; + + } + + ermittleEingabeAnfang(); + + }else if(befehl.equalsIgnoreCase("ende")) { + System.out.println("Spiel wird beendet."); + System.exit(0); + }else { + System.out.println("Eingabe ungültig!\nVersuchen Sie es erneut."); + ermittleEingabeAnfang(); + } + } + + public void fuelleTreeMap() { + for (int i = 0; i < 9; i++) { + belegteFelder.put(i, (char) (48 + i)); + } + } + + private void gibAktuellenStandAus() { + + System.out.println("\n-------------"); + for (int i = 0; i < 9; i+=3) { + System.out.printf("|%2s |%2s |%2s |", belegteFelder.get(i), belegteFelder.get(i+1), belegteFelder.get(i+2)); + System.out.println("\n-------------"); + } + System.out.println(); + } + + private void erfasseEingabe() throws Exception { + + Scanner s = new Scanner(System.in); + + System.out.print("\nSpieler " + aktuellerSpieler + " ist am Zug!\nGeben Sie eine Feldnummer ein:\n>>"); + + try { + ausgewaehltesFeld = s.nextInt(); + System.out.println("Die Eingabe: " + ausgewaehltesFeld); + if(pruefeBelegtesFeld(ausgewaehltesFeld)) throw new Exception(); + } catch (Exception e) { + System.out.println("Es wurde keine passende Eingabe getätigt,\nversuchen Sie es erneut..."); + //e.printStackTrace(); + erfasseEingabe(); + } + } + + public synchronized boolean pruefeBelegtesFeld(int index) { + + System.out.println("Zu pruefender Index: "+index); + if (belegteFelder.get(index) == 'X' || belegteFelder.get(index) == 'O') { + System.out.println("Feld " + ausgewaehltesFeld + " schon belegt, machen Sie eine erneute Eingabe..."); + return true; + } + + belegteFelder.put(ausgewaehltesFeld, aktuellerSpieler); + return false; + + } + + public boolean pruefeSieg() { + + if ((belegteFelder.get(0) == aktuellerSpieler) && (belegteFelder.get(1) == aktuellerSpieler) && (belegteFelder.get(2) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der ersten Waagerechte und hat somit gewonnen!"); + gewinnerIndexe[0] = 0; + gewinnerIndexe[1] = 1; + gewinnerIndexe[2] = 2; + return true; + } else if ((belegteFelder.get(3) == aktuellerSpieler) && (belegteFelder.get(4) == aktuellerSpieler) && (belegteFelder.get(5) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der zweiten Waagerechte und hat somit gewonnen!"); + gewinnerIndexe[0] = 3; + gewinnerIndexe[1] = 4; + gewinnerIndexe[2] = 5; + return true; + } else if ((belegteFelder.get(6) == aktuellerSpieler) && (belegteFelder.get(7) == aktuellerSpieler) && (belegteFelder.get(8) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der dritten Waagerechte und hat somit gewonnen!"); + gewinnerIndexe[0] = 6; + gewinnerIndexe[1] = 7; + gewinnerIndexe[2] = 8; + return true; + } else if ((belegteFelder.get(0) == aktuellerSpieler) && (belegteFelder.get(3) == aktuellerSpieler) && (belegteFelder.get(6) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der ersten Senkrechte und hat somit gewonnen!"); + gewinnerIndexe[0] = 0; + gewinnerIndexe[1] = 3; + gewinnerIndexe[2] = 6; + return true; + } else if ((belegteFelder.get(1) == aktuellerSpieler) && (belegteFelder.get(4) == aktuellerSpieler) && (belegteFelder.get(7) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der zweiten Senkrechte und hat somit gewonnen!"); + gewinnerIndexe[0] = 1; + gewinnerIndexe[1] = 4; + gewinnerIndexe[2] = 7; + return true; + } else if ((belegteFelder.get(2) == aktuellerSpieler) && (belegteFelder.get(5) == aktuellerSpieler) && (belegteFelder.get(8) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der dritten Senkrechte und hat somit gewonnen!"); + gewinnerIndexe[0] = 2; + gewinnerIndexe[1] = 5; + gewinnerIndexe[2] = 8; + return true; + } else if ((belegteFelder.get(0) == aktuellerSpieler) && (belegteFelder.get(4) == aktuellerSpieler) && (belegteFelder.get(8) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der ersten Diagonale und hat somit gewonnen!"); + gewinnerIndexe[0] = 0; + gewinnerIndexe[1] = 4; + gewinnerIndexe[2] = 8; + return true; + } else if ((belegteFelder.get(2) == aktuellerSpieler) && (belegteFelder.get(4) == aktuellerSpieler) && (belegteFelder.get(6) == aktuellerSpieler)) { + System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler+ "' in der zweiten Diagonale und hat somit gewonnen!"); + gewinnerIndexe[0] = 2; + gewinnerIndexe[1] = 4; + gewinnerIndexe[2] = 6; + return true; + } + return false; + } + + public void setAktuellerSpieler(char aktuellerSpieler) { + this.aktuellerSpieler = aktuellerSpieler; + } + + public char getAktuellerSpieler() { + return aktuellerSpieler; + } + + public TreeMap getBelegteFelder() { + return belegteFelder; + } + + public int[] getGewinnerIndexe() { + return gewinnerIndexe; + } + + public int getCounter() { + return counter; + } + + public void setCounter(int counter) { + this.counter = counter; + } +} diff --git a/Semesterprojekt/src/Logik/main.java b/Semesterprojekt/src/Logik/main.java new file mode 100644 index 0000000..5e3c60f --- /dev/null +++ b/Semesterprojekt/src/Logik/main.java @@ -0,0 +1,15 @@ +package Logik; + +public class main { + + public static void main(String[] args) { + + try { + TicTacToe ttt = new TicTacToe(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + +} diff --git a/Semesterprojekt/src/Verarbeitung/TicTacToe.java b/Semesterprojekt/src/Verarbeitung/TicTacToe.java deleted file mode 100644 index f94cb78..0000000 --- a/Semesterprojekt/src/Verarbeitung/TicTacToe.java +++ /dev/null @@ -1,154 +0,0 @@ -package Verarbeitung; - -import java.util.Scanner; -import java.util.TreeMap; - -import GUI.GUI; - -public class TicTacToe { - - private GUI gui; - private TreeMap belegteFelder = new TreeMap<>(); - private char aktuellerSpieler = 'X'; - private int ausgewaehltesFeld = 0; - - public TicTacToe() { - - Scanner s = new Scanner(System.in); - System.out.println("Wollen Sie mit einer GUI('gui' eingeben) oder mit der Konsole('konsole' eingeben) spielen?"); - String befehl = s.nextLine(); - - fuelleTreeMap(); - - if (befehl.equalsIgnoreCase("gui")) { - - System.out.println("Spieler 1 ist X, Sieler 2 ist O.\nUm ein Feld für ein Zug auszuwählen muss dieses Feld angeklickt werden..."); - - gui = new GUI(this); - - - - - } else if (befehl.equalsIgnoreCase("konsole")) { - System.out.println("Spieler 1 ist X, Sieler 2 ist O.\nDie Felder sind von 1 bis 9 durchnummerriert.\nUm ein Feld für ein Zug auszuwählen muss die Zahl des Feldes eingegeben werden..."); - - for (int i = 1; i <= 9; i++) { - - erfasseEingabe(); - gibAktuellenStandAus(); - if (i >= 5) - pruefeSieg(); - - if (aktuellerSpieler == 'X')aktuellerSpieler = 'O'; - else aktuellerSpieler = 'X'; - - } - - System.out.println("Ergebnis des Spiels ist ein Untentschieden!"); - } else { - System.out.println("Eingabe ungültig!"); - } - } - - // Fuellt die TreeMap mit Standart Werten - private void fuelleTreeMap() { - for (int i = 1; i <= 9; i++) { - belegteFelder.put(i, (char) (48 + i)); - } - } - - private void gibAktuellenStandAus() { - - System.out.println("\n-------------"); - int counter = 0; - while (counter < 9) { - System.out.printf("|%2s |%2s |%2s |", belegteFelder.get(counter += 1), belegteFelder.get(counter += 1), - belegteFelder.get(counter += 1)); - System.out.println("\n-------------"); - } - } - - private void erfasseEingabe() { - - Scanner s = new Scanner(System.in); - - System.out.println("Spieler " + aktuellerSpieler + " ist am Zug!"); - - System.out.println("Geben Sie eine Feldnummer ein:\n>>"); - - try { - ausgewaehltesFeld = s.nextInt(); - System.out.println("Die Eingabe: " + ausgewaehltesFeld); - } catch (Exception E) { - System.out.println("Es wurde keine passende Eingabe getätigt,\nversuchen Sie es erneut..."); - erfasseEingabe(); - } - - if (belegteFelder.get(ausgewaehltesFeld) == 'X' || belegteFelder.get(ausgewaehltesFeld) == 'O') { - System.out.println("Feld " + ausgewaehltesFeld + " schon belegt, machen Sie eine erneute Eingabe..."); - erfasseEingabe(); - } else { - belegteFelder.put(ausgewaehltesFeld, aktuellerSpieler); - } - - } - - private void pruefeSieg() { - - if (belegteFelder.get(1) == aktuellerSpieler && belegteFelder.get(2) == aktuellerSpieler - && belegteFelder.get(3) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der ersten Waagerechte und hat somit gewonnen!"); - System.exit(0); - } else if (belegteFelder.get(4) == aktuellerSpieler && belegteFelder.get(5) == aktuellerSpieler - && belegteFelder.get(6) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der zweiten Waagerechte und hat somit gewonnen!"); - System.exit(0); - } else if (belegteFelder.get(7) == aktuellerSpieler && belegteFelder.get(8) == aktuellerSpieler - && belegteFelder.get(9) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der dritten Waagerechte und hat somit gewonnen!"); - System.exit(0); - } else if (belegteFelder.get(1) == aktuellerSpieler && belegteFelder.get(4) == aktuellerSpieler - && belegteFelder.get(7) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der ersten Senkrechte und hat somit gewonnen!"); - System.exit(0); - } else if (belegteFelder.get(2) == aktuellerSpieler && belegteFelder.get(5) == aktuellerSpieler - && belegteFelder.get(8) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der zweiten Senkrechte und hat somit gewonnen!"); - System.exit(0); - } else if (belegteFelder.get(3) == aktuellerSpieler && belegteFelder.get(6) == aktuellerSpieler - && belegteFelder.get(9) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der dritten Senkrechte und hat somit gewonnen!"); - System.exit(0); - } else if (belegteFelder.get(1) == aktuellerSpieler && belegteFelder.get(5) == aktuellerSpieler - && belegteFelder.get(9) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der ersten Diagonale und hat somit gewonnen!"); - System.exit(0); - } else if (belegteFelder.get(3) == aktuellerSpieler && belegteFelder.get(5) == aktuellerSpieler - && belegteFelder.get(7) == aktuellerSpieler) { - System.out.println("Spieler " + aktuellerSpieler + " hat drei '" + aktuellerSpieler - + "' in der zweiten Diagonale und hat somit gewonnen!"); - System.exit(0); - } - } - - public void setAktuellerSpieler(char aktuellerSpieler) { - this.aktuellerSpieler = aktuellerSpieler; - } - - public char getAktuellerSpieler() { - return aktuellerSpieler; - } - - public TreeMap getBelegteFelder() { - return belegteFelder; - } - - -} diff --git a/Semesterprojekt/src/Verarbeitung/main.java b/Semesterprojekt/src/Verarbeitung/main.java deleted file mode 100644 index 2a6c917..0000000 --- a/Semesterprojekt/src/Verarbeitung/main.java +++ /dev/null @@ -1,11 +0,0 @@ -package Verarbeitung; - -public class main { - - public static void main(String[] args) { - - TicTacToe ttt = new TicTacToe(); - - } - -}