游戏规则:
1.系统从1--99随机选出一个数
2.第一个人猜一个数,系统判断 猜大了,猜中了,猜小了
3.若猜中,开始新一轮游戏,反之,再由下一个人猜,直至猜中
游戏开发:
1.界面开发(主要包含按钮与文本框)
文本框:输入数字
按钮:点击后进行猜数
package com.ldy0725;
import javax.swing.*;
import java.awt.*;
public class GameUI {
GameListener gamel=new GameListener();
public void initUI(){
JFrame jf=new JFrame();
jf.setTitle("数字炸弹");
jf.setSize(400,400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
FlowLayout fl=new FlowLayout();
jf.setLayout(fl);
JButton jbu=new JButton("开始游戏");
JTextField jtf=new JTextField(20);
JLabel jla=new JLabel("请输入你要猜的数字:");
jf.add(jla);
jf.add(jtf);
jf.add(jbu);
jf.setVisible(true);
jbu.addActionListener(gamel);
}
public static void main(String[] args) {
GameUI gu=new GameUI();
gu.initUI();
}
}
注:若需要居中显示 jf.setLocationRelativeTo (null); 可由此行代码设置
2.实现按钮监听
动作监听器: ActionListener
1: 创建一个新的类 GameListener
2: 实现 implements ActionListener
3: 将ActionListener 中的方法复制我们自己的类中
public void actionPerformed(ActionEvent e) { }
4:在 GameUI 创建一个对象 GameListener 添加给按钮对象
GameListener gl = new GameListener();
button.addActionListener(gl);
package com.ldy0725;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GameListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("点击了开始游戏");
}
}package com.ldy0725;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GameListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("点击了开始游戏");
}
}
3.逻辑与弹窗
输入数字 点击按钮 : 进行判断 ,判断完成弹出一个窗体,显示提示信息
a.在GameListener类中创建 JTextField jtf2; 用于接收用户输入的文本框的地址
在GameUI中gamel.jtf2=jtf; 实现将文本框的地址传递给监听器
b.输入炸弹数字,计数标识,布尔标识
int num = 0;// 炸弹数字
int count = 0;// 计数标识
boolean flag = false;// 标识炸弹是否生成 true 生成了 false 没有生成
c.创建随机数对象
Random ran = new Random ();
d. 按钮点击 条件判断:
第一次点击,生成一个随机数炸弹
获取文本框中用户输入的数字,进行比较
String sn = jtf2.getText();
System.out.println("用户输入的数字:" + sn);
int n = Integer.parseInt(sn);
if(n<=min|| n>=max){
System.out.println ("输入的数字不在范围内");
msgUI("输入的数字不在范围内,请输入("+min+"-"+max+")之间的数字");
return;// 结束当前方法
}
if(n=num){
System.out.println("猜对了");
msgUI("恭喜你,猜对了 炸弹是"+num+"炸弹已重置,新的游戏开始了");
flag = false;// 结束当前游戏
jtf2.setText ("");// 清空输入框的内容
min = 0;// 重置最小值
max = 100;// 重置最大值
}else if(n<num){
// 猜小了
System.out.println ("猜小了");
msgUI("猜小了");
min=n;// 将当前数字赋值给最小值
}else {
// 猜大了
System.out.println ("猜大了");
msgUI("猜大了");
max=n;// 将当前数字赋值给最大值
}
e.弹窗设置
public void msgUI(String msg) {
// 获取内容
int length = msg.length();
JFrame jf = new JFrame();
jf.setTitle("提示");
jf.setSize(35 * length, 150);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// DISPOSE 销毁窗体(不占用内存) EXIT_ON_CLOSE 退出程序
// HIDE 隐藏窗体(占用内存) DO_NOTHING_ON_CLOSE 什么都不做
jf.setLocationRelativeTo(null);
FlowLayout fl=new FlowLayout();
jf.setLayout(fl);
JLabel msgJla = new JLabel(msg);
Font font = new Font("微软雅黑", Font.BOLD, 30);
msgJla.setFont(font);// 设置字体
jf.add(msgJla);
jf.setVisible(true);
}
}
注:双等号的使用
结果展示: