个人在经过长久以来(约等于4小时)的奋战,终于实现了一个上课老师提问并抽奖的小程序。希望这个程序变得非常非常实用

课程的理解:在我的项目开始之前,先学习了一下UML项目类图的画法,和类与类之间的关系。类图的3个基本组件:类名、属性、方法。其中类有6种关系:泛化,实现,依赖,关联,聚合,组合。类进行封装之后才好和其他的类发生关系,所以java的封装,继承,多态必不可少。在一个java项目开始之前。我们必须要使用类图对要干的事情进行需求分析,这样在项目代码编写和具体实现过程中才不会自乱阵脚。

设计实现:

本应用针对如下的要求,为满足老师的使用需求,我提出如下的解决方案

  1. 考虑实现一个老师随机选学生回答问题的小程序,可随机选取学生以及奖口
  2. 老师很花心,需要考虑两种以上界面呈现随机的结果。比如一种用图形,一种用控制台或一种是web。
  3. 注意实现的类的相互关系,怎样设计类的交互更合理。
  4. 扩展:这个模式是不是可以有很多游戏可以实现呢?想想还可以做什么?如何在现在设计的结构基础之上,更容易扩展出其他游戏。举个例,实现并说明你所设计的结构的优越性。

关系类图:

其中筛子依赖筛盅,而筛盅的GUI调用生成新筛盅,筛盅依赖于GUI界面。sifter类用于生成筛子对象,sifterCUP将生成一个筛盅类,用于模拟生成的筛子对象放入一个盅内并摇筛子获得筛子值的类的过程。而GUI则是为了发布一个可视化的界面,方便老师上课使用。其中用到了GUI可视化界面和控制台两种交互方式,其中摇筛子和随机获得奖品的代码,可用于各种通过随机事件获得结果的小游戏或软件之上。图片和代码简单易改,容易阅读。

代码说明:

sifter类用于生成筛子对象

 1 import java.util.*;
 2
 3  public class Sifter{
 4       public int value = 0;
 5
 6      public static void getValue(Sifter S){
 7           S.value = (int)(1+Math.random()*6);
 8      }
 9  }
10  

sifterCUP将生成一个筛盅类,用于模拟生成的筛子对象放入一个盅内并摇筛子获得筛子值的类的过程。可通过其他类调用生成i个数量的筛子数组,并同时获得筛子的value值

 1 import java.util.Scanner;
 2
 3 public class SifterCup {
 4     int amount = 0;
 5     int sum = 0;
 6
 7
 8     public void howMany(){
 9
10         System.out.println("请输入想要使用筛子的数量:");
11         Scanner sc = new Scanner(System.in);
12         int amount = sc.nextInt();
13         Sifter[] sifter = new Sifter[amount];
14         int[] arr = new int[2];
15
16         for(int i = 0; i < amount; i = i+1){
17             sifter[i] = new Sifter();
18             sifter[i].getValue(sifter[i]);
19             System.out.println(sifter[i].value);
20             sum = sum + sifter[i].value;
21         }
22         System.out.println("最终您roll出的点数为:" + sum);
23     }
24
25 }

