Java :: Aufgabe #235
2 Lösungen

Tic-Tac-Toe GUI
Profi - Java
von Gelöschte Person
- 01.04.2019 um 21:22 Uhr
Programmiere ein Tic-Tac-Toe Spiele mit GUI.
Moduse die es geben sollte:
1 Spieler vs. Computergegner
1 Spieler vs. 1 Spieler
Moduse die es geben sollte:
1 Spieler vs. Computergegner
1 Spieler vs. 1 Spieler
Lösungen:
Das ganze Programm ist in mehreren Dateien geschrieben.
//Main.java
Java-Code
//Welcome GUI
Java-Code
//GUI für Spieler erstellung
Java-Code
//2 Spieler Game GUI
Java-Code
//MouseListener
Java-Code
//ActionListener
Java-Code
//Jetz der Player vs Pc Part
//Spielererstellung
Java-Code
//PvC Game GUI
Java-Code
//MouseListener
Java-Code
// KI
Java-Code
//ActionListener
Java-Code
Bitte seid gnädig xD wäre bestimmt auch kompakter gegangen ich bin aber jetz erstmal froh das es läuft ^^
//Main.java

package Main; import java.awt.EventQueue; import P2P.*; import P2C.*; public class Main { protected static int win = 0; protected static int loose = 0; protected static int draw = 0; protected static String s1; protected static String s2; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { startGUI_W(); } catch (Exception e) { e.printStackTrace(); } } }); } public static void startGUI() { @SuppressWarnings("unused") GUI maingame = new GUI(getWin(),getLoose(),getDraw()); } public static void startGUI2() { @SuppressWarnings("unused") GUI2 maingame = new GUI2(getWin(),getLoose(),getDraw()); } public static void startGUI_W() { @SuppressWarnings("unused") GUI_W window = new GUI_W(); } static void startGUI_2P() { @SuppressWarnings("unused") GUI_2P pvp = new GUI_2P(); } public static void setNames(String name, String name2) { s1 = name; s2 = name2; } public static String gets1() { return s1; } public static String gets2() { return s2; } public static String getWin() { String count = Integer.toString(win); return count; } public static void setWin() { win++; } public static String getLoose() { String count = Integer.toString(loose); return count; } public static void setLoose() { loose++; } public static String getDraw() { String count = Integer.toString(draw); return count; } public static void setDraw() { draw++; } public static void reset() { win = 0; loose = 0; draw = 0; startGUI_W(); } }
//Welcome GUI

package Main; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import P2C.GUI_1P; import P2P.GUI_2P; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Font; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; @SuppressWarnings("serial") public class GUI_W extends JFrame { private JPanel contentPane; public GUI_W() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); JLabel lbl_welcome = new JLabel(""); lbl_welcome.setIcon(new ImageIcon("img/welcome.png")); contentPane.add(lbl_welcome, BorderLayout.NORTH); JPanel panel = new JPanel(); contentPane.add(panel, BorderLayout.CENTER); panel.setLayout(null); JLabel lblWhleDenSpielmodus = new JLabel("W\u00E4hle den Spielmodus "); lblWhleDenSpielmodus.setFont(new Font("Wide Latin", Font.PLAIN, 20)); lblWhleDenSpielmodus.setBounds(10, 0, 404, 65); panel.add(lblWhleDenSpielmodus); JButton btnSpieler = new JButton("2 Spieler"); btnSpieler.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if ("2 Spieler".equals(s) ) { dispose(); @SuppressWarnings("unused") GUI_2P game = new GUI_2P(); } } }); btnSpieler.setBounds(60, 76, 89, 23); panel.add(btnSpieler); JButton btnNewButton = new JButton("Gegen PC"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if ("Gegen PC".equals(s) ) { dispose(); @SuppressWarnings("unused") GUI_1P game = new GUI_1P(); } } }); btnNewButton.setBounds(275, 76, 99, 23); panel.add(btnNewButton); setVisible(true); } }
//GUI für Spieler erstellung

package P2P; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JLabel; import java.awt.Font; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.ImageIcon; import javax.swing.SwingConstants; @SuppressWarnings("serial") public class GUI_2P extends JFrame { private JPanel contentPane; private JTextField txt_name; private JTextField txt_name2; public GUI_2P() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); AL al =new AL(this); JLabel lblNewLabel = new JLabel(""); lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); lblNewLabel.setIcon(new ImageIcon("img/2p.png")); lblNewLabel.setBounds(10, 11, 414, 57); contentPane.add(lblNewLabel); JLabel lblSpieler = new JLabel("Spieler 1:"); lblSpieler.setFont(new Font("Tahoma", Font.PLAIN, 14)); lblSpieler.setBounds(10, 105, 66, 29); contentPane.add(lblSpieler); JLabel lblSpieler_1 = new JLabel("Spieler 2:"); lblSpieler_1.setFont(new Font("Tahoma", Font.PLAIN, 14)); lblSpieler_1.setBounds(10, 145, 66, 29); contentPane.add(lblSpieler_1); txt_name = new JTextField(); txt_name.setFont(new Font("Tahoma", Font.PLAIN, 14)); txt_name.setBounds(86, 105, 90, 29); contentPane.add(txt_name); txt_name.setColumns(10); txt_name2 = new JTextField(); txt_name2.setFont(new Font("Tahoma", Font.PLAIN, 14)); txt_name2.setColumns(10); txt_name2.setBounds(86, 145, 90, 29); contentPane.add(txt_name2); JButton btnZurck = new JButton("Zur\u00FCck"); btnZurck.setBounds(335, 227, 89, 23); btnZurck.addActionListener(al); contentPane.add(btnZurck); JButton btnStart = new JButton("Start"); btnStart.setBounds(236, 227, 89, 23); btnStart.addActionListener(al); contentPane.add(btnStart); JButton btnReset = new JButton("Reset"); btnReset.setBounds(10, 227, 89, 23); btnReset.addActionListener(al); contentPane.add(btnReset); setVisible(true); } void setName1(String name) { txt_name.setText(name); } void setName2(String name) { txt_name2.setText(name); } public String getName() { String name = txt_name.getText(); return name; } public String getName2() { String name = txt_name2.getText(); return name; } }
//2 Spieler Game GUI

