收藏 分销(赏)

猜数字小游戏JAVA程序报告.doc

上传人:仙人****88 文档编号:9399018 上传时间:2025-03-24 格式:DOC 页数:18 大小:195.04KB 下载积分:10 金币
下载 相关 举报
猜数字小游戏JAVA程序报告.doc_第1页
第1页 / 共18页
猜数字小游戏JAVA程序报告.doc_第2页
第2页 / 共18页


点击查看更多>>
资源描述
JAVA程序设计报告 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 . 系统总体设计 开始游戏 注册 登陆 开始界面 记录时间次数 产生随机数 重新开始 显示答案 2 . 功能模块设计 计时模块 输出输入模块 判断模块 模块组成 登陆模块 3 . 流程图 系统开始计时 由用户输入一个数guess 猜小 Y 产生随机数number 系统结束计时 系统统计猜数次数 及对成绩的评价 结 束 开 始 G=N G<N G>N 猜大 五、 功能设计 1 . 随机数的产生模块 我们可以借助Java API提供的Random类来产生一个随机数。 首先在main函数中加入以下代码: 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 JAVA; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public 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 stub for (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 JAVA; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Random; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.WindowConstants; import java.awt.FlowLayout; public class GuessNum extends javax.swing.JFrame { 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) { System.out.println("欢迎来到猜数字游戏"); new GuessNum(); } } 18
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服