Java基础学习之Random类和Robot类及猜数小游戏

来源:互联网 发布:淘宝发布产品找不到 编辑:程序博客网 时间:2024/05/16 15:22

Random类:此类的实例用于生成伪随机数流。但是它的随机范围是0到正数之间,不包括负数,要得到负数到正数的随机数,例子如下:

package com.test.exercise_2;import java.util.Random;public class Test {/** * @param args */public static void main(String[] args) {Random random = new Random();// 得到0到80的随机数int a = random.nextInt(81);// b的取值范围是-40到40int b = a - 40;System.out.println(b);}


Robot类:

此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot 的主要目的是便于 Java 平台实现自动测试。  其实就是

编写Java代码,让电脑自动执行鼠标操作或者键盘操作。例子如下“:

package com.test.exercise_2;import java.awt.AWTException;import java.awt.Robot;import java.awt.event.KeyEvent;public class Test2 {/** * @param args * @throws AWTException */public static void main(String[] args) throws AWTException {Robot robot = new Robot();robot.keyPress(KeyEvent.VK_H);robot.keyRelease(KeyEvent.VK_H);robot.keyPress(KeyEvent.VK_E);robot.keyRelease(KeyEvent.VK_E);robot.keyPress(KeyEvent.VK_L);robot.keyRelease(KeyEvent.VK_L);robot.keyPress(KeyEvent.VK_L);robot.keyRelease(KeyEvent.VK_L);robot.keyPress(KeyEvent.VK_O);robot.keyRelease(KeyEvent.VK_O);}}
运行该程序后,会自动在光标处打印hello

猜数小游戏:

        游戏背景:学习完Random类后,我就想,我可以随机出一个规定范围的数,然后做成一个界面,做个猜数字的小游戏。这个游戏刚好用到了我们刚学的Random类以及Robot类

1、画出我脑海里的界面贴图,如下

2、需要的类:显示窗体(RandomFrame)、监听器(RandomListener)、测试类(Test)

3、需要给JTextField和JButton添加监听,JTextField输入数字,按下enter键,触发ActionEvent事件;JButton被按下,触发ActionEvent事件

4、效果如下:

在文本框中输入数字,还没有按下enter键,鼠标也不在按钮上


按下enter键,鼠标快速移动到按钮上,按下、释放;鼠标再次返回文本框,按下、释放,将光标还给文本框


5、总结:可能代码写的很乱,不是很好,请各位多多指教

6、代码如下:

 窗体类(RandomFrame)

package com.test.exercise2;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;/* * 用于显示窗体 */public class RandomFrame extends JFrame {public RandomListener listener;// 初始化public void init() {// 窗体属性this.setSize(600, 600);this.setTitle("SmallGame");this.setLocationRelativeTo(null);this.setDefaultCloseOperation(3);// 窗体上部分放一个JPanelJPanel panel = new JPanel();panel.setPreferredSize(new Dimension(600, 300));panel.setLayout(null);this.add(panel, BorderLayout.NORTH);// 窗体上部分的JPanel上添加JLabel、JButton、JTextFieldJLabel jl = new JLabel("请在-100到100之间填一个数");jl.setBounds(80, 70, 200, 30);panel.add(jl);JTextField jtf = new JTextField();jtf.setBounds(80, 100, 200, 30);jtf.requestFocus();panel.add(jtf);JButton jb = new JButton("确定");jb.setBounds(420, 100, 60, 30);panel.add(jb);// 窗体下部分添加一个JPanelJPanel jp = new JPanel();jp.setLayout(new BorderLayout());jp.setPreferredSize(new Dimension(600, 300));jp.setBackground(Color.blue);this.add(jp, BorderLayout.SOUTH);// 窗体下部分的JPanel上添加JScrollPane,把JTextArea加到JScrollPane上JTextArea jta = new JTextArea();jta.setEditable(false);// JTextArea不可编写// jta放里面JScrollPane jsp = new JScrollPane(jta);jsp.setPreferredSize(new Dimension(400, 250));jsp.setBackground(Color.red);jp.add(jsp, BorderLayout.CENTER);// 给JTextField、JButton添加监视器listener = new RandomListener(jtf, jta, jb);jb.addActionListener(listener);jtf.addActionListener(listener);this.setVisible(true);}}

监听器类(RandomListener)

package com.test.exercise2;import java.awt.AWTException;import java.awt.Robot;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.util.Random;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JTextField;public class RandomListener implements ActionListener {public Random ran = new Random();public JTextField jtf;public JTextArea jta;public JButton jb;public Robot robot;// 重载构造方法public RandomListener(JTextField jtf, JTextArea jta, JButton jb) {this.jtf = jtf;this.jta = jta;this.jb = jb;}public void actionPerformed(ActionEvent e) {String x = jtf.getText();// 在jtf中写了数字,按下enter键if (e.getSource() == jtf) {try {// 鼠标移动到“确定”按钮,按下,释放robot = new Robot();robot.mouseMove(838, 207);robot.mousePress(InputEvent.BUTTON1_MASK);robot.mouseRelease(InputEvent.BUTTON1_MASK);// 鼠标移回文本框,按下,释放,即将光标置回文本框robot.mouseMove(488, 207);robot.mousePress(InputEvent.BUTTON1_MASK);robot.mouseRelease(InputEvent.BUTTON1_MASK);} catch (AWTException e1) {e1.printStackTrace();}} else if (e.getSource() == jb) {try {// 将字符串转为int型int x2 = Integer.parseInt(x);// 随机出-100到100的int型数int x3 = ran.nextInt(101) - 100;if (x2 == x3) {jta.setText(jta.getText() + "\n" + "正确答案是" + x3+ "。恭喜您,您猜对了!");jtf.setText(null);} else {jta.setText(jta.getText() + "\n" + "正确答案是" + x3+ "。您猜错了,请继续努力!");jtf.setText(null);}} catch (NumberFormatException exc) {}}}}
测试类(Test):
package com.test.exercise2;public class Test {public static void main(String[] args) {new RandomFrame().init();}}






0 0