package P2P; import javax.swing.JFrame; import java.awt.Image; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.LineBorder; import Main.Main; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.ArrayList; public class GUI { static JFrame frame; static JLabel field1, field2, field3, field4, field5, field6, field7, field8, field9; static JLabel win = new JLabel(Main.getWin()); static JLabel loose = new JLabel(Main.getLoose()); static JLabel draw = new JLabel(Main.getDraw()); static boolean x = true; static ArrayList<Integer> list_p1 = new ArrayList<Integer>(); static ArrayList<Integer> list_p2 = new ArrayList<Integer>(); static boolean[] clicked = {false,false,false,false,false,false,false,false,false,false}; static Border b = LineBorder.createGrayLineBorder(); public GUI(String win, String loose, String draw) { initialize(); } private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 500, 574); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); @SuppressWarnings("unused") Border ub = BorderFactory.createLoweredBevelBorder(); JPanel panel = new JPanel(); panel.setBounds(43, 11, 400, 400); frame.getContentPane().add(panel); panel.setLayout(null); field1 = new JLabel(""); field1.setHorizontalAlignment(SwingConstants.CENTER); field1.addMouseListener(new Player(frame, field1, 1)); field1.setBounds(7, 7, 125, 125); field1.setBorder(b); panel.add(field1); field2 = new JLabel(""); field2.setHorizontalAlignment(SwingConstants.CENTER); field2.addMouseListener(new Player(frame, field2, 2)); field2.setBounds(138, 7, 125, 125); field2.setBorder(b); panel.add(field2); field3 = new JLabel(""); field3.setHorizontalAlignment(SwingConstants.CENTER); field3.addMouseListener(new Player(frame, field3, 3)); field3.setBounds(269, 7, 125, 125); field3.setBorder(b); panel.add(field3); field4 = new JLabel(""); field4.setHorizontalAlignment(SwingConstants.CENTER); field4.addMouseListener(new Player(frame, field4, 4)); field4.setBounds(7, 138, 125, 125); field4.setBorder(b); panel.add(field4); field7 = new JLabel(""); field7.setHorizontalAlignment(SwingConstants.CENTER); field7.addMouseListener(new Player(frame, field7, 7)); field7.setBounds(7, 269, 125, 125); field7.setBorder(b); panel.add(field7); field5 = new JLabel(""); field5.setHorizontalAlignment(SwingConstants.CENTER); field5.addMouseListener(new Player(frame, field5, 5)); field5.setBounds(138, 138, 125, 125); field5.setBorder(b); panel.add(field5); field6 = new JLabel(""); field6.setHorizontalAlignment(SwingConstants.CENTER); field6.addMouseListener(new Player(frame, field6, 6)); field6.setBounds(269, 138, 125, 125); field6.setBorder(b); panel.add(field6); field8 = new JLabel(""); field8.setHorizontalAlignment(SwingConstants.CENTER); field8.addMouseListener(new Player(frame, field8, 8)); field8.setBounds(138, 269, 125, 125); field8.setBorder(b); panel.add(field8); field9 = new JLabel(""); field9.setHorizontalAlignment(SwingConstants.CENTER); field9.addMouseListener(new Player(frame, field9, 9)); field9.setBounds(269, 269, 125, 125); field9.setBorder(b); panel.add(field9); JLabel player1 = new JLabel("Spieler 1:"); player1.setBounds(43, 430, 69, 14); frame.getContentPane().add(player1); JLabel player2 = new JLabel("Spieler 2:"); player2.setBounds(43, 455, 69, 14); frame.getContentPane().add(player2); JLabel name1 = new JLabel(Main.gets1()); name1.setBounds(99, 430, 70, 14); frame.getContentPane().add(name1); JLabel name2 = new JLabel(Main.gets2()); name2.setBounds(99, 455, 70, 14); frame.getContentPane().add(name2); win.setHorizontalAlignment(SwingConstants.CENTER); win.setBounds(397, 430, 46, 14); frame.getContentPane().add(win); loose.setHorizontalAlignment(SwingConstants.CENTER); loose.setBounds(397, 455, 46, 14); frame.getContentPane().add(loose); draw.setHorizontalAlignment(SwingConstants.CENTER); draw.setBounds(397, 480, 46, 14); frame.getContentPane().add(draw); JLabel lbl_win = new JLabel("Gewonnen:"); lbl_win.setHorizontalAlignment(SwingConstants.RIGHT); lbl_win.setBounds(302, 430, 85, 14); frame.getContentPane().add(lbl_win); JLabel lbl_loose = new JLabel("Verloren:"); lbl_loose.setHorizontalAlignment(SwingConstants.RIGHT); lbl_loose.setBounds(302, 455, 85, 14); frame.getContentPane().add(lbl_loose); JLabel lbl_draw = new JLabel("Unentschieden:"); lbl_draw.setHorizontalAlignment(SwingConstants.RIGHT); lbl_draw.setBounds(267, 480, 120, 14); frame.getContentPane().add(lbl_draw); JButton btnNewGame = new JButton("Neues Spiel"); btnNewGame.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { } }); btnNewGame.setBounds(23, 490, 109, 23); frame.getContentPane().add(btnNewGame); frame.setVisible(true); } void setField1(int f) { if (f == 1) { ImageIcon img = new ImageIcon("img/cross.png"); img.getImage().flush(); img.setImage(img.getImage().getScaledInstance(125, 125, Image.SCALE_DEFAULT)); field1.setIcon(img); } } static void addList_p1(int i) { list_p1.add(i); } static void addList_p2(int i) { list_p2.add(i); } static void gameWin() { if ((list_p1.contains(1) & list_p1.contains(2) & list_p1.contains(3)) | (list_p1.contains(4) & list_p1.contains(5) & list_p1.contains(6)) | (list_p1.contains(7) & list_p1.contains(8) & list_p1.contains(9)) | (list_p1.contains(1) & list_p1.contains(4) & list_p1.contains(7)) | (list_p1.contains(2) & list_p1.contains(5) & list_p1.contains(8)) | (list_p1.contains(3) & list_p1.contains(6) & list_p1.contains(9)) | (list_p1.contains(1) & list_p1.contains(5) & list_p1.contains(9)) | (list_p1.contains(3) & list_p1.contains(5) & list_p1.contains(7))) { JOptionPane.showMessageDialog(null, Main.gets1()+" hat gewonnen!"); Main.setWin(); repaint(); } if ((list_p2.contains(1) & list_p2.contains(2) & list_p2.contains(3)) | (list_p2.contains(4) & list_p2.contains(5) & list_p2.contains(6)) | (list_p2.contains(7) & list_p2.contains(8) & list_p2.contains(9)) | (list_p2.contains(1) & list_p2.contains(4) & list_p2.contains(7)) | (list_p2.contains(2) & list_p2.contains(5) & list_p2.contains(8)) | (list_p2.contains(3) & list_p2.contains(6) & list_p2.contains(9)) | (list_p2.contains(1) & list_p2.contains(5) & list_p2.contains(9)) | (list_p2.contains(3) & list_p2.contains(5) & list_p2.contains(7))) { JOptionPane.showMessageDialog(null, Main.gets2()+"hat gewonnen!"); Main.setLoose(); repaint(); } if (allClicked() == true) { JOptionPane.showMessageDialog(null, "Unentschieden!"); Main.setDraw(); repaint(); } } static void repaint() { ImageIcon img = new ImageIcon("img/plain.png"); field1.setIcon(img); field2.setIcon(img); field3.setIcon(img); field4.setIcon(img); field5.setIcon(img); field6.setIcon(img); field7.setIcon(img); field8.setIcon(img); field9.setIcon(img); list_p1.clear(); list_p2.clear(); win.setText(Main.getWin()); loose.setText(Main.getLoose()); draw.setText(Main.getDraw()); setUnClicked(); frame.repaint(); } static boolean clicked(int i) { return clicked[i]; } static void setUnClicked() { clicked[9] = false; clicked[1] = false; clicked[2] = false; clicked[3] = false; clicked[4] = false; clicked[5] = false; clicked[6] = false; clicked[7] = false; clicked[8] = false; field1.setBorder(b); field2.setBorder(b); field3.setBorder(b); field4.setBorder(b); field5.setBorder(b); field6.setBorder(b); field7.setBorder(b); field8.setBorder(b); field9.setBorder(b); } static void setClicked(int i) { clicked[i] =true; } static boolean allClicked() { boolean all = false; if (clicked[9] == true & clicked[1] == true & clicked[2] == true & clicked[3] == true & clicked[4] == true & clicked[5] == true & clicked[6] == true & clicked[7] == true & clicked[8] == true) { all = true; } return all; } }
//MouseListener