而GUI则是为了发布一个可视化的界面,方便老师上课使用。

  1 import java.awt.EventQueue;
  2 import java.awt.Image;
  3
  4 import javax.swing.JFrame;
  5 import javax.swing.JPanel;
  6 import java.awt.BorderLayout;
  7 import javax.swing.JButton;
  8 import java.awt.event.ActionListener;
  9 import java.util.Scanner;
 10 import java.awt.event.ActionEvent;
 11 import javax.swing.JTextField;
 12 import javax.swing.JEditorPane;
 13 import java.awt.Canvas;
 14 import javax.swing.JLabel;
 15 import javax.swing.ImageIcon;
 16
 17 public class SifterGUI {
 18
 19     private JFrame frame;
 20
 21     /**
 22      * Launch the application.
 23      */
 24     public static void main(String[] args) {
 25         EventQueue.invokeLater(new Runnable() {
 26             public void run() {
 27                 try {
 28                     SifterGUI window = new SifterGUI();
 29                     window.frame.setVisible(true);
 30                 } catch (Exception e) {
 31                     e.printStackTrace();
 32                 }
 33             }
 34         });
 35     }
 36
 37
 38     /**
 39      * Create the application.
 40      */
 41     public SifterGUI() {
 42         initialize();
 43     }
 44
 45     /**
 46      * Initialize the contents of the frame.*/
 47     private void initialize() {
 48        Sifter psifter = new Sifter(); 49         Sifter asifter = new Sifter(); 50         frame = new JFrame(); 51         frame.setTitle("\u5E78\u8FD0\u5973\u751F\u8F6F\u4EF6"); 52         frame.setResizable(false);
 53         frame.setBounds(100, 100, 450, 300); 54         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 55         ImageIcon[] image = new ImageIcon[13];
 56         image[0] = new ImageIcon("D:\\Users\\qq\\Desktop\\0.gif");
 57         image[1] = new ImageIcon("D:\\Users\\qq\\Desktop\\1.png");
 58         image[2] = new ImageIcon("D:\\Users\\qq\\Desktop\\2.png");
 59         image[3] = new ImageIcon("D:\\Users\\qq\\Desktop\\3.png");
 60         image[4] = new ImageIcon("D:\\Users\\qq\\Desktop\\4.png");
 61         image[5] = new ImageIcon("D:\\Users\\qq\\Desktop\\5.png");
 62         image[6] = new ImageIcon("D:\\Users\\qq\\Desktop\\6.png");
 63         image[7] = new ImageIcon("D:\\Users\\qq\\Desktop\\7.jpg");
 64         image[8] = new ImageIcon("D:\\Users\\qq\\Desktop\\8.jpg");
 65         image[9] = new ImageIcon("D:\\Users\\qq\\Desktop\\9.jpg");
 66         image[10] = new ImageIcon("D:\\Users\\qq\\Desktop\\10.jpg");
 67         image[11] = new ImageIcon("D:\\Users\\qq\\Desktop\\11.jpg");
 68         image[12] = new ImageIcon("D:\\Users\\qq\\Desktop\\12.jpg");
 69
 70         JPanel panel = new JPanel();
 71         frame.getContentPane().add(panel, BorderLayout.CENTER);
 72         panel.setLayout(null);
 73
 74         JLabel[] Jsifter = new JLabel[2];
 75
 76         Jsifter[0] = new JLabel(" ");
 77         Jsifter[0].setIcon(new ImageIcon("D:\\Users\\qq\\Desktop\\0.gif"));
 78         Jsifter[0].setBounds(68, 104, 117, 111);
 79         panel.add(Jsifter[0]);
 80
 81         Jsifter[1] = new JLabel(" ");
 82         Jsifter[1].setIcon(new ImageIcon("D:\\Users\\qq\\Desktop\\0.gif"));
 83         Jsifter[1].setBounds(257, 104, 117, 111);
 84         panel.add(Jsifter[1]);
 85
 86         JLabel pLabel = new JLabel(" ");
 87         pLabel.setVisible(false);
 88         pLabel.setBounds(189, 69, 255, 128);
 89         panel.add(pLabel);
 90
 91         JButton usebutton = new JButton("\u4F7F\u7528\u9AB0\u5B50"); //抽取一名学生
 92         usebutton.addActionListener(new ActionListener() {
 93             public void actionPerformed(ActionEvent arg0) {
 94                 SifterCup cup1 = new SifterCup();
 95                 Sifter[] sifter = new Sifter[2];
 96                 int sum = 0;
 97
 98                 for(int i= 0;i < 2;i++){
 99                     sifter[i] = new Sifter();
100                     sifter[i].getValue(sifter[i]);
101                     System.out.println(sifter[i].value);
102                     sum = sum + sifter[i].value;
103
104                     switch(sifter[i].value){
105                     case(1):Jsifter[i].setIcon(image[1]);break;
106                     case(2):Jsifter[i].setIcon(image[2]);break;
107                     case(3):Jsifter[i].setIcon(image[3]);break;
108                     case(4):Jsifter[i].setIcon(image[4]);break;
109                     case(5):Jsifter[i].setIcon(image[5]);break;
110                     case(6):Jsifter[i].setIcon(image[6]);break;
111                     }
112                 }
113                 System.out.println("有请: " + sum + " 号同学上台回答问题");
114             }
115         });
116         usebutton.setBounds(18, 225, 93, 23);
117         panel.add(usebutton);
118
119         JButton retbutton = new JButton("\u91CD\u7F6E\u9AB0\u5B50");  //重置筛子
120         retbutton.addActionListener(new ActionListener() {
121             public void actionPerformed(ActionEvent e) {
122                 Jsifter[0].setIcon(image[0]);
123                 Jsifter[1].setIcon(image[0]);
124                 Jsifter[1].setVisible(true);
125                 pLabel.setVisible(false);
126             }
127         });
128         retbutton.setBounds(121, 225, 93, 23);
129         panel.add(retbutton);
130
131         JLabel lblNewLabel_1 = new JLabel(" ");
132         ImageIcon title = new ImageIcon("D:\\Users\\qq\\Desktop\\spin.png");
133         title.setImage(title.getImage().getScaledInstance(300,80,Image.SCALE_DEFAULT));
134         lblNewLabel_1.setIcon(title);
135         lblNewLabel_1.setBounds(67, 10, 307, 75);
136         panel.add(lblNewLabel_1);
137
138         /*  爸爸的爸爸叫什么?爸爸的爸爸叫子琦;
139          *  爸爸的妈妈叫什么?爸爸的妈妈叫奶奶;
140          *  爸爸的哥哥叫什么?爸爸的哥哥叫伯伯;
141          *  爸爸的弟弟叫什么?爸爸的弟弟叫叔叔;
142          *  妈妈的爸爸叫什么?妈妈的爸爸叫外公;
143          *  妈妈的妈妈叫什么?妈妈的妈妈叫外婆;*/
144
145         JButton quebutton = new JButton("\u62BD\u53D6\u95EE\u9898");  //抽取问题
146         quebutton.addActionListener(new ActionListener() {
147             public void actionPerformed(ActionEvent e) {
148
149                 Jsifter[1].setVisible(false);
150                 pLabel.setVisible(true);
151                 psifter.getValue(psifter);
152                 switch(psifter.value){
153                 case(1):Jsifter[0].setIcon(image[1]);pLabel.setText("爸爸的爸爸叫什么?");break;
154                 case(2):Jsifter[0].setIcon(image[2]);pLabel.setText("爸爸的妈妈叫什么?");break;
155                 case(3):Jsifter[0].setIcon(image[3]);pLabel.setText("爸爸的哥哥叫什么?");break;
156                 case(4):Jsifter[0].setIcon(image[4]);pLabel.setText("爸爸的弟弟叫什么?");break;
157                 case(5):Jsifter[0].setIcon(image[5]);pLabel.setText("妈妈的爸爸叫什么?");break;
158                 case(6):Jsifter[0].setIcon(image[6]);pLabel.setText("妈妈的妈妈叫什么?");break;
159                 }
160                 System.out.println("你选择了" + psifter.value + "号问题,请在控制台做出回答(仅限汉字):");
161
162             }
163         });
164         quebutton.setBounds(224, 225, 93, 23);
165         panel.add(quebutton);
166
167         JButton ansbutton = new JButton("\u83B7\u5F97\u7B54\u6848");  //获得答案
168         ansbutton.addActionListener(new ActionListener() {
169             public void actionPerformed(ActionEvent e) {
170                 String award = new String();
171                 Scanner sc = new Scanner(System.in);
172                 String answer = sc.next();
173                 System.out.println("您的答案为: " + answer);
174
175                 //System.out.println("您放弃了这道题,请重新抽取问题!!!");
176
177                 asifter.getValue(asifter);
178                 switch(asifter.value){
179                 case(1):image[7].setImage(image[7].getImage().getScaledInstance(135,135,Image.SCALE_DEFAULT));
180                     Jsifter[0].setIcon(image[7]);award = "灯管";break;
181                 case(2):image[8].setImage(image[8].getImage().getScaledInstance(135,135,Image.SCALE_DEFAULT));
182                     Jsifter[0].setIcon(image[8]);award = "吊扇";break;
183                 case(3):image[9].setImage(image[9].getImage().getScaledInstance(135,135,Image.SCALE_DEFAULT));
184                     Jsifter[0].setIcon(image[9]);award = "课桌";break;
185                 case(4):image[10].setImage(image[10].getImage().getScaledInstance(135,135,Image.SCALE_DEFAULT));
186                     Jsifter[0].setIcon(image[10]);award = "黑板";break;
187                 case(5):image[11].setImage(image[11].getImage().getScaledInstance(135,135,Image.SCALE_DEFAULT));
188                     Jsifter[0].setIcon(image[11]);award = "门";break;
189                 case(6):image[12].setImage(image[12].getImage().getScaledInstance(135,135,Image.SCALE_DEFAULT));
190                     Jsifter[0].setIcon(image[12]);award = "窗";break;
191                 }
192
193                 if(psifter.value == 1 || answer =="子琦"){pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
194                 else if(psifter.value == 2 || answer =="奶奶"){pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
195                 else if(psifter.value == 3 || answer =="伯伯"){pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
196                 else if(psifter.value == 4 || answer =="叔叔"){pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
197                 else if(psifter.value == 5 || answer =="外公"){pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
198                 else if(psifter.value == 6 || answer =="外婆"){pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
199                 else{pLabel.setText("这位同学,你学艺不精啊!!!");}
200
201
202
203                 /*switch(psifter.value){
204                 case(1):if(answer == "\u5B50\u7426"){
205                     pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
206                     else{
207                         pLabel.setText("这位同学,你学艺不精啊!!!");
208                         };
209                         break;
210                 case(2):if(answer == "\u5976\u5976"){
211                     pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
212                     else{
213                         pLabel.setText("这位同学,你学艺不精啊!!!");
214                         };
215                         break;
216                 case(3):if(answer == "\u4F2F\u4F2F"){
217                     pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
218                     else{
219                         pLabel.setText("这位同学,你学艺不精啊!!!");
220                         };
221                         break;
222                 case(4):if(answer == "\u53D4\u53D4"){
223                     pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
224                     else{
225                         pLabel.setText("这位同学,你学艺不精啊!!!");
226                         };
227                         break;
228                 case(5):if(answer == "\u5916\u516C"){
229                     pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
230                     else{
231                         pLabel.setText("这位同学,你学艺不精啊!!!");
232                         };
233                         break;
234                 case(6):if(answer == "\u5916\u5A46"){
235                     pLabel.setText("恭喜你答对了,你将获得  " + asifter.value + "号奖品: " + award);}
236                     else{
237                         pLabel.setText("这位同学,你学艺不精啊!!!");
238                         };
239                         break;
240                 }*/
241             }
242         });
243         ansbutton.setBounds(327, 225, 93, 23);
244         panel.add(ansbutton);
245
246     }
247 }

人狠话不多 — —。。。接下来让我们进入测试运行环节。

测试运行:

1.首先打开我的软件开始界面是这样的。。。筛子图片是旋转的。。。。(请忽略我的标题。。。图片是可以修改的)

2.点击使用筛子按钮,便会调用howmany()方法得出两个筛子的Value值,并且在控制台中选择一位幸运观众

控制台中提示的内容为:有请 8(其为筛子value值之和) 号同学上台回答问题

3.接下来点击抽取问题选项,第一个筛子将会重新调用getValue方法,其值为题库中题号数,并在一旁的JText中显示问题。你需要在控制台中输入答案并按下回车键

控制台中显示内容为:(咳咳。。。为选到最有代表性的问题,重新抽取了很多次问题)

所以你应该输入的答案为“子琦”,然后敲下回车键:)

4.点击获得答案按钮,程序会将输入的内容和答案进行比对。如果正确将会显示提示,并使用筛子选择随机奖品。具体过程不再描述

如果错误会显示:“这位同学你学艺不精啊!!!” 并将图片换成旋转的筛子。

小结:

总算可是做完了,比我预计的时间也就短很多吧。。。。在做之前个人认为以自己的编程功底怎么也得做个一下午加一晚上。。。结果用了4小时(可能边玩游戏边编程效率会高吧— —。。。)就写好了。果然其中BUG不少,部分代码需要继续改进,以防出现死循环这样的问题,以及部分代码还存在问题,显示的图片内容不对,有待日后的修改。其软件的封装和调用做的不是太好,大量代码写进了GUI里面。。。。。。。唉,日后再说吧,尽量抽空改改,你看,这都大三了比较忙(并不)。。。日后尽量,哦不,一定减少游戏时间用于软件的测试和优化方面,不能光写完软件就算完了。(再次立下flag:这个软件一定不会太监的)

转载于:https://www.cnblogs.com/dnmdxjp/p/7691638.html

下面我将随机抽取一名幸运女生,XXXXX相关推荐

  1. python随机选择一个幸运观众_从十名观众中随机选取8名幸运观众,不能重复选取同一个观众为幸运观众(CPrimerPlus第十六章第五题)...

    其实就是CPrimerPlus第十六章第五题,只不过我把标题写的更生动些啦. 刚开始我理解两次选的人不一样就行了,于是只安排了连续两次选人之间对比,人相同了那么就将第二次选择作废,重来一次,直到选的人 ...

  2. excel随机抽取_简单随机抽样及其进阶分层随机抽样方法展示

    一.分享简单随机抽样的几种方法 1.抽样分析工具抽样 2.INDIRECT+RANDBETWEEN函数抽样 3.RAND+排序抽样 4.SAS抽样 二.分层抽样方法 1.Python分层抽样 2.SA ...

  3. 【数据分析案例】从微信接龙中随机选择k名人员出席

    案例 数据分析,要求从微信接龙中随机抽取k名选手参加毕业典礼. import random from collections import defaultdictdef solve(s:str,k:i ...

  4. 数组随机抽取 java_Java利用数组随机抽取幸运观众如何实现

    这篇文章主要介绍了Java利用数组随机抽取幸运观众如何实现,需要的朋友可以参考下 编写程序,事先将所有观众姓名输入数组,然后获得数组元素的总数量,最后在数组元素中随机抽取元素的下标,根据抽取的下标获得 ...

  5. java数组随机抽取分布均匀_java利用数组随机抽取幸运观众

    本文实例为大家分享了java利用数组随机抽取幸运观众的具体代码,供大家参考,具体内容如下 思想: 首先将所有观众姓名生成数组,然后获取数组元素的总数量,再在数组元素中随机抽取元素的下标,根据元素的下标 ...

  6. java利用数组随机抽取幸运观众_java利用数组随机抽取幸运观众

    本文实例为大家分享了java利用数组随机抽取幸运观众的具体代码,供大家参考,具体内容如下 思想: 首先将所有观众姓名生成数组,然后获取数组元素的总数量,再在数组元素中随机抽取元素的下标,根据元素的下标 ...

  7. 5.4 一家人才测评机构低随机抽取的10名小企业的经理人用两种方法进行自信心测试,得到的自信心测试分数如下

    2022-11-29 5.4 一家人才测评机构低随机抽取的10名小企业的经理人用两种方法进行自信心测试,得到的自信心测试分数如下 人员编号 方法1 方法2 1 78 71 2 63 44 3 72 6 ...

  8. php 数组 随机选择_php中通过数组进行高效随机抽取指定条记录的算法

    php使用数组array_rand()函数进行高效随机抽取指定条数的记录,可以随机抽取数据库中的记录,适合进行随机展示和抽奖程序. 该算法主要是利用php的array_rand()函数,下面看一下ar ...

  9. python 有放回随机抽取_Python面试宝典之基础篇-08

    原标题:Python面试宝典之基础篇-08 题目36:如何使用random模块生成随机数.实现随机乱序和随机抽样? 点评:送人头的题目,因为Python标准库中的常用模块应该是Python开发者都比较 ...

最新文章

  1. Error:Java home supplied via 'org.gradle.java.home' is invalid
  2. Livy安装使用(Spark rest接口服务工具)
  3. 管理mysql表知识点_数据库复习提纲(必考知识点整理)
  4. SpringMVC + Apache POI 实现WEB中Excel下载功能
  5. h5手机端浏览器机制_H5 浏览器的9种缓存机制
  6. 2018-08-06
  7. Android -- proxy
  8. 杰里之一拖八烧写器版本更新:1TO8_V3.0.25【篇】
  9. 容量治理-扩容、限流和降级
  10. 谷歌邮箱SMTP Password:SMTP授权码如何获得
  11. 全系列三极管应用参数和代换大全
  12. switch结构详解
  13. 浅析:演讲中的10条禁忌
  14. 软件绿化之实践一--绿化搜狗输入法
  15. 使用Sendinput函数模拟鼠标键盘操作
  16. 大道至简之一:如何准确把握趋势
  17. 如何识别图片上文字的字体?(注:仅限英文)
  18. Windows10中出现‘adb’ 不是内部或外部命令,也不是可运行的程序或批处理文件
  19. 京东商品获取优惠券API接口-京东优惠券如何获取-京东联盟API接口
  20. 数字IC设计工程师一般都干什么

热门文章

  1. 苹果自带相册打马赛克_老王被绿?iOS 13惊现漏洞,马赛克去除
  2. linux怎么配置mysql数据库服务器_linux下指定mysql数据库服务器主从同步的配置实例...
  3. 32位系统 和 64位系统 C 程序中 为什么 指针的内存大小的不一样
  4. java方法声明无效_java 方法声明无效 需要返回类型
  5. 【 Sublime Text 】如何使用Sublime Text快速生成代码模板
  6. 【 FPGA 】UltraFast设计方法学笔记(RTL代码风格2)
  7. mpVue配置sass全局变量
  8. [蓝桥] 基础练习 回文数
  9. elastic job review
  10. 数字消费时代 传统行业互联网转型方向