猜数字小游戏的设计
2015-10-18 23:21
369 查看
猜数字小游戏
(一)游戏规则
简单的随机数匹配,如果输入的数据恰好与随机数匹配,显示正确,否则,继续猜数字。(二)需求分析
###用户需求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>学了安卓开发之后,能够把这个在手机上实现,平常可以自己用来玩
相关文章推荐
- 剑指Offer--二叉树中和为某一值的路径
- ionic tab按钮变颜色的例子
- 用于视觉识别的卷积神经网络
- iOS 多个view添加手势, 识别是哪个view的事件
- JAVA 集合框架
- 第一周前段学习
- Wormholes(bellman-Ford)
- 关于调研方向的思考-Oct.19.2015
- Android Listview中Button按钮点击事件冲突解决办法
- bzoj 1574: [Usaco2009 Jan]地震损坏Damage
- Android Listview中Button按钮点击事件冲突解决办法
- 【技巧】只利用 Visual Stdio 自带的工具这么找父类?
- Git GUI的使用
- [note]特殊方法
- 小米运动&小米手环体验报告
- git rebase使用(部分)
- 2.9.2 设置时钟中断
- 机器学习好的论坛
- 黑马程序员——Java堆栈区别
- myisam、innodb物理结构