zoukankan      html  css  js  c++  java
  • 猜数字小游戏的设计

    猜数字小游戏

    (一)游戏规则

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

    (二)需求分析

    用户需求

    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("恭喜您猜对了!
    ")
    						.append("随机数是:"+guessNum+"
    ")
    						.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>学了安卓开发之后,能够把这个在手机上实现,平常可以自己用来玩

  • 相关阅读:
    代码结构
    linux 启动盘制作multisystem
    cmake 各种语法的作用
    leetcode Longest Consecutive Sequence
    leetcode find kth
    leetcode twoSum
    S3pool pytorch
    数学:优化:拉格朗日乘子法
    Fisher判别分析(线性判别分析——LDA)
    数学:优化:牛顿法
  • 原文地址:https://www.cnblogs.com/20159212yx/p/4890673.html
Copyright © 2011-2022 走看看