package P2P; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.Border; import javax.swing.border.LineBorder; public class Player implements MouseListener { JFrame frame; JLabel field; Border b = LineBorder.createGrayLineBorder(); Border ub = BorderFactory.createLoweredBevelBorder(); @SuppressWarnings({ "unchecked", "rawtypes" }) ArrayList<Integer> list_p1 = new ArrayList(); @SuppressWarnings({ "unchecked", "rawtypes" }) ArrayList<Integer> list_p2 = new ArrayList(); ImageIcon cross = new ImageIcon("img/cross.png"); ImageIcon circle = new ImageIcon("img/circle.png"); boolean clicked = false; int i; public Player(JFrame frame, JLabel field,int i) { this.frame = frame; this.field = field; cross.getImage().flush(); cross.setImage(cross.getImage().getScaledInstance(120, 120,Image.SCALE_DEFAULT)); circle.getImage().flush(); circle.setImage(circle.getImage().getScaledInstance(120, 120,Image.SCALE_DEFAULT)); this.i = i; } @Override public void mouseClicked(MouseEvent e) { if (GUI.clicked(i) == false) { if (GUI.x == true) { field.setIcon(cross); frame.repaint(); field_list(i); GUI.x=false; GUI.clicked[i] = true; System.out.println(GUI.list_p1); GUI.gameWin(); }else { field.setIcon(circle); frame.repaint(); field_list(i); GUI.x=true; GUI.clicked[i] = true; System.out.println(GUI.list_p2); GUI.gameWin(); }} } @Override public void mouseEntered(MouseEvent e) { if (GUI.clicked(i) == false) { field.setBorder(ub); } } @Override public void mouseExited(MouseEvent e) { if (GUI.clicked(i) == false) { field.setBorder(b); } } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } void field_list(int i) { if (i ==1 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==2 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==3 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==4 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==5 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==6 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==7 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==8 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==9 && GUI.x ==true) { GUI.addList_p1(i); } if (i ==1 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==2 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==3 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==4 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==5 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==6 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==7 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==8 && GUI.x ==false) { GUI.addList_p2(i); } if (i ==9 && GUI.x ==false) { GUI.addList_p2(i); } } }
//ActionListener

package P2P; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import Main.Main; public class AL implements ActionListener { GUI_2P frame; public AL(GUI_2P frame) { this.frame = frame; } @Override public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if ("Reset".equals(s)) { frame.setName1(""); frame.setName2(""); } if ("Start".contentEquals(s)) { Main.setNames(frame.getName(), frame.getName2()); frame.dispose(); Main.startGUI(); } if ("Zurück".equals(s)) { frame.dispose(); Main.startGUI_W(); } } }
//Jetz der Player vs Pc Part
//Spielererstellung

package P2C; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JLabel; import java.awt.Font; import java.util.Random; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.ImageIcon; import javax.swing.SwingConstants; @SuppressWarnings("serial") public class GUI_1P extends JFrame { private JPanel contentPane; private JTextField txt_name; private JTextField txt_name2; public GUI_1P() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); AL al =new AL(this); JLabel lblNewLabel = new JLabel(""); lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); lblNewLabel.setIcon(new ImageIcon("img/1p.png")); lblNewLabel.setBounds(10, 11, 414, 57); contentPane.add(lblNewLabel); JLabel lblSpieler = new JLabel("Spieler 1:"); lblSpieler.setHorizontalAlignment(SwingConstants.RIGHT); lblSpieler.setFont(new Font("Tahoma", Font.PLAIN, 14)); lblSpieler.setBounds(10, 105, 70, 29); contentPane.add(lblSpieler); JLabel lblSpieler_1 = new JLabel("Spieler(PC):"); lblSpieler_1.setFont(new Font("Tahoma", Font.PLAIN, 14)); lblSpieler_1.setBounds(10, 145, 76, 29); contentPane.add(lblSpieler_1); txt_name = new JTextField(); txt_name.setFont(new Font("Tahoma", Font.PLAIN, 14)); txt_name.setBounds(86, 105, 90, 29); contentPane.add(txt_name); txt_name.setColumns(10); txt_name2 = new JTextField(kiName()); txt_name2.setFont(new Font("Tahoma", Font.PLAIN, 14)); txt_name2.setColumns(10); txt_name2.setBounds(86, 145, 90, 29); contentPane.add(txt_name2); JButton btnZurck = new JButton("Zur\u00FCck"); btnZurck.setBounds(335, 227, 89, 23); btnZurck.addActionListener(al); contentPane.add(btnZurck); JButton btnStart = new JButton("Start"); btnStart.setBounds(236, 227, 89, 23); btnStart.addActionListener(al); contentPane.add(btnStart); JButton btnReset = new JButton("Reset"); btnReset.setBounds(10, 227, 89, 23); btnReset.addActionListener(al); contentPane.add(btnReset); setVisible(true); } void setName1(String name) { txt_name.setText(name); } void setName2(String name) { txt_name2.setText(name); } public String getName() { String name = txt_name.getText(); return name; } public String getName2() { String name = txt_name2.getText(); return name; } String kiName() { Random rand = new Random(); String[] name = {"Horst","Matilda","Christian","Magarete","Steffan","Claudia","Andreas","Moni"}; int i = rand.nextInt(7); return name[i]; } }
//PvC Game GUI

