//TicTacToe.java //needs WindowDestroyer.java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TicTacToe extends JFrame implements ActionListener { private JTextField outputField; private JTextArea instr; private int xnum = 0, onum = 0; //win counters private boolean go = false; //is game over int[][] arr = new int[3][3]; //where plays are recorded String player = "X";//initialize opening player //Set all the button labels blank for game start JButton b00 = new JButton(""); JButton b01 = new JButton(""); JButton b02 = new JButton(""); JButton b10 = new JButton(""); JButton b11 = new JButton(""); JButton b12 = new JButton(""); JButton b20 = new JButton(""); JButton b21 = new JButton(""); JButton b22 = new JButton(""); public static void main(String[] args) { TicTacToe guiTTT = new TicTacToe(); guiTTT.setVisible(true); }//end main public TicTacToe() { addWindowListener(new WindowDestroyer()); setTitle("TicTacToe"); setSize(200, 200); setLocation(100, 200); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); JPanel buttonPanel = new JPanel(); buttonPanel.setBackground(Color.gray); buttonPanel.setLayout(new GridLayout(3, 3)); contentPane.add(buttonPanel, BorderLayout.CENTER); JPanel outputPanel = new JPanel(); outputField = new JTextField("Welcome to TTT"); outputPanel.setBackground(Color.white); contentPane.add(outputField, BorderLayout.SOUTH); /*************************** * * Setup for the nine buttons * * Since actions are executed by the label * I had set up these go-between functions * * ****************************/ b00.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} //game over, reset all flags outputField.setText("TicTacToe"); b00ActionPerformed(evt);//pass event to other function } }); buttonPanel.add(b00); b01.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b01ActionPerformed(evt); } }); buttonPanel.add(b01); b02.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b02ActionPerformed(evt); } }); buttonPanel.add(b02); b10.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b10ActionPerformed(evt); } }); buttonPanel.add(b10); b11.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b11ActionPerformed(evt); } }); buttonPanel.add(b11); b12.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b12ActionPerformed(evt); } }); buttonPanel.add(b12); b20.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b20ActionPerformed(evt); } }); buttonPanel.add(b20); b21.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b21ActionPerformed(evt); } }); buttonPanel.add(b21); b22.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){ if(go){reset();} outputField.setText("TicTacToe"); b22ActionPerformed(evt); } }); buttonPanel.add(b22); contentPane.add(buttonPanel, BorderLayout.CENTER); }//end ButtonTest /************************************* * * The nine actions * **************************************/ public void b00ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b00.setText(player); if(player.equals("X")){ arr[0][0] = 3; }else{ arr[0][0] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ //displays message when square is already taken outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b01ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b01.setText(player); if(player.equals("X")){ arr[0][1] = 3; }else{ arr[0][1] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b02ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b02.setText(player); if(player.equals("X")){ arr[0][2] = 3; }else{ arr[0][2] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b10ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b10.setText(player); if(player.equals("X")){ arr[1][0] = 3; }else{ arr[1][0] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b11ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b11.setText(player); if(player.equals("X")){ arr[1][1] = 3; }else{ arr[1][1] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b12ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b12.setText(player); if(player.equals("X")){ arr[1][2] = 3; }else{ arr[1][2] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b20ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b20.setText(player); if(player.equals("X")){ arr[2][0] = 3; }else{ arr[2][0] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b21ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b21.setText(player); if(player.equals("X")){ arr[2][1] = 3; }else{ arr[2][1] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void b22ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("")) { b22.setText(player); if(player.equals("X")){ arr[2][2] = 3; }else{ arr[2][2] = 5;} if(boardFull(arr)){ draw(); } whoWins(arr); //Toggle player if(player.equals("X")){ player = "O"; }else{ if(player.equals("O")){ player = "X"; } } }else{ outputField.setText("Taken, click elsewhere"); } } /***************************************/ public void actionPerformed(ActionEvent e) { //dummy holder } /***************************************/ public void draw(){ go = true; outputField.setText("Draw Score X:"+xnum+" O:"+onum); }//end draw /***************************************/ public void reset(){ b00.setText(""); b01.setText(""); b02.setText(""); b10.setText(""); b11.setText(""); b12.setText(""); b20.setText(""); b21.setText(""); b22.setText(""); for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ arr[i][j]=0; } } go = false; }//reseting the game board /********************** * Check to see if the board is full or a draw * by scanning the array * ***********************/ public boolean boardFull(int arr[][]){ boolean full = true; for(int i = 0; i<3; i++){ for(int j = 0; j<3; j++){ if(arr[i][j]==0){ full = false; } } } return full; }//end boardFull /************************ * O = 5, three in a row = 15 = O wins * X = 3, three in a row = 9 = X wins * * *************************/ public void whoWins(int arr[][]){ boolean xwin=false; boolean owin=false; //check diags int diag1 = arr[0][0]+arr[1][1]+arr[2][2]; int diag2 = arr[2][0]+arr[1][1]+arr[0][2]; if(diag1==9){ xwin=true; } if(diag1==15){ owin=true; } if(diag2==9){ xwin=true; } if(diag2==15){ owin=true; } int rowT=0; int colT=0; //Check rows for wins for(int row=0; row<3; row++){ rowT = arr[row][0]+arr[row][1]+arr[row][2]; if(rowT == 9){ xwin=true; } if(rowT == 15){ owin=true; } rowT=0; } //Check columns for wins for(int col=0; col<3; col++){ colT = arr[0][col]+arr[1][col]+arr[2][col]; if(colT == 9){ xwin=true; } if(colT == 15){ owin=true; } colT=0; } if(xwin){ //Keep score, report win outputField.setText("X Wins!!! Score X:"+(xnum+1)+" O:"+onum); xnum++; go = true; } if(owin){ //Keep score, report win outputField.setText("O Wins!!! Score X:"+xnum+" O:"+(onum+1)); onum++; go = true; } }//end whoWins }//end class