/** TicTacToe * * @author Kristof Friedrichsen * @author Patrick O'Neill * @author Robert Free * @author Ryan Mann */ import java.awt.BorderLayout; import java.net.*; import java.io.*; import javax.swing.*; import java.awt.GridLayout; import java.awt.Color; import java.awt.Font; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JOptionPane; import javax.swing.JFrame; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TTTGui{ int boardWidth; int boardHeight; static JButton[][] ButtonArray; MouseHandler mouse; static Color ColorPlayer1 = new Color(255,0,0); static Color ColorPlayer2 = new Color(0,255,0); static Color ColorPlayer3 = new Color(0,0,255); Font f = new Font("", Font.BOLD, 25); JOptionPane Message = new JOptionPane(); int clickCount = 0; static String PlayerIcon3 = null; String testingconcat=""; static String yourTurn = ""; static String LastUser = "0"; static JLabel playerText; public TTTGui(String PlayerIcon2){ PlayerIcon3 = PlayerIcon2; JFrame frame = new JFrame("TicTacToe Player# "+PlayerIcon2); frame.setSize(300, 300); frame.setLocationRelativeTo(null); boardWidth = 5; boardHeight = 5; JPanel panel = new JPanel(); panel.setLayout(new GridLayout(boardWidth, boardHeight)); frame.add(panel); ButtonArray = new JButton[boardWidth][boardHeight]; mouse = new MouseHandler(); for(int i = 0; i < boardWidth; i++){ for(int j = 0; j < boardHeight; j++){ ButtonArray[i][j] = new JButton(); ButtonArray[i][j].setFont(f); ButtonArray[i][j].addMouseListener(mouse); panel.add(ButtonArray[i][j]); ButtonArray[i][j].setText("0"); } } for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ testingconcat += ButtonArray[i][j].getText(); } } frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } /* The nasty win-condition... */ public void win(){ if((ButtonArray[0][0].getText().equals(ButtonArray[0][1].getText()) && ButtonArray[0][0].isEnabled() == false && ButtonArray[0][1].getText().equals(ButtonArray[0][2].getText()) && ButtonArray[0][1].isEnabled() == false && ButtonArray[0][2].getText().equals(ButtonArray[0][3].getText()) && ButtonArray[0][2].isEnabled() == false && ButtonArray[0][3].getText().equals(ButtonArray[0][4].getText()) && ButtonArray[0][3].isEnabled() == false && ButtonArray[0][4].isEnabled() == false) || (ButtonArray[0][0].getText().equals(ButtonArray[1][0].getText()) && ButtonArray[0][0].isEnabled() == false && ButtonArray[1][0].getText().equals(ButtonArray[2][0].getText()) && ButtonArray[1][0].isEnabled() == false && ButtonArray[2][0].getText().equals(ButtonArray[3][0].getText()) && ButtonArray[2][0].isEnabled() == false && ButtonArray[3][0].getText().equals(ButtonArray[4][0].getText()) && ButtonArray[3][0].isEnabled() == false && ButtonArray[4][0].isEnabled() == false) || (ButtonArray[0][4].getText().equals(ButtonArray[1][4].getText()) && ButtonArray[0][4].isEnabled() == false && ButtonArray[1][4].getText().equals(ButtonArray[2][4].getText()) && ButtonArray[1][4].isEnabled() == false && ButtonArray[2][4].getText().equals(ButtonArray[3][4].getText()) && ButtonArray[2][4].isEnabled() == false && ButtonArray[3][4].getText().equals(ButtonArray[4][4].getText()) && ButtonArray[3][4].isEnabled() == false && ButtonArray[4][4].isEnabled() == false) || (ButtonArray[4][4].getText().equals(ButtonArray[4][3].getText()) && ButtonArray[4][4].isEnabled() == false && ButtonArray[4][3].getText().equals(ButtonArray[4][2].getText()) && ButtonArray[4][3].isEnabled() == false && ButtonArray[4][2].getText().equals(ButtonArray[4][1].getText()) && ButtonArray[4][2].isEnabled() == false && ButtonArray[4][1].getText().equals(ButtonArray[4][0].getText()) && ButtonArray[4][1].isEnabled() == false && ButtonArray[4][0].isEnabled() == false) || (ButtonArray[0][4].getText().equals(ButtonArray[1][3].getText()) && ButtonArray[0][4].isEnabled() == false && ButtonArray[1][3].getText().equals(ButtonArray[2][2].getText()) && ButtonArray[1][3].isEnabled() == false && ButtonArray[2][2].getText().equals(ButtonArray[3][1].getText()) && ButtonArray[2][2].isEnabled() == false && ButtonArray[3][1].getText().equals(ButtonArray[4][0].getText()) && ButtonArray[3][1].isEnabled() == false && ButtonArray[4][0].isEnabled() == false) || (ButtonArray[0][0].getText().equals(ButtonArray[1][1].getText()) && ButtonArray[0][0].isEnabled() == false && ButtonArray[1][1].getText().equals(ButtonArray[2][2].getText()) && ButtonArray[1][1].isEnabled() == false && ButtonArray[2][2].getText().equals(ButtonArray[3][3].getText()) && ButtonArray[2][2].isEnabled() == false && ButtonArray[3][3].getText().equals(ButtonArray[4][4].getText()) && ButtonArray[3][3].isEnabled() == false && ButtonArray[4][4].isEnabled() == false) || (ButtonArray[1][0].getText().equals(ButtonArray[1][1].getText()) && ButtonArray[1][0].isEnabled() == false && ButtonArray[1][1].getText().equals(ButtonArray[1][2].getText()) && ButtonArray[1][1].isEnabled() == false && ButtonArray[1][2].getText().equals(ButtonArray[1][3].getText()) && ButtonArray[1][2].isEnabled() == false && ButtonArray[1][3].getText().equals(ButtonArray[1][4].getText()) && ButtonArray[1][3].isEnabled() == false && ButtonArray[1][4].isEnabled() == false) || (ButtonArray[2][0].getText().equals(ButtonArray[2][1].getText()) && ButtonArray[2][0].isEnabled() == false && ButtonArray[2][1].getText().equals(ButtonArray[2][2].getText()) && ButtonArray[2][1].isEnabled() == false && ButtonArray[2][2].getText().equals(ButtonArray[2][3].getText()) && ButtonArray[2][2].isEnabled() == false && ButtonArray[2][3].getText().equals(ButtonArray[2][4].getText()) && ButtonArray[2][3].isEnabled() == false && ButtonArray[2][4].isEnabled() == false) || (ButtonArray[3][0].getText().equals(ButtonArray[3][1].getText()) && ButtonArray[3][0].isEnabled() == false && ButtonArray[3][1].getText().equals(ButtonArray[3][2].getText()) && ButtonArray[3][1].isEnabled() == false && ButtonArray[3][2].getText().equals(ButtonArray[3][3].getText()) && ButtonArray[3][2].isEnabled() == false && ButtonArray[3][3].getText().equals(ButtonArray[3][4].getText()) && ButtonArray[3][3].isEnabled() == false && ButtonArray[3][4].isEnabled() == false) || (ButtonArray[0][1].getText().equals(ButtonArray[1][1].getText()) && ButtonArray[0][1].isEnabled() == false && ButtonArray[1][1].getText().equals(ButtonArray[2][1].getText()) && ButtonArray[1][1].isEnabled() == false && ButtonArray[2][1].getText().equals(ButtonArray[3][1].getText()) && ButtonArray[2][1].isEnabled() == false && ButtonArray[3][1].getText().equals(ButtonArray[4][1].getText()) && ButtonArray[3][1].isEnabled() == false && ButtonArray[4][1].isEnabled() == false) || (ButtonArray[0][2].getText().equals(ButtonArray[1][2].getText()) && ButtonArray[0][2].isEnabled() == false && ButtonArray[1][2].getText().equals(ButtonArray[2][2].getText()) && ButtonArray[1][2].isEnabled() == false && ButtonArray[2][2].getText().equals(ButtonArray[3][2].getText()) && ButtonArray[2][2].isEnabled() == false && ButtonArray[3][2].getText().equals(ButtonArray[4][2].getText()) && ButtonArray[3][2].isEnabled() == false && ButtonArray[4][2].isEnabled() == false) || (ButtonArray[0][3].getText().equals(ButtonArray[1][3].getText()) && ButtonArray[0][3].isEnabled() == false && ButtonArray[1][3].getText().equals(ButtonArray[2][3].getText()) && ButtonArray[1][3].isEnabled() == false && ButtonArray[2][3].getText().equals(ButtonArray[3][3].getText()) && ButtonArray[2][3].isEnabled() == false && ButtonArray[3][3].getText().equals(ButtonArray[4][3].getText()) && ButtonArray[3][3].isEnabled() == false && ButtonArray[4][3].isEnabled() == false)){ Message.showMessageDialog(null, "Congratulations! Game Over."); System.exit(1); } } class MouseHandler extends MouseAdapter{ public void mouseClicked(MouseEvent e){ checkTurn(PlayerIcon3); if ( PlayerIcon3.equals( yourTurn.toString() ) ) { for(int i = 0; i < boardWidth; i++){ for(int j = 0; j < boardHeight; j++){ if( ButtonArray[i][j].equals(e.getSource()) ){ clickCount++; if(PlayerIcon3.equals("1") && ButtonArray[i][j].isEnabled() == true) { ButtonArray[i][j].setText("1"); ButtonArray[i][j].setEnabled(false); ButtonArray[i][j].setBackground(ColorPlayer1); sendMouseClick(2); win(); if(clickCount == 25){ Message.showMessageDialog(null, "Tie!"); System.exit(0); } } else if(PlayerIcon3.equals("2") && ButtonArray[i][j].isEnabled() == true) { ButtonArray[i][j].setText("2"); ButtonArray[i][j].setEnabled(false); ButtonArray[i][j].setBackground(ColorPlayer2); sendMouseClick(3); win(); if(clickCount == 25){ Message.showMessageDialog(null, "Tie!"); System.exit(0); } } else if(PlayerIcon3.equals("3") && ButtonArray[i][j].isEnabled() == true) { ButtonArray[i][j].setText("3"); ButtonArray[i][j].setEnabled(false); ButtonArray[i][j].setBackground(ColorPlayer3); sendMouseClick(1); win(); if(clickCount == 25){ Message.showMessageDialog(null, "Tie!"); System.exit(0); } } checkTurn(PlayerIcon3); } } } } } } static public void sendMouseClick(Integer icon) { String PlayerPosition = ""; PlayerPosition += PlayerIcon3; for (int m = 0; m<5;m++){ for(int n = 0;n<5;n++){ PlayerPosition += ButtonArray[m][n].getText(); } } String host = "localhost"; int port = 2699; Socket TTTgame = null; PrintWriter out = null; BufferedReader in = null; String PlayerIcon = null; try { TTTgame = new Socket(host, port); out = new PrintWriter(TTTgame.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(TTTgame.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host " + host); } catch (IOException e) { System.err.println("Couldn't get I/O for the mouseclick."); } try { in.readLine(); out.println(PlayerPosition); out.close(); in.close(); TTTgame.close(); } catch (IOException ex) { System.err.println("IO failure in send mouse click."); ex.printStackTrace(); } }//end of send mouseclick static public void checkTurn(String icon2) { do { try { Thread.sleep(1000); } catch (InterruptedException ex) { } String host = "localhost"; int port = 2699; Socket TTTgame = null; PrintWriter out = null; BufferedReader in = null; String ready =""; JOptionPane Turn = new JOptionPane(); Turn.setSize(100,100); Turn.setVisible(true); try { TTTgame = new Socket(host, port); out = new PrintWriter(TTTgame.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(TTTgame.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host " + host); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection#1."); } try { try { ready = in.readLine(); out.println(ready); } catch (NullPointerException ex) { } yourTurn = ready.substring(0,1); if (yourTurn.equals(icon2)) { if ( !LastUser.equals(icon2) ) Turn.showMessageDialog(null,"Your turn, Player# "+icon2); } int count = 1; for (int i=0;i<5;i++){ for (int j=0;j<5;j++){ ButtonArray[i][j].setText(ready.substring(count,count+1)); switch(ButtonArray[i][j].getText().charAt(0)) { case '1': ButtonArray[i][j].setBackground(ColorPlayer1); break; case '2': ButtonArray[i][j].setBackground(ColorPlayer2); break; case '3': ButtonArray[i][j].setBackground(ColorPlayer3); break; } System.out.println("BA "+ButtonArray[i][j].getText()); count++; } } out.close(); in.close(); TTTgame.close(); } catch (IOException ex) { System.err.println("IO failure main client."); ex.printStackTrace(); } }while ( !icon2.equals( yourTurn ) && !LastUser.equals( icon2 ) ); LastUser = icon2; } //******************************************************************************// public static void main(String[] args) { String host = "localhost"; int port = 2699; Socket TTTgame = null; PrintWriter out = null; BufferedReader in = null; String PlayerIcon = null; String yourTurn = ""; String ready =""; JOptionPane Ready = new JOptionPane(); try { TTTgame = new Socket(host, port); out = new PrintWriter(TTTgame.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(TTTgame.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host " + host); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection#1."); } try { PlayerIcon = in.readLine(); out.close(); in.close(); TTTgame.close(); } catch (IOException ex) { System.err.println("IO failure main client."); ex.printStackTrace(); } if(Ready.showConfirmDialog(null, "Ready to play? Player# "+PlayerIcon, "", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { TTTGui bla = new TTTGui(PlayerIcon); while ( 1==1 ) checkTurn(PlayerIcon); }//end of if else { System.exit(0); }//end of else }//end main }//end class