import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
public class YH24 {
Frame f = new Frame("24点游戏"); // main frame
TextField t1 = new TextField("1",3); //text 1 2 3 4
TextField t2 = new TextField("2",3);
TextField t3 = new TextField("3",3);
TextField t4 = new TextField("4",3);
TextArea t5 = new TextArea("", 5,29, TextArea.SCROLLBARS_VERTICAL_ONLY); //textArea 1
Button b1 = new Button("显示结果"); //button1
Button b2 = new Button(" 再一次 ");
Button b3 = new Button(" 退出 ");
Label label = new Label("0212002912"); //label
/**
* 菜单
*/
MenuBar mb1 = new MenuBar();
Menu m1 = new Menu("输入");
Menu m2 = new Menu("关于");
MenuItem mi1 = new MenuItem("随机");
MenuItem mi2 = new MenuItem("自行");
MenuItem mi3 = new MenuItem("作者");
MenuItem mi4 = new MenuItem("帮助");
/**
* 初始化控件
*/
void go() {
f.setLayout(new FlowLayout());
f.setSize(280, 420);
f.setBackground( new Color(71, 192, 255));
f.setLocation(300, 450);
f.setLayout(new FlowLayout());
f.setMenuBar(mb1);
mb1.add(m1);
mb1.add(m2);
m1.add(mi1);
m1.add(mi2);
m2.add(mi3);
m2.add(mi4);
f.add(new Label(" 游戏介绍 "));
f.add(new Label(" 游戏任务: 24点这个游戏!它的游戏规则是: "));
f.add(new Label(" 把一副扑克牌,将J、Q、K三种牌和大王小王去掉, "));
f.add(new Label("再任意抽出4张牌,利用加、减、乘、除以及小括 "));
f.add(new Label("号的运算方法,算出得数的结果是24; "));
f.add(t1);
f.add(t2);
f.add(t3);
f.add(t4);
f.add(t5);
f.add(new Label(" "));
f.add(b1);
f.add(b2);
f.add(b3);
f.add(new Label(" "));
f.add(label);
label.setEnabled(false);
f.setVisible(true);
f.setResizable(false);
b1.addActionListener(new ButtonHandler());
/**
四个代表四个菜单
*/
mi1.addActionListener(new MenuHandler(1));
b2.addActionListener(new MenuHandler(1));
mi2.addActionListener(new MenuHandler(2));
mi3.addActionListener(new MenuHandler(3));
mi4.addActionListener(new MenuHandler(4));
f.addWindowListener(new WindowHandler());
b3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
);
}
/**
* 点击事件处理
*/
class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
t5.setText("结果如下:\n");
panduan();
}
}
/**
* 判断text的数据合法性
*/
void panduan() {
double a, b, c, d;
int n = 0;
a = Double.valueOf(t1.getText()).doubleValue();
b = Double.valueOf(t2.getText()).doubleValue();
c = Double.valueOf(t3.getText()).doubleValue();
d = Double.valueOf(t4.getText()).doubleValue();
if (a < 1 || a > 9 || b < 1 || b > 9 || c < 1 || c > 9 || d < 1 || d > 9) {
t5.setText("请输入1-9之间的整数");
} else {
/**
迭代24种排列
*/
judge(a, b, c, d);
judge(a, b, d, c);
judge(a, c, b, d);
judge(a, c, d, b);
judge(a, d, b, c);
judge(a, d, c, b);
judge(b, a, c, d);
judge(b, a, d, c);
judge(b, c, a, d);
judge(b, c, d, a);
judge(b, d, a, c);
judge(b, d, c, a);
judge(c, a, b, d);
judge(c, a, d, b);
judge(c, b, a, d);
judge(c, b, d, a);
judge(c, d, a, b);
judge(c, d, b, a);
judge(d, a, b, c);
judge(d, a, c, b);
judge(d, b, a, c);
judge(d, b, c, a);
judge(d, c, a, b);
judge(d, c, b, a);
}
}
void judge(double a, double b, double c, double d) {
int i, j, k, u, v;
double x = 0;
double[] s, t, p;
s = new double[4];
t = new double[4];
p = new double[18];
s[0] = a + b;
s[1] = a - b;
s[2] = a * b;
s[3] = a / b;
t[0] = c + d;
t[1] = c - d;
t[2] = c * d;
t[3] = c / d;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 4; k++) {
switch (k) {
case 0:
x = s[i] + t[j];
break;
case 1:
x = s[i] - t[j];
break;
case 2:
x = s[i] * t[j];
break;
case 3:
x = s[i] / t[j];
break;
}
if (x <= 24.0 && x > 23.9)
out1(a, b, c, d, i, j, k);
}
}
}
p[0] = a + b + c;
p[1] = a + b - c;
p[2] = a - b - c;
p[3] = a * b + c;
p[4] = a * b - c;
p[5] = a - b * c;
p[6] = a / b + c;
p[7] = a / b - c;
p[8] = a - b / c;
p[9] = a * b * c;
p[10] = a * b / c;
p[11] = a / b / c;
p[12] = (a + b) * c;
p[13] = (a - b) * c;
p[14] = (a + b) / c;
p[15] = (a - b) / c;
p[16] = a / (b + c);
p[17] = a / (b - c);
for (u = 0; u < 18; u++) {
for (v = 0; v < 5; v++) {
switch (v) {
case 0:
x = p[u] + d;
break;
case 1:
x = p[u] - d;
break;
case 2:
x = p[u] * d;
break;
case 3:
x = p[u] / d;
break;
case 4:
x = d / p[u];
break;
}
if (x <= 24.0 && x > 23.9)
out2(a, b, c, d, u, v);
}
}
}
void out1(double a, double b, double c, double d, int i, int j, int k) {
switch (k) {
case 0:
if (i == 0) t5.append((int) (a) + "+" + (int) (b));
if (i == 1) t5.append((int) (a) + "-" + (int) (b));
if (i == 2) t5.append((int) (a) + "*" + (int) (b));
if (i == 3) t5.append((int) (a) + "/" + (int) (b));
t5.append("+");
if (j == 0) t5.append((int) (c) + "+" + (int) (d));
if (j == 1) t5.append((int) (c) + "-" + (int) (d));
if (j == 2) t5.append((int) (c) + "*" + (int) (d));
if (j == 3) t5.append((int) (c) + "/" + (int) (d));
t5.append("=24\n");
break;
case 1:
if (i == 0) t5.append((int) (a) + "+" + (int) (b));
if (i == 1) t5.append((int) (a) + "-" + (int) (b));
if (i == 2) t5.append((int) (a) + "*" + (int) (b));
if (i == 3) t5.append((int) (a) + "/" + (int) (b));
t5.append("-");
if (j == 0) t5.append("(" + (int) (c) + "+" + (int) (d) + ")");
if (j == 1) t5.append("(" + (int) (c) + "-" + (int) (d) + ")");
if (j == 2) t5.append((int) (c) + "*" + (int) (d));
if (j == 3) t5.append((int) (c) + "/" + (int) (d));
t5.append("=24\n");
break;
case 2:
if (i == 0) t5.append("(" + (int) (a) + "+" + (int) (b) + ")");
if (i == 1) t5.append("(" + (int) (a) + "-" + (int) (b) + ")");
if (i == 2) t5.append((int) (a) + "*" + (int) (b));
if (i == 3) t5.append((int) (a) + "/" + (int) (b));
t5.append("*");
if (j == 0) t5.append("(" + (int) (c) + "+" + (int) (d) + ")");
if (j == 1) t5.append("(" + (int) (c) + "-" + (int) (d) + ")");
if (j == 2) t5.append((int) (c) + "*" + (int) (d));