JAVA程序设计报告——猜数字小游戏目录一、猜数字小游戏简介 (4)二、用户需求分析 (4)三、问题描述 (4)1.课程设计的任务2.课程设计的要求四、模块设计 (5)1.课程设计的要求2.功能模块设计3.流程图五、功能设计 (7)1 . 随机数的产生模块2 . 输入判断模块3 . 记录猜测次数模块4.计时模块5.输入输出模块6.成绩判断模块六、异常处理 (9)七、调试分析 (10)八、不足之处 (11)九、总结 (12)十、程序附页 (13)摘要猜数字是一款非常经典的脑力游戏,游戏规则简单,是消磨时间、锻炼脑力的好选择。
通过选择猜数字游戏这个题目,可以让我掌握Java中的包和类,并且可以灵活的使用my eclipse软件。
同时更加深入的了解字符界面的编程过程。
使我更熟练的掌握Java程序框架的搭建和类的创建格式。
在分析阶段,要进行面向对象的需求分析、系统设计、画出相应的需求分析图、系统设计模型图,这些工作更能锻炼我的逻辑思维,更能培养我思考的全面性。
让我学会了多角度思考问题,对我以后的编程奠定了更好的基础。
一、猜数字小游戏简介系统随机产生任意一个1—100的自然数,玩家输入数字,若输入的数字比随机生成数小,系统将提示,数字太小请您重新输入;如果输入的数字比随机生成数大,系统将提示,数字太大请您重新输入;若输入的字符不是合法字符,系统将提示,您输入的数字不合法,请从新输入,游戏开始时,系统自动记录您猜数字的时间和次数,结束后显示游戏共花费的次数和时间及对游戏结果的评价。
二、用户需求分析设计一个猜数字游戏程序,要求具体如下特性:a.输入任意一个数字。
数字的要求是1—100的自然数即可。
b.系统对您输入的数字进行判断。
如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。
如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。
系统将提示您,数字太大请您重新输入。
如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。
c. 游戏开始时,系统自动记录您猜数字的时间,结束后显示游戏共花费的时间。
d. 每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。
e. 在游戏结束时,可以选择关闭游戏,或者再来一局f. 游戏结束前可选择直接显示答案三、问题描述1.课程设计的任务:根据所选题目,完成课程设计的分析、设计和编码,写出课程设计报告。
(1)掌握Java的语言规范,面向对象的核心概念和特性;(2)掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等;(3)掌握Java应用软件的开发环境和开发过程;(4)掌握面向对象的思想和程序设计方法。
2.课程设计的要求:设计一个猜数字游戏程序,该游戏可以由程序随机产生整数,玩游戏者通过由用户输入数字来匹配上面所产生的数字。
用户随机输入数字,当与计算机产生的随机数相符合时,计算机将提醒用户,游戏成功的信息,当有偏差时,将会提醒偏差,如偏大或者是偏小。
四、模块设计1 . Array2 .3 .五、1 .随机数。
Random random = new Random();number = random.nextInt(100); // 产生一个1-100间的随机数2 . 输入判断模块在游戏界面中输入不合法try {guess = Integer.parseInt(jTextField1.getText()); //玩家输入获取}catch (Exception e) {JOptionPane.showMessageDialog(null, "请输入一个1-100之间的整数"); //显示对话框,输入不合法jTextField1.setText(""); //清空文本框内容jTextField1.requestFocus();return; }3 . 记录猜测次数模块// 记录玩家猜测的次数counter = 0;// 计数器增加一counter++;4 . 计时模块计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。
long startTime = System.currentTimeMillis();long endTime = System.currentTimeMillis();5 . 输入输出模块// 对玩家的输入进行判断。
if (guess > number) {JOptionPane.showMessageDialog(null, "o(≧v≦)o猜大了");jTextField1.setText("");jTextField1.requestFocus();return;}if (guess < number) {JOptionPane.showMessageDialog(null, "o(≧v≦)o太小啦");jTextField1.setText("");jTextField1.requestFocus();return;}if (guess == number) {endTime = System.currentTimeMillis();6 . 成绩判断模块// 判断成绩。
switch (counter) {case 1:JOptionPane.showMessageDialog(null, "O(∩_∩)O太给力了吧");break;case 2:case 3:JOptionPane.showMessageDialog(null,"OH MY GOD!!!好腻害");break;case 4:case 5:case 6:JOptionPane.showMessageDialog(null,"O(∩_∩)O猜对,很不错哦!");break;case 7:case 8:case 9:case 10:JOptionPane.showMessageDialog(null,"(+﹏+)有点慢,还要多练习");break;default:JOptionPane.showMessageDialog(null, "(+﹏+)oh! NO,太慢啦,");break;}六、异常处理我们在运行程序时往往会出现许多错误,而Java语言提供了异常(Exception)处理机制帮助程序员发现并处理异常。
所谓异常,就是在程序执行过程中能干扰程序正常流程的事件。
导致异常的原因很多,比如文件找不到、数组越界、除以零等。
当异常出现时,一个异常对象将被自动生成并传递给Java“运行时环境”,如果“运行时环境”找不到异常句柄,Java程序便会自行中断。
try {statement(s);} catch (exceptiontype1 name) {statement(s);} catch (exceptiontype2 name) {statement(s);} finally {statement(s);}try语句括起来的语句可能抛出异常。
try语句至少要搭配一个catch语句或finally语句,不能单独使用,我设计的猜数字游戏需要从控制台获取玩家输入的数字,有多个异常处理try {setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);getContentPane().setLayout(null);} catch (Exception e) {e.printStackTrace();}try {// 获取玩家的输入guess = Integer.parseInt(jTextField1.getText());} catch (Exception e)七、调试分析八、不足之处本小游戏还未建立游戏记录部分,无法记录玩家游戏成绩记录和建立游戏排行榜在界面设计方面还较为简单,游戏还有很多可修改和增加难度的地方总结经过这几天努力终于完成了这份课设,虽然在操作的过程中我都遇到了许多的困难,但是却使我得到了许多的意外收获。
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
在写代码的过程中我们也遇到了一些的困难,就是对一些有关Java 语言的不理解,我便又到课本中去查找。
一个项目的成败关键不全在于技术。
要想在一个愉快的氛围里边以轻松的心情来完成紧张的工作,严谨的态度和工作的热情都是必不可少的。
以前上课时有许多的问题并没有真正的认识到,但通过这次试验的制作,使我掌握了许多更重要的知识点。
程序附页package JA V A;import jpublic class Login extends JFrame {ArrayList<String> names = new ArrayList<String>();ArrayList<String> pwd = new ArrayList<String>();private static final long serialVersionUID = 1L;public Login() {this.setLocation(100, 100);this.setSize(400, 180);this.setTitle("欢迎进入有趣的猜数字小游戏");loginWindow();setLocationRelativeTo(null); //窗口居中显示this.setVisible(true);}public void loginWindow() {JLabel name = new JLabel("请输入玩家姓名:");JLabel password = new JLabel("请输入登陆密码:");final JTextField tfName = new JTextField(20);final JPasswordField tfPassword = new JPasswordField(20);JButton ok = new JButton("注册");JButton cancel = new JButton("登录");JPanel pm = new JPanel();JPanel p1 = new JPanel();JPanel p2 = new JPanel();JPanel p3 = new JPanel();p1.add(name);p1.add(tfName);p2.add(password);p2.add(tfPassword);ok.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {names.add(tfName.getText());pwd.add(tfPassword.getText());JOptionPane.showMessageDialog(null, "注册成功");tfName.setText("");tfPassword.setText("");}});cancel.addActionListener(new ActionListener() {//@SuppressWarnings("deprecation")//@Override@SuppressWarnings("deprecation")public void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubfor (int i = 0; i < names.size(); i++) {if (names.get(i).equals(tfName.getText())) {if (pwd.get(i).equals(tfPassword.getText())) {JOptionPane.showMessageDialog(null, "登陆成功");setVisible(false);//隐藏原界面new GuessNum();//进入主界面}else {JOptionPane.showMessageDialog(null, "用户名或密码有误");}}}}});p3.add(ok);p3.add(cancel);pm.add(p1);pm.add(p2);pm.add(p3);this.add(pm);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {new Login();}}package JA V A;private static final long serialVersionUID = 1L;private JLabel jLabel1;private JTextField jTextField1;private JButton jButton1;private JButton jButton2;private JButton jButton3;private int number = 0;private int counter = 0;long startTime = System.currentTimeMillis();long endTime; //计算时间public GuessNum() {super ("猜数字小游戏");initChuangkou();Random random = new Random();number = random.nextInt(100); //产生一个1——100的随机数}private void initChuangkou() {try {setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//窗口关闭时销毁窗口getContentPane().setLayout(null); //设置窗口布局为绝对布局JFrame frame = new JFrame("Test Buttons");frame.setLayout(new FlowLayout());jLabel1 = new JLabel();getContentPane().add(jLabel1);jLabel1.setText("<html>★欢迎进入有趣的猜数字游戏★请输入1~100中的任意一个数:</html>");jLabel1.setBounds(75,20, 200, 50);jTextField1 = new JTextField();getContentPane().add(jTextField1);jTextField1.setBounds(110, 100, 112, 28);jTextField1.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent evt) {jTextField1KeyPressed(evt);}});jButton1 = new JButton();getContentPane().add(jButton1);jButton1.setText("确定");jButton1.setBounds(120, 160, 100, 25);jButton1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {jButton1ActionPerformed(evt); // 按钮被点击时执行该方法}});jButton2= new JButton();getContentPane().add(jButton2);jButton2.setText("显示答案");jButton2.setBounds(120, 200, 100, 25);jButton2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt2) {jButton2ActionPerformed(evt2); // 按钮被点击时执行该方法}});jButton3= new JButton();getContentPane().add(jButton3);jButton3.setText("再来一次");jButton3.setBounds(120,240,100,25);jButton3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt3) {jButton3ActionPerformed(evt3); // 按钮被点击时执行该方法}});pack();this.setSize(340, 400); //窗口大小setLocationRelativeTo(null); //设置窗口在显示器居中显示}catch (Exception e) {e.printStackTrace();}setVisible(true);}private void jButton2ActionPerformed(ActionEvent evt2) {JOptionPane.showMessageDialog(null, "答案是"+number); //直接显示答案setVisible(false); //隐藏原界面return;}private void jButton3ActionPerformed(ActionEvent evt3){setVisible(false);new GuessNum();}private void jButton1ActionPerformed(ActionEvent evt) {int guess = 0;counter++; //计数器加一try {guess = Integer.parseInt(jTextField1.getText()); //玩家输入获取}catch (Exception e) {JOptionPane.showMessageDialog(null, "请输入一个1-100之间的整数"); //显示对话框,输入不合法jTextField1.setText(""); //清空文本框内容jTextField1.requestFocus();return;}if (guess > number) {JOptionPane.showMessageDialog(null, "o(≧v≦)o猜大了");jTextField1.setText("");jTextField1.requestFocus();return;}if (guess < number) {JOptionPane.showMessageDialog(null, "o(≧v≦)o太小啦");jTextField1.setText("");jTextField1.requestFocus();return;}if (guess == number) {endTime = System.currentTimeMillis();JOptionPane.showMessageDialog(null,"您总共猜了" + counter + "次共花了"+ (endTime - startTime) / 1000 + "秒的时间答对正确答案!"); //成绩判断switch (counter) {case 1:JOptionPane.showMessageDialog(null, "O(∩_∩)O太给力了吧");break;case 2:case 3:JOptionPane.showMessageDialog(null,"OH MY GOD!!!好腻害");break;case 4:case 5:case 6:JOptionPane.showMessageDialog(null,"O(∩_∩)O这么快就猜对,很不错哦!");break;case 7:case 8:case 9:case 10:JOptionPane.showMessageDialog(null,"(+﹏+)有点慢,还要多练习");break;default:JOptionPane.showMessageDialog(null, "(+﹏+)oh! NO,太慢啦,");break;}}jTextField1.setText(""); //清空文本框内容jTextField1.requestFocus(); //文本框获取输入焦点setVisible(false); //隐藏原界面}private void jTextField1KeyPressed(KeyEvent evt) {if (evt.getKeyCode() == KeyEvent.VK_ENTER) {jButton1.doClick(); // 文本框按回车键执行“确定”按钮的事件}}public static void main(String[] args) {new GuessNum();}}。