1 import java.awt.event.*;2 import javax.swing.*;3 importjava.util.Timer;4 importjava.util.Random;5 /**
6 * 动作监视器类7 *@authorzhangyubo8 */
9 public class Dispose implementsActionListener {10 private JLabel operator1_message; //电脑或玩家1提示框
11 private JLabel operator2_message; //玩家或玩家2提示框
12 private JLabel leftMatch; //剩余火柴数
13 private JLabel hard_message; //末日难度提示框
14 private JLabel comob_message; //电脑发动连击提示框
15 private JButton start; //开始按钮
16 private JButton choose1; //玩家1端拿1根火柴按钮
17 private JButton choose2; //玩家1端拿2根火柴按钮
18 private JButton choose3; //玩家1端拿3根火柴按钮
19 private JButton choose4; //玩家2端拿1根火柴按钮
20 private JButton choose5; //玩家2端拿2根火柴按钮
21 private JButton choose6; //玩家2端拿3根火柴按钮
22 int flag; //游戏模式标志
23 static int game_level; //类变量游戏难度
24 Random random; //随机值变量
25 Timer timer; //计时器变量
26 static int number; //随机值
27 static int randomNumber; //随机火柴数
28
29 /**
30 * 获取WindowActionEvent类的提示框标签31 *@paramt 标签32 */
33 public voidsetMessage(JLabel...t){34 operator2_message=t[0];35 operator1_message=t[1];36 leftMatch=t[2];37 hard_message=t[3];38 comob_message=t[4];39 }40
41 /**
42 * 获取WindowActionEvent类的开始按钮43 *@params 按钮44 */
45 public voidsetButton(JButton s){46 start=s;47 }48
49 /**
50 * 获取WindowActionEvent类的6个拿火柴按钮51 *@paramt 按钮52 */
53 public voidsetChoose(JButton...t){54 choose1=t[0];55 choose2=t[1];56 choose3=t[2];57 choose4=t[3];58 choose5=t[4];59 choose6=t[5];60 }61
62 public void actionPerformed(ActionEvent e){ //重写监视器事件
63 if(e.getActionCommand()=="开始"){ //当点击开始按钮时
64 start.setText("重新开始"); //start按钮输出重新开始
65 init(); //调用init()重置方法
66 }67 if(flag==0&&e.getSource()==choose4) //在人机模式下点击choose4按钮
68 playerTake(1); //调用人机模式下玩家拿火柴方法
69 if(flag==0&&e.getSource()==choose5) //在人机模式下点击choose5按钮
70 playerTake(2); //调用人机模式玩家拿火柴方法
71 if(flag==0&&e.getSource()==choose6) //在人机模式下点击choose6按钮
72 playerTake(3); //调用人机模式下玩家拿火柴方法
73 if(flag==1&&e.getSource()==choose1) //在玩家模式下点击choose1按钮
74 player1Take(1); //调用玩家模式下玩家1拿火柴方法
75 if(flag==1&&e.getSource()==choose2) //在玩家模式下点击choose2按钮
76 player1Take(2); //调用玩家模式下玩家1拿火柴方法
77 if(flag==1&&e.getSource()==choose3) //在玩家模式下点击choose3按钮
78 player1Take(3); //调用玩家模式下玩家1拿火柴方法
79 if(flag==1&&e.getSource()==choose4) //在玩家模式下点击choose4按钮
80 player2Take(1); //调用玩家模式下玩家2拿火柴方法
81 if(flag==1&&e.getSource()==choose5) //在玩家模式下点击choose5按钮
82 player2Take(2); //调用玩家模式下玩家2拿火柴方法
83 if(flag==1&&e.getSource()==choose6) //在玩家模式下点击choose6按钮
84 player2Take(3); //调用玩家模式下玩家2拿火柴方法
85 if(e.getActionCommand()=="重新开始"){ //点击重新开始按钮时
86 init(); //调用init()重置方法
87 }88 }89
90 /**
91 * 重置游戏方法92 */
93 public voidinit(){94 timer=new Timer(); //实例化一个计时器的对象
95 random=new Random(); //创建随机值变量
96 comob_message.setText("");97 if(flag==0) operator2_message.setText("请选择你要取走的火柴数");98 //如果为人机对战模式,输出请选择你要取走的火柴数
99 else operator2_message.setText("请玩家2选择要取走的火柴数");100 //如果为玩家对战模式,输出请玩家2选择要取走的火柴数
101 if(flag==0) operator1_message.setText("");102 //如果为人机对战模式,清空operator1_message标签
103 else operator1_message.setText("请玩家1选择要取走的火柴数");104 //如果为玩家对战模式,输出请玩家1选择要取走的火柴数
105 if(flag==1){ //如果为玩家对战模式
106 choose1.setVisible(true); //设置choose1按钮可见
107 choose2.setVisible(true); //设置choose2按钮可见
108 choose3.setVisible(true); //设置choose3按钮可见
109 choose1.setEnabled(true); //设置choose1按钮可用
110 choose2.setEnabled(true); //设置choose2按钮可用
111 choose3.setEnabled(true); //设置choose3按钮可用
112 }113 choose4.setEnabled(true); //设置choose4按钮可用
114 choose5.setEnabled(true); //设置choose5按钮可用
115 choose6.setEnabled(true); //设置choose6按钮可用
116 choose4.setVisible(true); //设置choose4按钮可见
117 choose5.setVisible(true); //设置choose5按钮可见
118 choose6.setVisible(true); //设置choose6按钮可见
119 randomNumber=(int)(20+Math.random()*(50-20+1)); //随机生成20-50根火柴数
120 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数
121 if(flag==0){ //如果为人机对战模式
122 double d=Math.random(); //随机产生0-1的数
123 if(d>=0.5) computerTake(); //如果d>=0.5,则电脑先拿火柴
124 }125 if(flag==1){ //如果为玩家对战模式
126 double d=Math.random(); //随机产生0-1的数
127 if(d>=0.5){ //如果d>=0.5,玩家1先拿火柴
128 choose4.setEnabled(false); //设置choose4不可用
129 choose5.setEnabled(false); //设置choose5不可用
130 choose6.setEnabled(false); //设置choose6不可用
131 }132 else{ //如果d<0.5,玩家2先拿火柴
133 choose1.setEnabled(false); //设置choose1不可用
134 choose2.setEnabled(false); //设置choose2不可用
135 choose3.setEnabled(false); //设置choose3不可用
136 }137 }138 }139
140 /**
141 * 电脑拿火柴方法142 */
143 private voidcomputerTake(){144 choose4.setEnabled(false); //设置choose4不可用
145 choose5.setEnabled(false); //设置choose5不可用
146 choose6.setEnabled(false); //设置choose6不可用
147 operator1_message.setText("电脑正在取火柴:"); //输出电脑正在取火柴:
148 ComputerTake computertake=new ComputerTake(choose4,choose5,choose6); //创建一个ComputerTake的对象
149 computertake.setMessage(operator1_message,leftMatch,hard_message,comob_message); //传递标签
150 timer.schedule(computertake, 1000); //设定一秒后执行线程
151 }152
153 /**
154 * 人机对战模式下玩家拿火柴方法155 *@paramnumber 拿火柴数156 */
157 private void playerTake(int number){ //定义人机模式下的玩家拿火柴方法
158 hard_message.setText(""); //清空标签
159 comob_message.setText(""); //清空标签
160 operator2_message.setText("请选择你要取走的火柴数"); //输出请选择你要取走的火柴数
161 randomNumber=randomNumber-number; //计算出剩余火柴数
162 if(randomNumber<=0) { //如果当前剩余火柴数已为0
163 leftMatch.setText("当前还剩下0根火柴"); //输出当前还剩下0根火柴
164 JOptionPane.showMessageDialog(null, "You are the winner"); //弹出消息框
165 choose4.setEnabled(false); //设置choose4不可用
166 choose5.setEnabled(false); //设置choose5不可用
167 choose6.setEnabled(false); //设置choose6不可用
168 }169 else{ //如果当前剩余火柴数不为0
170 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数
171 computerTake(); //调用电脑拿火柴方法
172 }173 }174
175 /**
176 * 玩家对战模式下玩家1拿火柴方法177 *@paramnumber 拿火柴数178 */
179 private void player1Take(int number){ //定义玩家对战下的玩家1拿火柴方法
180 randomNumber=randomNumber-number; //计算剩余火柴数
181 if(randomNumber<=0) { //如果当前火柴数已为0
182 leftMatch.setText("当前还剩下0根火柴"); //输出当前还剩下0根火柴
183 JOptionPane.showMessageDialog(null, "Player1 is the winner"); //弹出消息框
184 choose1.setEnabled(false); //设置choose1按钮不可用
185 choose2.setEnabled(false); //设置choose2按钮不可用
186 choose3.setEnabled(false); //设置choose3按钮不可用
187 }188 else{ //如果当前火柴数不为0
189 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数
190 choose1.setEnabled(false); //设置choose1按钮不可用
191 choose2.setEnabled(false); //设置choose2按钮不可用
192 choose3.setEnabled(false); //设置choose3按钮不可用
193 try{Thread.sleep(500);} //设定程序睡眠500毫秒
194 catch(InterruptedException e){}195 choose4.setEnabled(true); //设置choose4按钮可用
196 choose5.setEnabled(true); //设置choose5按钮可用
197 choose6.setEnabled(true); //设置choose6按钮可用
198 }199 }200
201 /**
202 * 玩家对战模式下玩家2拿火柴方法203 *@paramnumber 拿火柴数204 */
205 private void player2Take(int number){ //定义玩家对战下的玩家2拿火柴方法
206 randomNumber=randomNumber-number; //计算出剩余火柴数
207 if(randomNumber<=0) { //如果当前剩余火柴数已为0
208 leftMatch.setText("当前还剩下0根火柴"); //输出当前还剩下0根火柴
209 JOptionPane.showMessageDialog(null, "Player2 is the winner"); //弹出消息框
210 choose4.setEnabled(false); //设置choose4按钮不可用
211 choose5.setEnabled(false); //设置choose5按钮不可用
212 choose6.setEnabled(false); //设置choose6按钮不可用
213 }214 else{ //如果当前剩余火柴数不为0
215 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数
216 choose4.setEnabled(false); //设置choose4按钮不可用
217 choose5.setEnabled(false); //设置choose5按钮不可用
218 choose6.setEnabled(false); //设置choose6按钮不可用
219 try{Thread.sleep(500);} //设定程序睡眠500毫秒
220 catch(InterruptedException e){}221 choose1.setEnabled(true); //设置choose1按钮可用
222 choose2.setEnabled(true); //设置choose2按钮可用
223 choose3.setEnabled(true); //设置choose3按钮可用
224 }225 }226 }