JAVA猜字游戏

语言及环境:

实现语言JAVA

实验环境:JBuilder2005(英文版)

问题描述:

   利用Javax Swing 开发一个猜字游戏软件,当系统随机生成一个10~20之间的随机数后,系统能够根据用户的输入给出用户的猜测结果(猜中、过大和过小)

初始界面:

生成随机数

三种结果:

过小

过大

猜中

实验目的:

1、提高学员的Java语言编程能力

2、提高学员的Swing组件的使用能力

3、丰富学员的项目经验

4、复习Util包的使用

5、理解事件处理程序的执行机制

 

问题分析:

生成随机数:

软件包 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。java.util.Random此类的实例用于生成伪随机数流。此类使用 48 位的种子。如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证此属性的实现,为类 Random 指定了特定的算法。public int nextInt(int n)返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。nextInt 的常规协定是,伪随机地生成并返回指定范围中的一个 int 值。所有可能的 n int 值的生成概率(大致)相同。

为了能够生成一个10~20之间的随机数,应该先生成一个0~10之间的随机数然后再加10.

2、接收用户的输入

获得jTextFieldText值并转化为数字

3、判断结果

判断猜测次数累计

设立一个计数器timer,每进行一次猜数自动加一,重新获得随机数后清零。

关键代码解析

package game;

 

import java.awt.*;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.*;//导包

 

 

/**

 * <p>Title: 段静迪的猜字游戏程序</p>

 *

 * <p>Description: </p>

 *

 * <p>Copyright: Copyright (c) 2007</p>

 *

 * <p>Company: </p>

 *

 * @author 段静迪

 * @version 1.0

 */

public class GameWindow

    extends JFrame {

  JPanel contentPane;

  JTextField jTextField1 = new JTextField();

  JLabel jLabel1 = new JLabel();

  JButton jButton1 = new JButton();

  JButton jButton2 = new JButton();

  JLabel jLabel2 = new JLabel();

  JLabel jLabel3 = new JLabel();

  Random random =new Random();//生成随机数生成器

  private int Rvalue =0 ;

  private int timer =0;//计数器清零

  public GameWindow() {

    try {

      setDefaultCloseOperation(EXIT_ON_CLOSE);

      jbInit();

    }

    catch (Exception exception) {

      exception.printStackTrace();

    }

  }

 

  /**

   * Component initialization.

   *

   * @throws java.lang.Exception

   */

  private void jbInit() throws Exception {

    contentPane = (JPanel) getContentPane();

    contentPane.setLayout(null);

    setSize(new Dimension(515, 365));

    setTitle("猜字游戏程序");

    jTextField1.setFont(new java.awt.Font("Dialog", Font.PLAIN, 18));

    jTextField1.setText("");

    jTextField1.setBounds(new Rectangle(235, 77, 147, 43));

    jLabel1.setText("猜测结果提示:");

    jLabel1.setBounds(new Rectangle(23, 135, 127, 42));

    jButton1.setBounds(new Rectangle(113, 219, 128, 50));

    jButton1.setText("生成随机数");

    jButton1.addActionListener(new GameWindow_jButton1_actionAdapter(this));

    jButton2.setBounds(new Rectangle(265, 219, 83, 50));

    jButton2.setText("猜数");

    jButton2.addActionListener(new GameWindow_jButton2_actionAdapter(this));

    jLabel2.setFont(new java.awt.Font("宋体", Font.PLAIN, 18));

    jLabel2.setText("输入一个10~20之间的数");

    jLabel2.setBounds(new Rectangle(26, 72, 207, 59));

    jLabel3.setFont(new java.awt.Font("宋体", Font.PLAIN, 18));

    jLabel3.setText("还没有生成随机数");

    jLabel3.setBounds(new Rectangle(181, 138, 150, 42));

    contentPane.add(jButton1);

    contentPane.add(jButton2);

    contentPane.add(jLabel3);

    contentPane.add(jLabel2);

    contentPane.add(jLabel1);

    contentPane.add(jTextField1);

  }

 

  public void jButton1_actionPerformed(ActionEvent e) {

    Rvalue = 10+ random.nextInt(11);//生成一个10~20之间的随机数,并且保存在Rvalue

    jLabel3.setText("随机数已生成");//提示用户

   

 

  }

 

  public void jButton2_actionPerformed(ActionEvent e) {

    //判断猜测结果

    if(Integer.valueOf(jTextField1.getText())==Rvalue )

    {

      jLabel3.setText("猜中了");

      return;

    }

    else if( Integer.valueOf(jTextField1.getText())<=Rvalue )

    {

      jLabel3.setText("猜小了");

      return;

     

    }

    else

    {

      jLabel3.setText("猜大了");

      return;

    }   

  }

}

 

class GameWindow_jButton2_actionAdapter

    implements ActionListener {

  private GameWindow adaptee;

  GameWindow_jButton2_actionAdapter(GameWindow adaptee) {

    this.adaptee = adaptee;

  }

 

  public void actionPerformed(ActionEvent e) {

    adaptee.jButton2_actionPerformed(e);

  }

}

 

class GameWindow_jButton1_actionAdapter

    implements ActionListener {

  private GameWindow adaptee;

  GameWindow_jButton1_actionAdapter(GameWindow adaptee) {

    this.adaptee = adaptee;

  }

 

  public void actionPerformed(ActionEvent e) {

 

    adaptee.jButton1_actionPerformed(e);

  }

}

存在问题及解决

在获得用户输入的猜测数时没有进行异常处理,可以异常处理语句解决。

问题扩充

解决猜测次数的累计问题

恰当的控制组件的属性

 

posted on 2007-11-15 20:13  段静迪  阅读(1292)  评论(0编辑  收藏  举报