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

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到40
		int 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);

		// 窗体上部分放一个JPanel
		JPanel panel = new JPanel();
		panel.setPreferredSize(new Dimension(600, 300));
		panel.setLayout(null);
		this.add(panel, BorderLayout.NORTH);

		// 窗体上部分的JPanel上添加JLabel、JButton、JTextField
		JLabel 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);

		// 窗体下部分添加一个JPanel
		JPanel 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值