Advertisement
lewapkon

TicTacToe.java

Jan 18th, 2014
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.60 KB | None | 0 0
  1. import java.awt.BorderLayout;
  2. import java.awt.EventQueue;
  3. import java.awt.GridLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6.  
  7. import javax.swing.Icon;
  8. import javax.swing.ImageIcon;
  9. import javax.swing.JButton;
  10. import javax.swing.JFrame;
  11. import javax.swing.JOptionPane;
  12. import javax.swing.JPanel;
  13. import javax.swing.JTextField;
  14.  
  15. public class TicTacToe
  16. {
  17.     public static void main(String[] args)
  18.     {
  19.         EventQueue.invokeLater(new Runnable()
  20.         {
  21.             public void run()
  22.             {
  23.             GameFrame frame = new GameFrame();
  24.             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25.             frame.setVisible(true);
  26.             }
  27.         });
  28.     }
  29. }
  30.  
  31. class GameFrame extends JFrame
  32. {
  33.     public GameFrame()
  34.     {
  35.         setTitle("Tic Tac Toe");
  36.         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  37.        
  38.         turn = 1;
  39.         counter = 0;
  40.        
  41.         setLayout(new BorderLayout());
  42.         JPanel buttonPanel = new JPanel();
  43.         buttonPanel.setLayout(new GridLayout(3, 3));
  44.        
  45.         for(int i = 0; i < 3; i++)
  46.         {
  47.             for(int j = 0; j < 3; j++)
  48.             {
  49.                 buttons[i][j] = new JButton();
  50.                 buttons[i][j].putClientProperty("INDEX", new Integer[]{i,j});
  51.                 buttons[i][j].putClientProperty("OWNER", null);
  52.                 buttons[i][j].addActionListener(listener);
  53.                 buttonPanel.add(buttons[i][j]);
  54.             }
  55.         }
  56.        
  57.         add(buttonPanel, BorderLayout.CENTER);
  58.        
  59.         statusBar = new JTextField("Player's 1 turn");
  60.         statusBar.setEditable(false);
  61.        
  62.         add(statusBar, BorderLayout.SOUTH);
  63.     }
  64.    
  65.     class GameListener implements ActionListener
  66.     {
  67.         public void actionPerformed(ActionEvent event)
  68.         {
  69.             counter++;
  70.             JButton b = (JButton) event.getSource();
  71.             Integer[] index = (Integer[]) b.getClientProperty("INDEX");
  72.            
  73.             b.putClientProperty("OWNER", turn);
  74.             Icon icon = new ImageIcon(turn.toString() + ".gif");
  75.             b.setIcon(icon);
  76.             b.setEnabled(false);
  77.            
  78.             boolean check = checkVictory(index);
  79.             if (check)
  80.             {
  81.                 JOptionPane.showMessageDialog(null, "Player " + turn.toString() + " wins");
  82.                 init();
  83.             }
  84.             else
  85.             {
  86.                 if (turn == 1)
  87.                 {
  88.                     turn = 2;
  89.                     statusBar.setText("Player's 2 turn");
  90.                 }
  91.                 else
  92.                 {
  93.                     turn = 1;
  94.                     statusBar.setText("Player's 1 turn");
  95.                 }
  96.             }
  97.            
  98.             if (counter == 9)
  99.             {
  100.                 JOptionPane.showMessageDialog(null, "Match is a draw");
  101.                 init();
  102.             }
  103.         }
  104.        
  105.         public Integer getOwner(JButton b)
  106.         {
  107.             return (Integer) b.getClientProperty("OWNER");
  108.         }
  109.        
  110.         void printbuttonMap(Integer [][]bMap)
  111.         {
  112.             for(int i = 0; i < 3; i++)
  113.                 for(int j = 0; j < 3; j++)
  114.                     {
  115.                     System.out.print(bMap[i][j]+" ");
  116.                     System.out.println("");
  117.                     }
  118.           }
  119.          
  120.  
  121.        
  122.         public boolean checkVictory(Integer[] index)
  123.         {
  124.             Integer x = index[0];
  125.             Integer y = index[1];
  126.            
  127.             int i;
  128.             // check rows
  129.             for (i = 0; i < 3; i++)
  130.             {
  131.                 if (getOwner(buttons[x][i]) != getOwner(buttons[x][y]))
  132.                     break;
  133.             }
  134.            
  135.             if (i == 3)
  136.                 return true;
  137.            
  138.             // check columns
  139.             for (i = 0; i < 3; i++)
  140.             {
  141.                 if (getOwner(buttons[i][y]) != getOwner(buttons[x][y]))
  142.                     break;
  143.             }
  144.            
  145.             if (i == 3)
  146.                 return true;
  147.            
  148.             // check diagonal
  149.             if ((x==0 && y==0) ||
  150.                 (x==0 && y==2) ||
  151.                 (x==1 && y==1) ||
  152.                 (x==2 && y==0) ||
  153.                 (x==2 && y==2))
  154.             {
  155.                 // check left diagonal
  156.                 for (i = 0; i < 3; i++)
  157.                     if (getOwner(buttons[i][i]) != getOwner(buttons[x][y]))
  158.                         break;
  159.                 if (i == 3)
  160.                     return true;
  161.                
  162.                 // check right diagonal
  163.                 if (getOwner(buttons[0][2])==getOwner(buttons[x][y]) &&
  164.                     getOwner(buttons[1][1])==getOwner(buttons[x][y]) &&
  165.                     getOwner(buttons[2][0])==getOwner(buttons[x][y]))
  166.                     return true;
  167.             }
  168.            
  169.             return false;
  170.         }
  171.     }
  172.    
  173.     public void init()
  174.     {
  175.         for (int i = 0; i < 3; i++)
  176.             for (int j = 0; j < 3; j++)
  177.             {
  178.                 buttons[i][j].putClientProperty("INDEX", new Integer[]{i,j});
  179.                 buttons[i][j].putClientProperty("OWNER", null);
  180.                 buttons[i][j].setIcon(null);
  181.                 buttons[i][j].setEnabled(true);
  182.                 turn=1;
  183.                 counter=0;
  184.                 statusBar.setText("Player's 1 turn");
  185.  
  186.             }
  187.     }
  188.    
  189.     private JTextField statusBar;
  190.     private Integer counter;
  191.     private Integer turn;
  192.     private JButton[][] buttons = new JButton[3][3];
  193.     private final int DEFAULT_WIDTH = 300;
  194.     private final int DEFAULT_HEIGHT = 300;
  195.     private static final long serialVersionUID = 1L;
  196.     private GameListener listener = new GameListener();
  197. }import java.awt.BorderLayout;
  198. import java.awt.EventQueue;
  199. import java.awt.GridLayout;
  200. import java.awt.event.ActionEvent;
  201. import java.awt.event.ActionListener;
  202.  
  203. import javax.swing.Icon;
  204. import javax.swing.ImageIcon;
  205. import javax.swing.JButton;
  206. import javax.swing.JFrame;
  207. import javax.swing.JOptionPane;
  208. import javax.swing.JPanel;
  209. import javax.swing.JTextField;
  210.  
  211. public class TicTacToe
  212. {
  213.     public static void main(String[] args)
  214.     {
  215.         EventQueue.invokeLater(new Runnable()
  216.         {
  217.             public void run()
  218.             {
  219.             GameFrame frame = new GameFrame();
  220.             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  221.             frame.setVisible(true);
  222.             }
  223.         });
  224.     }
  225. }
  226.  
  227. class GameFrame extends JFrame
  228. {
  229.     public GameFrame()
  230.     {
  231.         setTitle("Tic Tac Toe");
  232.         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  233.        
  234.         turn = 1;
  235.         counter = 0;
  236.        
  237.         setLayout(new BorderLayout());
  238.         JPanel buttonPanel = new JPanel();
  239.         buttonPanel.setLayout(new GridLayout(3, 3));
  240.        
  241.         for(int i = 0; i < 3; i++)
  242.         {
  243.             for(int j = 0; j < 3; j++)
  244.             {
  245.                 buttons[i][j] = new JButton();
  246.                 buttons[i][j].putClientProperty("INDEX", new Integer[]{i,j});
  247.                 buttons[i][j].putClientProperty("OWNER", null);
  248.                 buttons[i][j].addActionListener(listener);
  249.                 buttonPanel.add(buttons[i][j]);
  250.             }
  251.         }
  252.        
  253.         add(buttonPanel, BorderLayout.CENTER);
  254.        
  255.         statusBar = new JTextField("Player's 1 turn");
  256.         statusBar.setEditable(false);
  257.        
  258.         add(statusBar, BorderLayout.SOUTH);
  259.     }
  260.    
  261.     class GameListener implements ActionListener
  262.     {
  263.         public void actionPerformed(ActionEvent event)
  264.         {
  265.             counter++;
  266.             JButton b = (JButton) event.getSource();
  267.             Integer[] index = (Integer[]) b.getClientProperty("INDEX");
  268.            
  269.             b.putClientProperty("OWNER", turn);
  270.             Icon icon = new ImageIcon(turn.toString() + ".gif");
  271.             b.setIcon(icon);
  272.             b.setEnabled(false);
  273.            
  274.             boolean check = checkVictory(index);
  275.             if (check)
  276.             {
  277.                 JOptionPane.showMessageDialog(null, "Player " + turn.toString() + " wins");
  278.                 init();
  279.             }
  280.             else
  281.             {
  282.                 if (turn == 1)
  283.                 {
  284.                     turn = 2;
  285.                     statusBar.setText("Player's 2 turn");
  286.                 }
  287.                 else
  288.                 {
  289.                     turn = 1;
  290.                     statusBar.setText("Player's 1 turn");
  291.                 }
  292.             }
  293.            
  294.             if (counter == 9)
  295.             {
  296.                 JOptionPane.showMessageDialog(null, "Match is a draw");
  297.                 init();
  298.             }
  299.         }
  300.        
  301.         public Integer getOwner(JButton b)
  302.         {
  303.             return (Integer) b.getClientProperty("OWNER");
  304.         }
  305.        
  306.         void printbuttonMap(Integer [][]bMap)
  307.         {
  308.             for(int i = 0; i < 3; i++)
  309.                 for(int j = 0; j < 3; j++)
  310.                     {
  311.                     System.out.print(bMap[i][j]+" ");
  312.                     System.out.println("");
  313.                     }
  314.           }
  315.          
  316.  
  317.        
  318.         public boolean checkVictory(Integer[] index)
  319.         {
  320.             Integer x = index[0];
  321.             Integer y = index[1];
  322.            
  323.             int i;
  324.             // check rows
  325.             for (i = 0; i < 3; i++)
  326.             {
  327.                 if (getOwner(buttons[x][i]) != getOwner(buttons[x][y]))
  328.                     break;
  329.             }
  330.            
  331.             if (i == 3)
  332.                 return true;
  333.            
  334.             // check columns
  335.             for (i = 0; i < 3; i++)
  336.             {
  337.                 if (getOwner(buttons[i][y]) != getOwner(buttons[x][y]))
  338.                     break;
  339.             }
  340.            
  341.             if (i == 3)
  342.                 return true;
  343.            
  344.             // check diagonal
  345.             if ((x==0 && y==0) ||
  346.                 (x==0 && y==2) ||
  347.                 (x==1 && y==1) ||
  348.                 (x==2 && y==0) ||
  349.                 (x==2 && y==2))
  350.             {
  351.                 // check left diagonal
  352.                 for (i = 0; i < 3; i++)
  353.                     if (getOwner(buttons[i][i]) != getOwner(buttons[x][y]))
  354.                         break;
  355.                 if (i == 3)
  356.                     return true;
  357.                
  358.                 // check right diagonal
  359.                 if (getOwner(buttons[0][2])==getOwner(buttons[x][y]) &&
  360.                     getOwner(buttons[1][1])==getOwner(buttons[x][y]) &&
  361.                     getOwner(buttons[2][0])==getOwner(buttons[x][y]))
  362.                     return true;
  363.             }
  364.            
  365.             return false;
  366.         }
  367.     }
  368.    
  369.     public void init()
  370.     {
  371.         for (int i = 0; i < 3; i++)
  372.             for (int j = 0; j < 3; j++)
  373.             {
  374.                 buttons[i][j].putClientProperty("INDEX", new Integer[]{i,j});
  375.                 buttons[i][j].putClientProperty("OWNER", null);
  376.                 buttons[i][j].setIcon(null);
  377.                 buttons[i][j].setEnabled(true);
  378.                 turn=1;
  379.                 counter=0;
  380.                 statusBar.setText("Player's 1 turn");
  381.  
  382.             }
  383.     }
  384.    
  385.     private JTextField statusBar;
  386.     private Integer counter;
  387.     private Integer turn;
  388.     private JButton[][] buttons = new JButton[3][3];
  389.     private final int DEFAULT_WIDTH = 300;
  390.     private final int DEFAULT_HEIGHT = 300;
  391.     private static final long serialVersionUID = 1L;
  392.     private GameListener listener = new GameListener();
  393. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement