作业帮 > 综合 > 作业

利用图形用户界面设计实现“猜数字游戏”

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 03:45:32
利用图形用户界面设计实现“猜数字游戏”
功能如下:
1) 游戏开始界面,能够显示游戏规则。
2)游戏开始后,程序随机产生一个1000以内的数r(这个数的每一位不相同,例如999是不符合要求的数)。
3)在界面输入3个数字(每个数字都为0—9之间的数)。如果有一个数字与r中相应的数字在位置上完全一致,则记一个A;如果有一个数与所给的四个数中的一个相同,但位置不同,则记一个B。
4)统计所得的A和B的个数,并显示出来,显示形如“xAyB”,其中“x”为输入的数与默定的数中数字和位置相同的数,y为只有数字相同的数的个数。
5) 每玩一局,只有8次机会。如果在8次之内猜对了,就赢了,提示“你用了x次,猜对了数字”(x为你猜数的次数),并询问是否继续下一局。如果猜了8次还没猜出来,这盘游戏就输了,提示你输了,询问是否继续下一局。
要是谁写了,对的!我会加50分!
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TestGuessNumber extends JFrame {
private static final long serialVersionUID = -4922390040187620343L;
private JLabel label;
private JTextField[] text = new JTextField[3];
private JButton button;

private String[] nums = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
private String[] number;
private int times;
public static void main(String[] args) {
new TestGuessNumber();
}

public TestGuessNumber() {
JOptionPane.showMessageDialog(null, "。。。", "游戏规则",
JOptionPane.INFORMATION_MESSAGE); // 。。。处填写规则,换行用“\n”
init();
}

private void init() {
number = getNumber();
this.setTitle("猜数字");
this.setBounds(500, 400, 200, 160);
this.setResizable(false);
this.getContentPane().setLayout(new GridLayout(3, 1));
label = new JLabel("请输入你猜的数字", JLabel.CENTER);
this.getContentPane().add(label);
JPanel panel = new JPanel(new FlowLayout());
for (int i = 0; i < text.length; i++) {
text[i] = new JTextField(3);
panel.add(text[i]);
}
this.getContentPane().add(panel);
button = new JButton("确定");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (JTextField tmp : text) {
if (! tmp.getText().matches("^[0-9]{1}$")) {
JOptionPane.showMessageDialog(null, "每个输入框请输入一位数字!");
return;
}
}
if (times++ >= 8) {
if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(null,
"对不起,请再接再厉!\n是否继续?", "失败", JOptionPane.YES_NO_OPTION)) {
dispose();
new TestGuessNumber();
return;
} else {
dispose();
System.exit(0);
}
}
if (showResult()) {
if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(null,
"你用了" + times + "次,猜对了数字!\n是否继续?",
"成功", JOptionPane.YES_NO_OPTION)) {
dispose();
new TestGuessNumber();
} else {
dispose();
System.exit(0);
}
}
}
});
this.getContentPane().add(button);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.setVisible(true);
// System.out.println(number[0] + number[1] + number[2]);
}
private String[] getNumber() {
String[] num = new String[3];
num[0] = nums[(int) (Math.random() * 10)];
do {
num[1] = nums[(int) (Math.random() * 10)];
} while (num[1] == num[0]);
do {
num[2] = nums[(int) (Math.random() * 10)];
} while (num[2] == num[0] || num[2] == num[1]);
return num;
}

private boolean showResult() {
int A = 0, B = 0;
String num1 = text[0].getText().trim();
String num2 = text[1].getText().trim();
String num3 = text[2].getText().trim();
if (num1.equals(number[0])) {
A++;
} else if (num1.equals(number[1]) || num1.equals(number[2])) {
B++;
}
if (num2.equals(number[1])) {
A++;
} else if (num2.equals(number[0]) || num2.equals(number[2])) {
B++;
}
if (num3.equals(number[2])) {
A++;
} else if (num3.equals(number[0]) || num3.equals(number[1])) {
B++;
}
label.setText("第" + times + "次:" + A + "A" + B + "B");
return A == 3 ? true : false;
}
}