package P2C; import javax.swing.JFrame; import java.awt.Image; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.LineBorder; import Main.Main; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.ArrayList; public class GUI2 { static JFrame frame; static JLabel field1, field2, field3, field4, field5, field6, field7, field8, field9; static JLabel win = new JLabel(Main.getWin()); static JLabel loose = new JLabel(Main.getLoose()); static JLabel draw = new JLabel(Main.getDraw()); static boolean x = true; static ArrayList<Integer> list_p1 = new ArrayList<Integer>(); static ArrayList<Integer> list_p2 = new ArrayList<Integer>(); static boolean[] clicked = {false,false,false,false,false,false,false,false,false,false}; static Border b = LineBorder.createGrayLineBorder(); public GUI2(String win, String loose, String draw) { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 500, 574); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); @SuppressWarnings("unused") Border ub = BorderFactory.createLoweredBevelBorder(); JPanel panel = new JPanel(); panel.setBounds(43, 11, 400, 400); frame.getContentPane().add(panel); panel.setLayout(null); field1 = new JLabel(""); field1.setHorizontalAlignment(SwingConstants.CENTER); field1.addMouseListener(new Player(frame, field1, 1)); field1.setBounds(7, 7, 125, 125); field1.setBorder(b); panel.add(field1); field2 = new JLabel(""); field2.setHorizontalAlignment(SwingConstants.CENTER); field2.addMouseListener(new Player(frame, field2, 2)); field2.setBounds(138, 7, 125, 125); field2.setBorder(b); panel.add(field2); field3 = new JLabel(""); field3.setHorizontalAlignment(SwingConstants.CENTER); field3.addMouseListener(new Player(frame, field3, 3)); field3.setBounds(269, 7, 125, 125); field3.setBorder(b); panel.add(field3); field4 = new JLabel(""); field4.setHorizontalAlignment(SwingConstants.CENTER); field4.addMouseListener(new Player(frame, field4, 4)); field4.setBounds(7, 138, 125, 125); field4.setBorder(b); panel.add(field4); field7 = new JLabel(""); field7.setHorizontalAlignment(SwingConstants.CENTER); field7.addMouseListener(new Player(frame, field7, 7)); field7.setBounds(7, 269, 125, 125); field7.setBorder(b); panel.add(field7); field5 = new JLabel(""); field5.setHorizontalAlignment(SwingConstants.CENTER); field5.addMouseListener(new Player(frame, field5, 5)); field5.setBounds(138, 138, 125, 125); field5.setBorder(b); panel.add(field5); field6 = new JLabel(""); field6.setHorizontalAlignment(SwingConstants.CENTER); field6.addMouseListener(new Player(frame, field6, 6)); field6.setBounds(269, 138, 125, 125); field6.setBorder(b); panel.add(field6); field8 = new JLabel(""); field8.setHorizontalAlignment(SwingConstants.CENTER); field8.addMouseListener(new Player(frame, field8, 8)); field8.setBounds(138, 269, 125, 125); field8.setBorder(b); panel.add(field8); field9 = new JLabel(""); field9.setHorizontalAlignment(SwingConstants.CENTER); field9.addMouseListener(new Player(frame, field9, 9)); field9.setBounds(269, 269, 125, 125); field9.setBorder(b); panel.add(field9); JLabel player1 = new JLabel("Spieler 1:"); player1.setBounds(43, 430, 69, 14); frame.getContentPane().add(player1); JLabel player2 = new JLabel("Spieler 2:"); player2.setBounds(43, 455, 69, 14); frame.getContentPane().add(player2); JLabel name1 = new JLabel(Main.gets1()); name1.setBounds(99, 430, 70, 14); frame.getContentPane().add(name1); JLabel name2 = new JLabel(Main.gets2()); name2.setBounds(99, 455, 70, 14); frame.getContentPane().add(name2); win.setHorizontalAlignment(SwingConstants.CENTER); win.setBounds(397, 430, 46, 14); frame.getContentPane().add(win); loose.setHorizontalAlignment(SwingConstants.CENTER); loose.setBounds(397, 455, 46, 14); frame.getContentPane().add(loose); draw.setHorizontalAlignment(SwingConstants.CENTER); draw.setBounds(397, 480, 46, 14); frame.getContentPane().add(draw); JLabel lbl_win = new JLabel("Gewonnen:"); lbl_win.setHorizontalAlignment(SwingConstants.RIGHT); lbl_win.setBounds(302, 430, 85, 14); frame.getContentPane().add(lbl_win); JLabel lbl_loose = new JLabel("Verloren:"); lbl_loose.setHorizontalAlignment(SwingConstants.RIGHT); lbl_loose.setBounds(302, 455, 85, 14); frame.getContentPane().add(lbl_loose); JLabel lbl_draw = new JLabel("Unentschieden:"); lbl_draw.setHorizontalAlignment(SwingConstants.RIGHT); lbl_draw.setBounds(267, 480, 120, 14); frame.getContentPane().add(lbl_draw); JButton btnNewGame = new JButton("Neues Spiel"); btnNewGame.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if ("Neues Spiel".equals(s)) { frame.dispose(); win.setText("0"); loose.setText("0"); draw.setText("0"); Main.reset(); } } }); btnNewGame.setBounds(23, 490, 109, 23); frame.getContentPane().add(btnNewGame); frame.setVisible(true); } void setField1(int f) { if (f == 1) { ImageIcon img = new ImageIcon("img/cross.png"); img.getImage().flush(); img.setImage(img.getImage().getScaledInstance(125, 125, Image.SCALE_DEFAULT)); field1.setIcon(img); } } static void addList_p1(int i) { list_p1.add(i); } static void addList_p2(int i) { list_p2.add(i); } static void gameWin() { if ((list_p1.contains(1) & list_p1.contains(2) & list_p1.contains(3)) | (list_p1.contains(4) & list_p1.contains(5) & list_p1.contains(6)) | (list_p1.contains(7) & list_p1.contains(8) & list_p1.contains(9)) | (list_p1.contains(1) & list_p1.contains(4) & list_p1.contains(7)) | (list_p1.contains(2) & list_p1.contains(5) & list_p1.contains(8)) | (list_p1.contains(3) & list_p1.contains(6) & list_p1.contains(9)) | (list_p1.contains(1) & list_p1.contains(5) & list_p1.contains(9)) | (list_p1.contains(3) & list_p1.contains(5) & list_p1.contains(7))) { JOptionPane.showMessageDialog(null, Main.gets1()+" hat gewonnen!"); Main.setWin(); repaint(); } if ((list_p2.contains(1) & list_p2.contains(2) & list_p2.contains(3)) | (list_p2.contains(4) & list_p2.contains(5) & list_p2.contains(6)) | (list_p2.contains(7) & list_p2.contains(8) & list_p2.contains(9)) | (list_p2.contains(1) & list_p2.contains(4) & list_p2.contains(7)) | (list_p2.contains(2) & list_p2.contains(5) & list_p2.contains(8)) | (list_p2.contains(3) & list_p2.contains(6) & list_p2.contains(9)) | (list_p2.contains(1) & list_p2.contains(5) & list_p2.contains(9)) | (list_p2.contains(3) & list_p2.contains(5) & list_p2.contains(7))) { JOptionPane.showMessageDialog(null, Main.gets2()+" hat gewonnen!"); Main.setLoose(); repaint(); } if (allClicked() == true) { JOptionPane.showMessageDialog(null, "Unentschieden!"); Main.setDraw(); repaint(); } } static void repaint() { ImageIcon img = new ImageIcon("img/plain.png"); field1.setIcon(img); field2.setIcon(img); field3.setIcon(img); field4.setIcon(img); field5.setIcon(img); field6.setIcon(img); field7.setIcon(img); field8.setIcon(img); field9.setIcon(img); list_p1.clear(); list_p2.clear(); win.setText(Main.getWin()); loose.setText(Main.getLoose()); draw.setText(Main.getDraw()); setUnClicked(); frame.repaint(); } static boolean clicked(int i) { return clicked[i]; } static void setUnClicked() { clicked[9] = false; clicked[1] = false; clicked[2] = false; clicked[3] = false; clicked[4] = false; clicked[5] = false; clicked[6] = false; clicked[7] = false; clicked[8] = false; field1.setBorder(b); field2.setBorder(b); field3.setBorder(b); field4.setBorder(b); field5.setBorder(b); field6.setBorder(b); field7.setBorder(b); field8.setBorder(b); field9.setBorder(b); } static void setClicked(int i) { clicked[i] =true; } static boolean allClicked() { boolean all = false; if (clicked[9] == true & clicked[1] == true & clicked[2] == true & clicked[3] == true & clicked[4] == true & clicked[5] == true & clicked[6] == true & clicked[7] == true & clicked[8] == true) { all = true; } return all; } }
//MouseListener

