猜数字小游戏的设计


猜数字小游戏

(一)游戏规则

简单的随机数匹配,如果输入的数据恰好与随机数匹配,显示正确,否则,继续猜数字。

(二)需求分析

###用户需求
1、有输入框
2、能看到自己猜的数字是否正确,或者是偏高还是偏低
3、显示猜测的次数
4、猜对了可以结束游戏
###系统需求
1、输入文本框,显示输入的数字
2、输出显示文本框,显示猜的结果
3、控制按钮,控制开始和比较以及结束

(三)补充知识

1、windows builder控件的安装和使用(http://blog.csdn.net/jason0539/article/details/21219043)
2、JButton用法参考(http://www.apihome.cn/api/java/JButton.html)

(四)设计

1、利用windows build构建布局,加入三个控件
2、主体变为button按键控制判断部分

(五)代码

`import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JEditorPane;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;

import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JLabel;

public class game extends JFrame {

private JPanel contentPane;//整个窗口对象
private JTextField textField;//文本输入框,获取数字
private JLabel lblNewLabel;//标签,显示文本
private JButton btnNewButton;
//按钮,功能1获取随机数,
//功能2把文本框获得的数字和生成的随机数作比较

private Random rand = new Random();//生成随机数的工具对象
private int count;//统计猜测的次数
private int randomNum;//生成的随机数
private int guessNum;//玩家输入的数字
private boolean keepGuess = false;
//是否进行猜测,是就会从文本框获取数字与随机数作比较,否则生成一个新的随机数
//按钮点击事件的功能


/**
 * Launch the application.
 */
public static void main(String[] args) {
    
    //程序入口
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                game frame = new game();//获得一个窗口
                frame.setVisible(true);//显示窗口
                //init();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public game() {         //生成窗口
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口设置
    setBounds(100, 100, 450, 300);//窗口设置
    contentPane = new JPanel();   //新建一个布局容器
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));//布局容器设置
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);//设置窗口的显示布局
    
    textField = new JTextField();
    contentPane.add(textField, BorderLayout.NORTH);
    textField.setColumns(10);
    //文本框创建,设置和添加到布局中
    
    lblNewLabel = new JLabel("猜猜看");
    lblNewLabel.setEnabled(true);
    contentPane.add(lblNewLabel, BorderLayout.CENTER);
    //标签创建,设置和添加到布局中
    
    btnNewButton = new JButton("New button");//创建一个Button按钮
    btnNewButton.addActionListener(new ActionListener() {    //按钮的点击事件
        
        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            
        //  System.out.println(strGuess);
        //  lblNewLabel.setText(strGuess);
            if(keepGuess)    //如果是继续猜数字
            {
                String strGuess = "";
                try {
                    //异常捕获,如果输入的不是数字则退出请提示信息
                    strGuess = textField.getText();
                    guessNum = Integer.parseInt(strGuess);
                    //获取文本框字符串,并转换成数字
                } catch (Exception e) {
                    // TODO: handle exception
                    lblNewLabel.setText("请正确输入一个0-100的数字!!!");
                    return;
                }
                
                ++count;//猜测次数加1
                if(guessNum <0 || guessNum>100)
                {
                    lblNewLabel.setText("请正确输入一个0-100的数字!!!");
                    return;
                }
                if(guessNum == randomNum)    //如果猜对了
                {
                    StringBuffer str = new StringBuffer();
                    str.append("恭喜您猜对了!\n")
                        .append("随机数是:"+guessNum+"\n")
                        .append("猜的次数为"+count+"次");
                    
                    lblNewLabel.setText(str.toString());   //标签显示成功的信息
                    
                    keepGuess = false;   //状态转换,下次点击事件会生成一个随机数
                    
                    btnNewButton.setText("获取一个随机数");
                    
                }else if(guessNum > randomNum)
                {    //猜测数字大于随机数
                    lblNewLabel.setText("您猜的数字大于随机数,请继续猜!"+"猜的次数为"+count+"次");
                }else
                {    //猜测数字小于随机数
                    lblNewLabel.setText("您猜的数字小于随机数,请继续猜!"+"猜的次数为"+count+"次");
                }
                
            }
            else
            {
                randomNum = rand.nextInt(101);   //生成一个0-100的随机数
            //  System.out.println("randomNum   "+randomNum);
                lblNewLabel.setText("已经生成随机数,请输入数字并点击按钮猜数字");
                //更改标签信息
                keepGuess = true;
                //状态转换,下次点击事件会获取文本框数字与随机数作比较
                btnNewButton.setText("猜猜看");
                count = 0;   //猜测次数归0
            }
        }
    });
    contentPane.add(btnNewButton, BorderLayout.SOUTH);
    init();        //布局的初始化显示
}
private void init()   //布局的初始化显示
{
    keepGuess = false;   //游戏开始要先获得一个随机数
    lblNewLabel.setText("猜数字游戏,请输入数字0-100");
    btnNewButton.setText("开始");
}

}`

(六)测试

单元测试还在做,但是在运行过程中发现输入负数显示是猜小了,所以把判断条件进行了修改

(七)总结

1、选择实现的游戏很简单,没有涉及到重构方面的内容
2、基本实现了游戏需求,边界测试完成
3、在结对编程的协调和合作方面还有很大问题
4、总体来说,编程水平还停留在Helloworld的阶段
5、程序还有很多优化改进的地方,目前想到的有以下几点
1>界面优化,现在的界面很不美观
2>用户需求其实是不完善的,目前只是两个人进行简单的测试
3>可以加入猜错了有什么惩罚,猜对了奖励,以及多个用户同时输入,看谁最接近
4>学了安卓开发之后,能够把这个在手机上实现,平常可以自己用来玩

优质内容筛选与推荐>>
1、MTracer中文破解版下载 MTracer2.1
2、K8S API对象
3、.net 4.0发布后不能正常显示图片问题,将iis应用程序池设置成4.0版本,报告错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
4、WPF save listbox config
5、coolbugs的留言


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号