源码
挑战模式可设置猜测次数。
package top.warmj.guessnumber;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class Client extends Frame implements ActionListener {
private TextArea ta_result;
private TextField tf_input;
private Button b_define;
private Boolean isChallengeMode = false; // 挑战模式
private Boolean isGeneralMode = false; // 普通模式
private Boolean isEnd = false; // 游戏结束
private int randNum; // 随机数
private int userNum; // 用户回答数
private int count = -1; // 挑战次数
private int beginNum = 1; // 开始范围数
private int endNum = 100; // 结束范围数
private int temp; // 临时保存总次数
private KeyListener keyEnter;
public static void main(String[] args) {
new Client("Guess Number —— WarMj");
}
public Client(String name) {
super(name);
init();
}
public Client() {
init();
}
// 初始化
public void init() {
this.setSize(500, 385);
this.setResizable(false);
this.setVisible(true);
this.setLocation(700, 200);
centerPanel();
northPanel();
event();
tf_input.requestFocus(); //输入框获取焦点
this.setIconImage(Toolkit.getDefaultToolkit().createImage("icon.png"));
}
//用户输入模式选择
public void selectMode() {
if (Integer.parseInt(tf_input.getText()) == 1) {
isChallengeMode = true; //切换到挑战模式
ta_result.append("进入挑战模式\n");
ta_result.append("请输入挑战次数:\n");
tf_input.setText("");
} else if (Integer.parseInt(tf_input.getText()) == 0) {
isGeneralMode = true; //切换到普通模式
count = 0;
ta_result.append("进入普通模式\n");
ta_result.append("\n请输入你要猜的数字:(" + beginNum + "~" + endNum + ")\n");
tf_input.setText("");
}
}
// 普通模式
public void generalMode() {
if (!tf_input.getText().equals("")) {
// 获取用户数字
userNum = Integer.parseInt(tf_input.getText());
// 计数加一
count++;
if (userNum > randNum) {
// 如果大了
if (userNum < endNum) {
endNum = userNum;
}
ta_result.append("你猜大了\n");
} else if (userNum < randNum) {
// 如果小了
if (userNum > beginNum) {
beginNum = userNum;
}
ta_result.append("你猜小了\n");
} else {
// 如果答案正确
ta_result.append("\n答案是" + randNum + "恭喜你,挑战成功!花了" + count + "次,就猜中了\n");
isEnd = true;
ta_result.append("是否重来游戏? 是 —— 1 否 —— 0\n");
tf_input.setText("");
return;
}
ta_result.append("\r\n请输入你要猜的数字:(" + beginNum + "~" + endNum + ")\n");
}
// 清空输入框
tf_input.setText("");
}
// 挑战模式
public void challengeMode() {
if (count < 0) {
//第一次进入挑战模式,设置挑战次数
count = Integer.parseInt(tf_input.getText());
temp = count; // 临时保存总次数
ta_result.append("挑战次数为" + count + "次\n");
ta_result.append("请输入你要猜的数字:(" + beginNum + "~" + endNum + ")\n");
tf_input.setText("");
} else {
if (count > 0) {
// 如果还有挑战次数
if (!tf_input.getText().equals("")) {
// 获取用户数字
userNum = Integer.parseInt(tf_input.getText());
// 挑战次数减一
count--;
if (userNum > randNum) {
// 如果大了
if (userNum < endNum) {
endNum = userNum;
}
ta_result.append("你猜大了\n");
ta_result.append("---你还有" + count + "次机会---\n");
} else if (userNum < randNum) {
// 如果小了
if (userNum > beginNum) {
beginNum = userNum;
}
ta_result.append("你猜小了\n");
ta_result.append("---你还有" + count + "次机会---\n");
} else {
// 如果答案正确
ta_result.append("\n答案是" + randNum + "恭喜你,挑战成功!花了" + (temp - count) + "次,就猜中了\n");
isEnd = true;
ta_result.append("是否重来游戏? 是 —— 1 否 —— 0\n");
tf_input.setText("");
return;
}
}
// 清空输入框
tf_input.setText("");
if (count == 0) {
ta_result.append("挑战失败\n");
isEnd = true;
ta_result.append("是否重来游戏? 是 —— 1 否 —— 0\n");
tf_input.setText("");
} else {
ta_result.append("请输入你要猜的数字:(" + beginNum + "~" + endNum + ")\n");
}
}
}
}
// 事件
public void event() {
// 关闭窗口
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 按钮添加监听事件
b_define.addActionListener(this);
//创建键盘回车事件
keyEnter = new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
handleButton();
}
}
};
// 输入框添加回车事件
tf_input.addKeyListener(keyEnter);
// 生成随机数
randNum = new Random().nextInt(99) + 1;
}
//确认按钮功能
public void handleButton() {
if (!isChallengeMode && !isGeneralMode && !tf_input.getText().equals("") && !isEnd) {
// 如果是游戏选择模式
selectMode();
} else if (isGeneralMode && !isEnd) {
//普通游戏模式
generalMode();
} else if (isChallengeMode && !isEnd) {
//挑战游戏模式
challengeMode();
} else if (isEnd) {
if (Integer.parseInt(tf_input.getText()) == 1) {
// 如果选择重新开始游戏
initValue(); // 初始化各类值
} else {
ta_result.append("\r\n---游戏结束---");
b_define.setEnabled(false);
tf_input.setEditable(false);
tf_input.removeKeyListener(keyEnter);
}
}
}
// 初始化各类值
public void initValue() {
count = -1;
beginNum = 1;
endNum = 100;
isChallengeMode = false;
isGeneralMode = false;
isEnd = false;
randNum = new Random().nextInt(99) + 1;
ta_result.append("请选择游戏模式:\n" + "挑战模式 —— 1 普通模式 —— 0\n");
tf_input.setText("");
}
//点击动作监听
public void actionPerformed(ActionEvent e) {
// 当确定按钮被点击
if (e.getActionCommand().equals("确定")) {
handleButton();
}
}
// 北布局,结果显示框
public void northPanel() {
Panel north = new Panel();
north.setLayout(new BorderLayout());
ta_result = new TextArea("请选择游戏模式:\n" + "挑战模式 —— 1 普通模式 —— 0\n", 0, 0, TextArea.SCROLLBARS_NONE);
ta_result.setEditable(false);
ta_result.setFont(new Font("宋体", Font.PLAIN, 24));
ta_result.setBackground(Color.white);
north.add(ta_result, BorderLayout.CENTER);
this.add(north, BorderLayout.NORTH);
}
// 中间布局,输入框和确认按钮
public void centerPanel() {
Panel center = new Panel();
tf_input = new TextField();
tf_input.setFont(new Font("宋体", Font.PLAIN, 24));
tf_input.setColumns(5);
center.add(tf_input);
b_define = new Button("确定");
b_define.setFont(new Font("宋体", Font.PLAIN, 24));
center.add(b_define);
this.add(center, BorderLayout.CENTER);
}
}