package P2C; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.Border; import javax.swing.border.LineBorder; public class Player implements MouseListener { JFrame frame; JLabel field; Border b = LineBorder.createGrayLineBorder(); Border ub = BorderFactory.createLoweredBevelBorder(); @SuppressWarnings({ "unchecked", "rawtypes" }) ArrayList<Integer> list_p1 = new ArrayList(); @SuppressWarnings({ "unchecked", "rawtypes" }) ArrayList<Integer> list_p2 = new ArrayList(); ImageIcon cross = new ImageIcon("img/cross.png"); ImageIcon circle = new ImageIcon("img/circle.png"); boolean clicked = false; int i; public Player(JFrame frame, JLabel field,int i) { this.frame = frame; this.field = field; cross.getImage().flush(); cross.setImage(cross.getImage().getScaledInstance(120, 120,Image.SCALE_DEFAULT)); circle.getImage().flush(); circle.setImage(circle.getImage().getScaledInstance(120, 120,Image.SCALE_DEFAULT)); this.i = i; } @Override public void mouseClicked(MouseEvent e) { if (GUI2.clicked(i) == false) { if (GUI2.x == true) { field.setIcon(cross); frame.repaint(); field_list(i); GUI2.x=false; GUI2.clicked[i] = true; System.out.println(GUI2.list_p1); GUI2.gameWin(); @SuppressWarnings("unused") KI ki = new KI(frame, field, i,circle); }else { }} } @Override public void mouseEntered(MouseEvent e) { if (GUI2.clicked(i) == false) { field.setBorder(ub); } } @Override public void mouseExited(MouseEvent e) { if (GUI2.clicked(i) == false) { field.setBorder(b); } } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } void field_list(int i) { if (i ==1 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==2 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==3 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==4 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==5 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==6 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==7 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==8 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==9 && GUI2.x ==true) { GUI2.addList_p1(i); } if (i ==1 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==2 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==3 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==4 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==5 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==6 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==7 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==8 && GUI2.x ==false) { GUI2.addList_p2(i); } if (i ==9 && GUI2.x ==false) { GUI2.addList_p2(i); } } }
// KI

