在一些娱乐节目中,经常会有猜数字游戏。就是主持人手里拿有一个数字牌(这个牌上标识的可能是商品的价格,也可能是选手演唱歌曲的得分),选手在规定的时间内猜这个数,每当选手说出一个数字,主持人都会提示他,是高了,还是低了,当选手猜对了,会有奖励的。下面我们就通过Java实现一个类似的猜数字游戏。在该游戏中,首先生成一个随机的幸运数字,然后由用户猜这个数字是什么,当用户输入所猜的数字并单击“确定”按钮时,系统将给出提示大了或小了的提示,如果用户猜到了幸运数字,将显示该幸运数字。同时,游戏还需要提供显示答案和重新。
程序的运行结果如下。
如果输入数字50,将给予提示“小了,继续努力!”,如图1所示。
图1 猜小了时显示的效果
如果输入数字80,将给予提示“大了,继续努力!”,如图2所示 。
图2 猜大了时显示的效果
如果输入数字78,将给予提示“恭喜,猜对了!”,如图3所示 。
图3 猜对了时显示的效果
位置:应用/源码管理/类库/BackgroundPanel.jar
位置:应用/源码管理/类库/IntJTextField.jar
位置:应用/源码管理/类库/CreateRandom.jar
在实现猜数字游戏时,首先需要调用已有类CreateRandom提供的createRandom()方法生成10到100之间的幸运数字,然后通过if语句判断输入数字与幸运数字的大小,并给出相应的提示,最后还需要提供显示正确答案和再来一次的功能。其中,重点需要介绍的就是,生成的幸运数字是int型,而在显示到JLabel上时,需要String型的数据。这时,就需要将int型的数据转换为String型。这可以通过String类的valueOf()方法实现。valueOf()方法的原型如下:
public static String valueOf(int i)
i:int型的整数,用于指定要转换为字符串的数字。
返回值:转换后的字符串。
下面我们来介绍猜数字游戏的实现步骤。
(1)创建一个Java项目,名称为“实现猜数字游戏”。
(2)创建一个JFrame窗体,名称为MainFrame,并将其保存在com.wgh包中。
(3)在项目的根目录中创建一个名称为lib的文件,并将本实例所需的已有类BackgroundPanel.jar、IntJTextField.jar和CreateRandom.jar复制到lib文件夹中。
(4)依次将三个Jar包添加到构建路径中。添加后的包资源管理器结构如图4所示。
图4 将所需的Jar包全部配置到构建路径中的效果
(5)在设计视图中,打开程序的主窗体MainFrame,并设置窗体为空布局,以及窗体的名称,然后在左侧的工具面板中,选择按钮,在弹出的Open type对话框中,输入com.lzw.BackgroundPanel后,单击“确定”按钮,将当前组件放置到窗体中,并调整窗体和组件的大小。
(6)在src节点上添加一个名称为images的文件夹,并将背景图片复制到这个文件夹中。
(7)选中刚刚添加的BackgroundPanel组件,在左侧的属性面板中找到image属性,单击“…”按钮,将弹出选择图片对话框,这里选择background.jpg,如图5所示,单击“确定”按钮。
图5 选择图片对话框
(8)向该窗体中添加文本框、标签、分隔符和按钮控件,并设置主要属性,如表1所示。
表1 程序主窗体中控件的属性设置
控件名称 |
控件属性 |
关联变量 |
|
text:■ font:(宋体, B, 26) foreground:128,0,0 |
luckyNumberText |
|
|
numberText |
|
text:转换后: |
resultLable |
|
text:确定 |
button |
|
text:告诉我答案 |
button_1 |
|
text:再来一次 |
button_2 |
(9)转到代码视图,在public class MainFrame extends JFrame {语句的下方定义一个成员变量luckyNumber,用于保存幸运数字。关键代码如下:
public class MainFrame extends JFrame { //系统生成的代码
public int luckyNumber = 0; //定义成员变量的代码
(10)在窗体的构造方法中,实例化CreateRandom的对象,并调用该对象的createRandom()方法获取幸运数字赋值给成员变量luckyNumber。
CreateRandom cRandom = new CreateRandom(); // 创建并实例化CreateRandom的对象
luckyNumber = cRandom.createRandom(); // 获取幸运数字
说明:成员变量在整个窗体范围内有效。
(11)在“确定”按钮上,双击鼠标左键,进入到代码视图,这时,Eclipse将自动为该按钮添加单击事件,在该事件的actionPerforment()方法中编写以下代码,判断输入的数字是否等于幸运数字,并显示相应的提示。
int inNumber = numberText.getInt(); // 获取输入的数字
if (inNumber > luckyNumber) { // 当大于幸运数字时
resultLable.setText("大了,继续努力!");
} else if (inNumber < luckyNumber) { // 当小于幸运数字时
resultLable.setText("小了,继续努力!");
} else { // 与幸运数字相同
resultLable.setText("恭喜,猜对了!");
luckyNumberText.setText(String.valueOf(luckyNumber)); // 显示幸运数字
}
(12)在“告诉我答案”按钮上,双击鼠标左键,进入到代码视图,这时,Eclipse将自动为该按钮添加单击事件,在该事件的actionPerforment()方法中编写以下代码,在窗体中显示幸运数字。
luckyNumberText.setText(String.valueOf(luckyNumber)); // 显示幸运数字
(13)在“再来一次”按钮上,双击鼠标左键,进入到代码视图,这时,Eclipse将自动为该按钮添加单击事件,在该事件的actionPerforment()方法中编写以下代码,重新生成幸运数字、并重置相应内容。
CreateRandom cRandom = new CreateRandom(); // 创建并实例化CreateRandom的对象
luckyNumber = cRandom.createRandom(); // 获取幸运数字
luckyNumberText.setText("■"); // 重置幸运数字
resultLable.setText(""); // 清空显示结果标签
numberText.setText(""); // 清空数字输入框的内容
(14)保存该文件,单击按钮,运行该程序,将显示如图6所示的运行结果。
图6 默认的运行结果
输入所猜数字,单击“确定”按钮,将显示如图1、图2和图3所示的运行结果;单击“告诉我答案”按钮,将直接显示出幸运数字,如图7所示;单击“再来一次”将重新开始游戏。
图7 显示答案