18.6

 

  1 import java.awt.*;
  2 import java.awt.event.ActionEvent;
  3 import java.awt.event.ActionListener;
  4 import java.awt.event.MouseAdapter;
  5 import java.awt.event.MouseEvent;
  6 
  7 import javax.swing.*;
  8 import javax.swing.border.LineBorder;
  9 
 10 public class Test_18_6 extends JApplet{    
 11     static char whoseTurn = 'X';
 12     private static Cell[][] cells = new Cell[3][3];
 13     static JLabel jlblStatus = new JLabel("X's turn to play");
 14     JButton newGame = new JButton("NEW GAME");
 15     
 16     public Test_18_6(){
 17         JPanel p = new JPanel(new GridLayout(3,3,0,0));
 18         for(int i = 0; i < 3; i++)
 19             for(int j = 0; j < 3; j++)
 20                 p.add(cells[i][j] = new Cell());
 21         
 22         p.setBorder(new LineBorder(Color.red,1));
 23         jlblStatus.setBorder(new LineBorder(Color.yellow,1));
 24         
 25         add(newGame,BorderLayout.NORTH);
 26         add(p,BorderLayout.CENTER);
 27         add(jlblStatus,BorderLayout.SOUTH);
 28         newGame.addActionListener(new ActionListener(){
 29 
 30             @Override
 31             public void actionPerformed(ActionEvent arg0) {
 32                 // TODO Auto-generated method stub
 33                 for(int i = 0; i < 3; i++)
 34                     for(int j = 0; j < 3; j++)
 35                         cells[i][j].setToken(' ');
 36                 whoseTurn = 'X';
 37                 jlblStatus = new JLabel("X's turn to play");
 38             }
 39             
 40         });
 41     }
 42     
 43     public static boolean isFull(){
 44         for(int i = 0; i < 3; i++)
 45             for(int j = 0; j < 3; j++)
 46                 if(cells[i][j].getToken() == ' ')
 47                     return false;
 48         
 49         return true;
 50     }
 51     
 52     public static boolean isWon(char token){
 53         for(int i = 0; i < 3; i++)
 54             if((cells[i][0].getToken() == token) && (cells[i][1].getToken() == token) && (cells[i][2].getToken() == token)){
 55                 return true;
 56             }
 57         
 58         for(int j = 0; j < 3; j++)
 59             if((cells[0][j].getToken() == token) && (cells[1][j].getToken() == token) && (cells[2][j].getToken() == token)){
 60                 return true;
 61             }
 62         
 63         if((cells[0][0].getToken() == token) && (cells[1][1].getToken() == token) && (cells[2][2].getToken() == token)){
 64             return true;
 65         }
 66         
 67         if((cells[0][2].getToken() == token) && (cells[1][1].getToken() == token) && (cells[2][0].getToken() == token)){
 68             return true;
 69         }
 70         return false;
 71     }
 72 }
 73 
 74 class  Cell extends JPanel{
 75     private char token = ' ';
 76     
 77     public Cell(){
 78         setBorder(new LineBorder(Color.black,1));
 79         addMouseListener(new MyMouseListener());
 80     }
 81     
 82     public char getToken(){
 83         return token;
 84     }
 85     
 86     public void setToken(char c){
 87         token = c;
 88         repaint();
 89     }
 90     
 91     protected void paintComponent(Graphics g){
 92         super.paintComponent(g);
 93         
 94         if(token == 'X'){
 95             g.drawLine(10, 10, getWidth() - 10, getHeight() - 10);
 96             g.drawLine(getWidth() - 10, 10, 10, getHeight() - 10);
 97         }
 98         else if(token == 'O'){
 99             g.drawOval(10, 10, getWidth() - 20, getHeight() - 20);
100         }
101     }
102     private class MyMouseListener extends MouseAdapter{
103         public void mouseClicked(MouseEvent e){
104             if(token == ' ' && Test_18_6.whoseTurn != ' '){
105                 setToken(Test_18_6.whoseTurn);
106                 
107                 if(Test_18_6.isWon(Test_18_6.whoseTurn)){
108                     Test_18_6.jlblStatus.setText(Test_18_6.whoseTurn + "won! the game is over");
109                     Test_18_6.whoseTurn = ' ';
110                 }
111                 else if(Test_18_6.isFull()){
112                     Test_18_6.jlblStatus.setText("Draw! The game is over");
113                     Test_18_6.whoseTurn = ' ';
114                 }
115                 else {
116                     Test_18_6.whoseTurn = (Test_18_6.whoseTurn == 'X')?'O':'X';
117                     Test_18_6.jlblStatus.setText(Test_18_6.whoseTurn + "'s turn");
118                 }
119             }
120         }
121     }
122 }
View Code

 

posted on 2016-08-22 21:34  功夫茶茶  阅读(98)  评论(0编辑  收藏  举报

导航