package P2C; import java.util.Random; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.Border; public class KI extends Player { Random rand = new Random(); ImageIcon circle; Border ub = BorderFactory.createLoweredBevelBorder(); JLabel fieldki; int p; public KI(JFrame frame, JLabel field, int i) { super(frame, field, i); play(); } public KI(JFrame frame, JLabel field, int i, ImageIcon circle) { super(frame, field, i); this.circle = circle; play(); } void play() { // PC gewinnmöglichkeiten werden geprüft if (((GUI2.list_p2.contains(2) & GUI2.list_p2.contains(3)) || (GUI2.list_p2.contains(4) & GUI2.list_p2.contains(7)) || (GUI2.list_p2.contains(5) & GUI2.list_p2.contains(9))) & GUI2.clicked[1] == false) { fieldki = GUI2.field1; p = 1; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(1) & GUI2.list_p2.contains(3)) || (GUI2.list_p2.contains(5) & GUI2.list_p2.contains(8))) & GUI2.clicked[2] == false) { fieldki = GUI2.field2; p = 2; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(1) & GUI2.list_p2.contains(2)) || (GUI2.list_p2.contains(6) & GUI2.list_p2.contains(9)) || (GUI2.list_p2.contains(5) & GUI2.list_p2.contains(7))) & GUI2.clicked[3] == false) { fieldki = GUI2.field3; p = 3; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(1) & GUI2.list_p2.contains(7)) || (GUI2.list_p2.contains(5) & GUI2.list_p2.contains(6))) & GUI2.clicked[4] == false) { fieldki = GUI2.field4; p = 4; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(1) & GUI2.list_p2.contains(9)) || (GUI2.list_p2.contains(2) & GUI2.list_p2.contains(8)) || (GUI2.list_p2.contains(3) & GUI2.list_p2.contains(7)) || (GUI2.list_p2.contains(4) & GUI2.list_p2.contains(6))) & GUI2.clicked[5] == false) { fieldki = GUI2.field5; p = 5; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(3) & GUI2.list_p2.contains(9)) || (GUI2.list_p2.contains(4) & GUI2.list_p2.contains(5))) & GUI2.clicked[6] == false) { fieldki = GUI2.field6; p = 6; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(1) & GUI2.list_p2.contains(4)) || (GUI2.list_p2.contains(3) & GUI2.list_p2.contains(5)) || (GUI2.list_p2.contains(8) & GUI2.list_p2.contains(9))) & GUI2.clicked[7] == false) { fieldki = GUI2.field7; p = 7; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(2) & GUI2.list_p2.contains(5)) || (GUI2.list_p2.contains(7) & GUI2.list_p2.contains(9))) & GUI2.clicked[8] == false) { fieldki = GUI2.field8; p = 8; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p2.contains(1) & GUI2.list_p2.contains(5)) || (GUI2.list_p2.contains(3) & GUI2.list_p2.contains(6)) || (GUI2.list_p2.contains(7) & GUI2.list_p2.contains(8))) & GUI2.clicked[9] == false) { fieldki = GUI2.field9; p = 9; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } // Spieler gewinnmöglichkeiten werden geprüft else if (((GUI2.list_p1.contains(2) & GUI2.list_p1.contains(3)) || (GUI2.list_p1.contains(4) & GUI2.list_p1.contains(7)) || (GUI2.list_p1.contains(5) & GUI2.list_p1.contains(9))) & GUI2.clicked[1] == false) { fieldki = GUI2.field1; p = 1; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(1) & GUI2.list_p1.contains(3)) || (GUI2.list_p1.contains(5) & GUI2.list_p1.contains(8))) & GUI2.clicked[2] == false) { fieldki = GUI2.field2; p = 2; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(1) & GUI2.list_p1.contains(2)) || (GUI2.list_p1.contains(6) & GUI2.list_p1.contains(9)) || (GUI2.list_p1.contains(5) & GUI2.list_p1.contains(7))) & GUI2.clicked[3] == false) { fieldki = GUI2.field3; p = 3; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(1) & GUI2.list_p1.contains(7)) || (GUI2.list_p1.contains(5) & GUI2.list_p1.contains(6))) & GUI2.clicked[4] == false) { fieldki = GUI2.field4; p = 4; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(1) & GUI2.list_p1.contains(9)) || (GUI2.list_p1.contains(2) & GUI2.list_p1.contains(8)) || (GUI2.list_p1.contains(3) & GUI2.list_p1.contains(7)) || (GUI2.list_p1.contains(4) & GUI2.list_p1.contains(6))) & GUI2.clicked[5] == false) { fieldki = GUI2.field5; p = 5; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(3) & GUI2.list_p1.contains(9)) || (GUI2.list_p1.contains(4) & GUI2.list_p1.contains(5))) & GUI2.clicked[6] == false) { fieldki = GUI2.field6; p = 6; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(1) & GUI2.list_p1.contains(4)) || (GUI2.list_p1.contains(3) & GUI2.list_p1.contains(5)) || (GUI2.list_p1.contains(8) & GUI2.list_p1.contains(9))) & GUI2.clicked[7] == false) { fieldki = GUI2.field7; p = 7; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(2) & GUI2.list_p1.contains(5)) || (GUI2.list_p1.contains(7) & GUI2.list_p1.contains(9))) & GUI2.clicked[8] == false) { fieldki = GUI2.field8; p = 8; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else if (((GUI2.list_p1.contains(1) & GUI2.list_p1.contains(5)) || (GUI2.list_p1.contains(3) & GUI2.list_p1.contains(6)) || (GUI2.list_p1.contains(7) & GUI2.list_p1.contains(8))) & GUI2.clicked[9] == false) { fieldki = GUI2.field9; p = 9; fieldki.setIcon(circle); fieldki.setBorder(ub); GUI2.frame.repaint(); field_list(p); GUI2.x = true; GUI2.clicked[p] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); } else { int f = 1 + rand.nextInt(9); while (GUI2.list_p2.contains(f) | GUI2.list_p1.contains(f)) { f = 1 + rand.nextInt(9); } switch (f) { case 1: GUI2.field1.setIcon(circle); GUI2.field1.setBorder(ub); GUI2.frame.repaint(); field_list(1); GUI2.x = true; GUI2.clicked[1] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 2: GUI2.field2.setIcon(circle); GUI2.field2.setBorder(ub); GUI2.frame.repaint(); field_list(2); GUI2.x = true; GUI2.clicked[2] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 3: GUI2.field3.setIcon(circle); GUI2.field3.setBorder(ub); GUI2.frame.repaint(); field_list(3); GUI2.x = true; GUI2.clicked[3] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 4: GUI2.field4.setIcon(circle); GUI2.field4.setBorder(ub); GUI2.frame.repaint(); field_list(4); GUI2.x = true; GUI2.clicked[4] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 5: GUI2.field5.setIcon(circle); GUI2.field5.setBorder(ub); GUI2.frame.repaint(); field_list(5); GUI2.x = true; GUI2.clicked[1] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 6: GUI2.field6.setIcon(circle); GUI2.field6.setBorder(ub); GUI2.frame.repaint(); field_list(6); GUI2.x = true; GUI2.clicked[6] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 7: GUI2.field7.setIcon(circle); GUI2.field7.setBorder(ub); GUI2.frame.repaint(); field_list(7); GUI2.x = true; GUI2.clicked[7] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 8: GUI2.field8.setIcon(circle); GUI2.field8.setBorder(ub); GUI2.frame.repaint(); field_list(8); GUI2.x = true; GUI2.clicked[8] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; case 9: GUI2.field9.setIcon(circle); GUI2.field9.setBorder(ub); GUI2.frame.repaint(); field_list(9); GUI2.x = true; GUI2.clicked[9] = true; System.out.println(GUI2.list_p2); GUI2.gameWin(); break; } } } }
//ActionListener

package P2C; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import Main.Main; public class AL implements ActionListener { GUI_1P frame; public AL(GUI_1P frame) { this.frame = frame; } @Override public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if ("Reset".equals(s)) { frame.setName1(""); frame.setName2(frame.kiName()); } if ("Start".contentEquals(s)) { Main.setNames(frame.getName(), frame.getName2()); frame.dispose(); Main.startGUI2(); } if ("Zurück".equals(s)) { frame.dispose(); Main.startGUI_W(); } } }
Bitte seid gnädig xD wäre bestimmt auch kompakter gegangen ich bin aber jetz erstmal froh das es läuft ^^
Klasse Zeichnen.java

package TTT; import java.awt.*; import java.util.Scanner; import javax.swing.JFrame; import javax.swing.JLabel; public class Zeichnen extends JLabel{ int x,y = 10; protected void paintComponent(Graphics g) { /*g.drawLine(10, 10, 10, 430); g.drawLine(150, 10, 150, 430); g.drawLine(280, 10, 280, 430);*/ super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; for(int i=143;i<390;i+=143) { g.drawLine(i, y, i, 430); } for(int i=150;i<390;i+=140) { g.drawLine(10, i, 440, i); } /* Kreis 0_0 x = 20 y = 20 * Kreis 0_1 x = 20 y = 160 * Kreis 0_2 x = 20 y = 300 * Kreis 1_0 x = 160 y = 20 * Kreis 1_1 x = 160 y = 160 * Kreis 1_2 x = 160 y = 300 * Kreis 2_0 x = 300 y = 20 * Kreis 2_1 x = 300 y = 160 * Kreis 2_2 x = 300 y = 300 */ /* * Kreuz 0_0 x1 = 20 x2 = 20; y1 = 20, x2=140;y2=140; * Kreuz 0_1 x1 = 160 x2 = 140 ; y1 = 20; x2=280; y2=140; * Kreuz 0_2 x1 = 300 x2 = 420 ; y1 = 20; x2=420; y2=20; * * Kreuz 1_0 20,160,140,280 20,280,140,160 * Kreuz 1_1 160,160,280,280 160,280,280,160 * Kreuz 1_2 300,160,420,280 300,280,420,160 * * Kreuz 2_0 20,300,140,420 20,420,140,300 * Kreuz 2_1 160,300,280,420 160,420,280,300 * Kreuz 2_2 300,300,420,420 300,420,420,300 */ // Zeile 1 if(GUI.state[0]==1) { g.drawImage(ImageLoader.imgX, 16, 19, 120,120,null); }else if(GUI.state[0]==2){ g.drawImage(ImageLoader.imgO,16,19,120,120,null); } if(GUI.state[1]==1) { g.drawImage(ImageLoader.imgX, 152, 19, 120,120,null); }else if(GUI.state[1]==2){ g.drawImage(ImageLoader.imgO, 154, 19, 120,120,null); } if(GUI.state[2]==1) { g.drawImage(ImageLoader.imgX, 297, 19, 120,120,null); }else if(GUI.state[2]==2){ g.drawImage(ImageLoader.imgO, 299, 19, 120,120,null); } // Zeile 2 if(GUI.state[3]==1) { g.drawImage(ImageLoader.imgX, 16, 164, 120,120,null); }else if(GUI.state[3]==2){ g.drawImage(ImageLoader.imgO,16,164,120,120,null); } if(GUI.state[4]==1) { g.drawImage(ImageLoader.imgX, 152, 164, 120,120,null); }else if(GUI.state[4]==2){ g.drawImage(ImageLoader.imgO,154,164,120,120,null); } if(GUI.state[5]==1) { g.drawImage(ImageLoader.imgX, 297, 164, 120,120,null); }else if(GUI.state[5]==2){ g.drawImage(ImageLoader.imgO,299,164,120,120,null); } // Zeile 3 if(GUI.state[6]==1) { g.drawImage(ImageLoader.imgX, 16, 309, 120,120,null); }else if(GUI.state[6]==2){ g.drawImage(ImageLoader.imgO,16,309,120,120,null); } if(GUI.state[7]==1) { g.drawImage(ImageLoader.imgX, 152, 309, 120,120,null); }else if(GUI.state[7]==2){ g.drawImage(ImageLoader.imgO,154,311,120,120,null); } if(GUI.state[8]==1) { g.drawImage(ImageLoader.imgX, 297, 309, 120,120,null); }else if(GUI.state[8]==2){ g.drawImage(ImageLoader.imgO,299,311,120,120,null); } int count_places = 0; for(int i=0;i<=8;i++) { if(GUI.state[i]!=0) { count_places++; } } if(GUI.player==0 && GUI.winner==0 && count_places<9) { g.setFont(new Font("Tahoma",Font.PLAIN,20)); g.drawString("Spieler: X ist am Zug",463,102); }else if(GUI.player==1 && GUI.winner==0 && count_places<9) { g.setFont(new Font("Tahoma",Font.PLAIN,20)); g.drawString("Spieler: Computer ist am Zug",463,102); } if(GUI.winner==1) { g.setFont(new Font("Tahoma",Font.PLAIN,20)); g.drawString("Spieler: X hat gewonnen",463,102); }else if(GUI.winner==2) { g.setFont(new Font("Tahoma",Font.PLAIN,20)); g.drawString("Spieler: Computer hat gewonnen",463,102); } if(GUI.winner==0&&count_places==9) { g.setFont(new Font("Tahoma",Font.PLAIN,20)); g.drawString("Spiel vorbei, kein Gewinner",463,102); } if(GUI.player==1) { Spiellogik.AIPlayer(); } Spiellogik.checkWon(); revalidate(); repaint(); } }
Klasse ActionHandler.java

package TTT; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ActionHandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub int index = -1; //Find Button ID for(int i=0;i<GUI.btn.length;i++) { if(e.getSource()==GUI.btn[i]) { index = i; } } if(GUI.state[index] == 0 && GUI.player==0 && GUI.winner == 0) { GUI.state[index] = 1; GUI.player = 1; }else if(GUI.state[index] == 0 && GUI.player==1 && GUI.winner == 0) { GUI.state[index] = 2; GUI.player = 0; } } }
Klasse ButtonPlacement.java

package TTT; public class ButtonPlacement { public static void place() { // Reihe 1 GUI.btn[0].setBounds(10,10,130,135); GUI.btn[1].setBounds(150,11,130,135); GUI.btn[2].setBounds(290,11,130,135); // Reihe 2 GUI.btn[3].setBounds(10,157,130,126); GUI.btn[4].setBounds(150,157,130,126); GUI.btn[5].setBounds(290,157,130,126); // Reihe 3 GUI.btn[6].setBounds(10,294,130,135); GUI.btn[7].setBounds(150,294,130,135); GUI.btn[8].setBounds(290,294,130,135); } }
Klasse ImageLoader.java

package TTT; import java.awt.Image; import java.io.File; import javax.imageio.ImageIO; public class ImageLoader { static Image imgX, imgO; public ImageLoader() { try { imgX = ImageIO.read(new File("src/x.png")); imgO = ImageIO.read(new File("src/o.png")); } catch (Exception e) { // TODO: handle exception } } }
Klasse GUI.java

package TTT; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import java.awt.Color; import java.awt.Dimension; import javax.swing.JButton; import javax.swing.JLabel; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Random; import javax.swing.JSeparator; import javax.swing.SwingConstants; import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.border.LineBorder; public class GUI extends JFrame { ButtonPlacement bp; private JPanel contentPane; static JLabel lbl_Spieler; Zeichnen zeichnen; JFrame jf; static JButton btn[] = new JButton[9]; static int state[] = {0,0,0,0,0,0,0,0,0}; static int player = 0; static int winner = 0; private JButton btn_reset; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { GUI gui = new GUI(); new ImageLoader(); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public GUI() { jf = new JFrame(); jf.setSize(800,550); jf.setDefaultCloseOperation(EXIT_ON_CLOSE); jf.setResizable(false); jf.setTitle("Tic Tac Toe"); for(int i=0;i<btn.length;i++) { btn[i] = new JButton(); btn[i].setBounds(20,20,140,140); btn[i].setVisible(true); btn[i].addActionListener(new ActionHandler()); btn[i].setFocusPainted(false); btn[i].setContentAreaFilled(false); btn[i].setBorder(null); jf.getContentPane().add(btn[i]); } ButtonPlacement.place(); zeichnen = new Zeichnen(); zeichnen.setBounds(0, 0, 794, 521); zeichnen.setVisible(true); jf.getContentPane().setLayout(null); jf.getContentPane().add(zeichnen); JLabel lblNewLabel = new JLabel(""); lblNewLabel.setBackground(Color.WHITE); lblNewLabel.setOpaque(true); lblNewLabel.setBounds(463, 82, 320, 28); jf.getContentPane().add(lblNewLabel); btn_reset = new JButton("Reset"); btn_reset.setBounds(550, 141, 218, 23); jf.getContentPane().add(btn_reset); btn_reset.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub Spiellogik.reset(); } }); jf.setLocationByPlatform(true); jf.setVisible(true); } }
Klasse Spiellogik.java

package TTT; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import java.util.Timer; import java.util.TimerTask; public class Spiellogik { static int marken_0,marken_1,marken_2 = 0; static boolean block_hor_ver = false; static boolean block_diagonal = false; static boolean win_hor_ver = false; static boolean win_diagonal = false; static boolean check_win = false; static boolean makeWinTurn = false; public static void checkWon() { // Zeile 1 horizontal if(GUI.state[0]==1 && GUI.state[1]==1 && GUI.state[2]==1) { GUI.winner = 1; }else if(GUI.state[0]==2 && GUI.state[1]==2 && GUI.state[2]==2) { GUI.winner = 2; } // Zeile 2 horizontal if(GUI.state[3]==1 && GUI.state[4]==1 && GUI.state[5]==1) { GUI.winner = 1; }else if(GUI.state[3]==2 && GUI.state[4]==2 && GUI.state[5]==2) { GUI.winner = 2; } // Zeile 3 horizontal if(GUI.state[6]==1 && GUI.state[7]==1 && GUI.state[8]==1) { GUI.winner = 1; }else if(GUI.state[6]==2 && GUI.state[7]==2 && GUI.state[8]==2) { GUI.winner = 2; } // Zeile 1 vertical if(GUI.state[0]==1 && GUI.state[3]==1 && GUI.state[6]==1) { GUI.winner = 1; }else if(GUI.state[0]==2 && GUI.state[3]==2 && GUI.state[6]==2) { GUI.winner = 2; } // Zeile 2 vertical if(GUI.state[1]==1 && GUI.state[4]==1 && GUI.state[7]==1) { GUI.winner = 1; }else if(GUI.state[1]==2 && GUI.state[4]==2 && GUI.state[7]==2) { GUI.winner = 2; } // Zeile 3 vertical if(GUI.state[2]==1 && GUI.state[5]==1 && GUI.state[8]==1) { GUI.winner = 1; }else if(GUI.state[2]==2 && GUI.state[5]==2 && GUI.state[8]==2) { GUI.winner = 2; } // Diagonal if(GUI.state[0]==1 && GUI.state[4]==1 && GUI.state[8]==1) { GUI.winner = 1; }else if(GUI.state[0]==2 && GUI.state[4]==2 && GUI.state[8]==2) { GUI.winner = 2; } if(GUI.state[2]==1 && GUI.state[4]==1 && GUI.state[6]==1) { GUI.winner = 1; }else if(GUI.state[2]==2 && GUI.state[4]==2 && GUI.state[6]==2) { GUI.winner = 2; } } public static void reset() { for(int i=0;i<GUI.state.length;i++) { GUI.state[i] = 0; } GUI.player = 0; GUI.winner = 0; } public static void AIPlayer() { String Zeile_0 = GUI.state[0]+""+GUI.state[1]+""+GUI.state[2]; String Zeile_1 = GUI.state[3]+""+GUI.state[4]+""+GUI.state[5]; String Zeile_2 = GUI.state[6]+""+GUI.state[7]+""+GUI.state[8]; String Diagonal_1 = GUI.state[0]+""+GUI.state[4]+""+GUI.state[8]; String Diagonal_2 = GUI.state[2]+""+GUI.state[4]+""+GUI.state[6]; block_hor_ver = checkBlockHorizontalVertical(Zeile_0, Zeile_1, Zeile_2); // Prüfe ob Blocken diagonal möglich block_diagonal = checkBlockDiagonal(Diagonal_1, Diagonal_2); // Prüfe günstigen Zug der zum Sieg führt win_hor_ver = checkWinHorizontalVertical(Zeile_0, Zeile_1, Zeile_2); win_diagonal = checkWinDiagonal(Diagonal_1, Diagonal_2); if(win_hor_ver || win_diagonal) { block_hor_ver =false; block_diagonal =false; if(win_hor_ver && win_diagonal ) { Random r2 = new Random(); int rand_nmb = r2.nextInt((1-0)+1)+0; if(rand_nmb==0) { playHorVerWinTurn(Zeile_0,Zeile_1,Zeile_2); }else if(rand_nmb==1) { playDiagWinTurn(Diagonal_1,Diagonal_2); } }else if(win_hor_ver&&!win_diagonal) { playHorVerWinTurn(Zeile_0,Zeile_1,Zeile_2); }else if(!win_hor_ver&&win_diagonal) { playDiagWinTurn(Diagonal_1,Diagonal_2); } } if(block_hor_ver&& !block_diagonal) { blockHorVer(Zeile_0,Zeile_1,Zeile_2); } if(!block_hor_ver && block_diagonal){ blockDiagonal(Diagonal_1, Diagonal_2); } //TODO beide blocken = true if(block_hor_ver && block_diagonal) { Random r3 = new Random(); int rand_number = r3.nextInt((1-0)+1)+0; switch(rand_number) { case 0: blockHorVer(Zeile_0, Zeile_1, Zeile_2);break; case 1: blockDiagonal(Diagonal_1, Diagonal_2);break; } } if(!makeWinTurn&&!block_hor_ver && !block_diagonal && !win_hor_ver && !win_diagonal&& GUI.winner == 0) { int index = generateTurn(); if(GUI.state[index]==1 || GUI.state[index]==2) { generateTurn(); }else { GUI.state[index] = 2; GUI.player = 0; } } } private static void playDiagWinTurn(String Diagonal_1,String Diagonal_2) { if(Diagonal_1.equals("202")||Diagonal_1.equals("220")||Diagonal_1.equals("022")) { if(GUI.state[0]!=2) { GUI.state[0]=2; }else if(GUI.state[4]!=2) { GUI.state[4]=2; }else if(GUI.state[8]!=2) { GUI.state[8]=2; } GUI.player = 0; } if(Diagonal_2.equals("202")||Diagonal_2.equals("220")||Diagonal_2.equals("022")) { if(GUI.state[6]!=2) { GUI.state[6]=2; }else if(GUI.state[4]!=2) { GUI.state[4]=2; }else if(GUI.state[2]!=2) { GUI.state[2]=2; } GUI.player = 0; } } private static void playHorVerWinTurn(String Zeile_0,String Zeile_1, String Zeile_2) { if(Zeile_0.equals("202")||Zeile_0.equals("220")||Zeile_0.equals("022")) { System.out.println(Zeile_0); if(GUI.state[0]!=2) { GUI.state[0]=2; }else if(GUI.state[1]!=2) { GUI.state[1]=2; }else if(GUI.state[2]!=2) { GUI.state[2]=2; } GUI.player = 0; } if(Zeile_1.equals("202")||Zeile_1.equals("220")||Zeile_1.equals("022")) { if(GUI.state[3]!=2) { GUI.state[3]=2; }else if(GUI.state[4]!=2) { GUI.state[4]=2; }else if(GUI.state[5]!=2) { GUI.state[5]=2; } GUI.player = 0; } if(Zeile_2.equals("202")||Zeile_2.equals("220")||Zeile_2.equals("022")) { if(GUI.state[6]!=2) { GUI.state[6]=2; }else if(GUI.state[7]!=2) { GUI.state[7]=2; }else if(GUI.state[8]!=2) { GUI.state[8]=2; } GUI.player = 0; } } private static int generateTurn() { //Zufällige Position erzeugen Random r = new Random(); int randomNumber = r.nextInt((8-0)+1)+0; return randomNumber; } public static boolean checkBlockHorizontalVertical(String Zeile_0,String Zeile_1, String Zeile_2) { if(Zeile_0.equals("101")||Zeile_0.equals("110")||Zeile_0.equals("011") ||Zeile_1.equals("101")||Zeile_1.equals("110")||Zeile_1.equals("011") ||Zeile_2.equals("101")||Zeile_2.equals("110")||Zeile_2.equals("011")) { block_hor_ver=true; }else { block_hor_ver=false; } return block_hor_ver; } public static boolean checkBlockDiagonal(String Diagonal_1, String Diagonal_2) { if(Diagonal_1.equals("101")||Diagonal_1.equals("110")||Diagonal_1.equals("011") ||Diagonal_2.equals("101")||Diagonal_2.equals("110")||Diagonal_2.equals("011")) { block_diagonal = true; }else { block_diagonal = false; } return block_diagonal; } public static boolean checkWinHorizontalVertical(String Zeile_0,String Zeile_1, String Zeile_2) { if(Zeile_0.equals("202")||Zeile_0.equals("220")||Zeile_0.equals("022") ||Zeile_1.equals("202")||Zeile_1.equals("220")||Zeile_1.equals("022") ||Zeile_2.equals("202")||Zeile_2.equals("220")||Zeile_2.equals("022")) { win_hor_ver=true; }else { win_hor_ver=false; } return win_hor_ver; } public static boolean checkWinDiagonal(String Diagonal_1,String Diagonal_2) { if(Diagonal_1.equals("202")||Diagonal_1.equals("220")||Diagonal_1.equals("022") ||Diagonal_2.equals("1202")||Diagonal_2.equals("220")||Diagonal_2.equals("022")) { win_diagonal = true; }else { win_diagonal = false; } return win_diagonal; } public static void blockHorVer(String Zeile_0,String Zeile_1,String Zeile_2) { // Block Player in Zeile 0 if(Zeile_0.equals("101")||Zeile_0.equals("110")||Zeile_0.equals("011")) { System.out.println(Zeile_0); if(GUI.state[0]!=1) { GUI.state[0]=2; }else if(GUI.state[1]!=1) { GUI.state[1]=2; }else if(GUI.state[2]!=1) { GUI.state[2]=2; } GUI.player = 0; } // Block Player in Zeile 1 if(Zeile_1.equals("101")||Zeile_1.equals("110")||Zeile_1.equals("011")) { if(GUI.state[3]!=1) { GUI.state[3]=2; }else if(GUI.state[4]!=1) { GUI.state[4]=2; }else if(GUI.state[5]!=1) { GUI.state[5]=2; } GUI.player = 0; } // Block Player in Zeile 2 if(Zeile_2.equals("101")||Zeile_2.equals("110")||Zeile_2.equals("011")) { if(GUI.state[6]!=1) { GUI.state[6]=2; }else if(GUI.state[7]!=1) { GUI.state[7]=2; }else if(GUI.state[8]!=1) { GUI.state[8]=2; } GUI.player = 0; } } public static void blockDiagonal(String Diagonal_1,String Diagonal_2) { // Wenn Horizontal bzw. Vertical nichts zu blocken, dann prüfe ob blocke diagonal möglich block_diagonal = checkBlockDiagonal(Diagonal_1, Diagonal_2); //Block Player in Diagonale 1 if(Diagonal_1.equals("101")||Diagonal_1.equals("110")||Diagonal_1.equals("011")) { if(GUI.state[0]!=1) { GUI.state[0]=2; }else if(GUI.state[4]!=1) { GUI.state[4]=2; }else if(GUI.state[8]!=1) { GUI.state[8]=2; } GUI.player = 0; } //Block Player in Diagonale 2 if(Diagonal_2.equals("101")||Diagonal_2.equals("110")||Diagonal_2.equals("011")) { if(GUI.state[6]!=1) { GUI.state[6]=2; }else if(GUI.state[4]!=1) { GUI.state[4]=2; }else if(GUI.state[2]!=1) { GUI.state[2]=2; } GUI.player = 0; } } }