### 实现猜数字游戏

在一些娱乐节目中，经常会有猜数字游戏。就是主持人手里拿有一个数字牌（这个牌上标识的可能是商品的价格，也可能是选手演唱歌曲的得分），选手在规定的时间内猜这个数，每当选手说出一个数字，主持人都会提示他，是高了，还是低了，当选手猜对了，会有奖励的。下面我们就通过 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 显示答案