以前一直觉得Random类的方法一般是生成一个“随机”数,细想之下,这似乎与计算机的确定性相违背。后来在API文档上查阅才发现,此“随机”乃是“伪随机”,但到底是怎么个“伪”还是不清楚。今天做了一个小小程序,发现了一些有趣的事情
package 小游戏;
/**
* 这是一个验证Random随机数的小游戏界面类
*/
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
public class gameUI extends JFrame{
public static void main(String args[]){
gameUI gu = new gameUI();
gu.init();
}
public void init(){
this.setTitle("小游戏");
this.setSize(500, 500);
FlowLayout fl = new FlowLayout();
this.setLayout(fl);
JButton jb =new JButton("开始随机数游戏");
this.add(jb);
JButton jbg = new JButton("开始高斯随机数游戏");
this.add(jbg);
this.setDefaultCloseOperation(3);
this.setVisible(true);
Graphics g = this.getGraphics();
gameListener glis = new gameListener(g);
jb.addActionListener(glis);
gamegListener gglis = new gamegListener(g);
jbg.addActionListener(gglis);
}
}
package 小游戏;
/**
* 小游戏的监听器类(生成一般随机数)
*/
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class gameListener implements ActionListener{
private Graphics g;
private int x1,x2,x3,y1,y2,y3;
private int x,y;
//重写监听器类的构造器方法
public gameListener(Graphics g){
this.g = g;
}
public void actionPerformed(ActionEvent e) {
Random r = new Random(); //Random是一个生成伪随机数的类
x1 = Math.abs(r.nextInt()%500); //生成0到499之间的随机数(伪)
x2 = Math.abs(r.nextInt()%500);
x3 = Math.abs(r.nextInt()%500);
y1 = Math.abs(r.nextInt()%500);
y2 = Math.abs(r.nextInt()%500);
y3 = Math.abs(r.nextInt()%500);
System.out.println("x1:"+x1+" x2:"+x2+" x3:"+x3+" y1:"+y1+" y2:"+y2+" y3:"+y3);
x = Math.abs(r.nextInt()%500);
y = Math.abs(r.nextInt()%500);
g.drawLine(x1, y1, x1, y1);
g.drawLine(x2, y2, x2, y2);
g.drawLine(x3, y3, x3, y3);
g.drawLine(x, y, x, y);
for(int i =1;i<1000000;i++){
int P = getP();
getColor();
//若随机数为1,则
if(P==1){
x = (x1+x)/2;
y = (y1+y)/2;
g.drawLine(x, y, x, y);
}
//若随机数为2,则
else if(P==2){
x = (x2+x)/2;
y = (y2+y)/2;
g.drawLine(x, y, x, y);
}
//若随机数为3,则
else if(P==3){
x = (x3+x)/2;
y = (y3+y)/2;
g.drawLine(x, y, x, y);
}
}
}
//随机取1,2,3中的一个数
public int getP(){
Random r = new Random();
int P = Math.abs(r.nextInt()%3);
return P+1;
}
public void getColor(){
Random r = new Random();
int P = Math.abs(r.nextInt()%10);
int C = P+1;
if(C==1){
g.setColor(config.c1);
}else if(C==2){
g.setColor(config.c2);
}else if(C==3){
g.setColor(config.c3);
}else if(C==4){
g.setColor(config.c4);
}else if(C==5){
g.setColor(config.c5);
}else if(C==6){
g.setColor(config.c6);
}else if(C==7){
g.setColor(config.c7);
}else if(C==8){
g.setColor(config.c8);
}else if(C==9){
g.setColor(config.c9);
}else if(C==10){
g.setColor(config.c10);
}else if(C==11){
g.setColor(config.c11);
}
}
}
package 小游戏;
/**
* 小游戏的监听器类(生成高斯随机数)
*/
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class gamegListener implements ActionListener{
private Graphics g;
private int x1,x2,x3,y1,y2,y3;
private int x,y;
//重写监听器类的构造器方法
public gamegListener(Graphics g){
this.g = g;
}
public void actionPerformed(ActionEvent e) {
Random r = new Random(); //Random是一个生成伪随机数的类
x1 = Math.abs(r.nextInt()%500); //生成0到499之间的随机数(伪)
x2 = Math.abs(r.nextInt()%500);
x3 = Math.abs(r.nextInt()%500);
y1 = Math.abs(r.nextInt()%500);
y2 = Math.abs(r.nextInt()%500);
y3 = Math.abs(r.nextInt()%500);
System.out.println("x1:"+x1+" x2:"+x2+" x3:"+x3+" y1:"+y1+" y2:"+y2+" y3:"+y3);
x = Math.abs(r.nextInt()%500);
y = Math.abs(r.nextInt()%500);
g.drawLine(x1, y1, x1, y1);
g.drawLine(x2, y2, x2, y2);
g.drawLine(x3, y3, x3, y3);
g.drawLine(x, y, x, y);
for(int i =1;i<1000000;i++){
int P = getP();
//若随机数为1,则
if(P==1){
x = (x1+x)/2;
y = (y1+y)/2;
g.drawLine(x, y, x, y);
}
//若随机数为2,则
else if(P==2){
x = (x2+x)/2;
y = (y2+y)/2;
g.drawLine(x, y, x, y);
}
//若随机数为3,则
else if(P==3){
x = (x3+x)/2;
y = (y3+y)/2;
g.drawLine(x, y, x, y);
}
}
}
//随机取1,2,3中的一个数
public int getP(){
Random r = new Random();
int P = Math.abs((int)r.nextGaussian()%3);
return P+1;
}
}
package 小游戏;
import java.awt.Color;
public class config {
static Color c1 = Color.black;
static Color c2 = Color.blue;
static Color c3 = Color.cyan;
static Color c4 = Color.gray;
static Color c5 = Color.green;
static Color c6 = Color.magenta;
static Color c7 = Color.orange;
static Color c8 = Color.pink;
static Color c9 = Color.red;
static Color c10 = Color.white;
static Color c11 = Color.yellow;
}
结果发现,生成的图像不是原来以为的不规则排列,而是一个在“数学上非常美丽的图形”。原来所谓的“随机”并不是完全的随机,在大尺度之下,也就是在统计学下,是有规律可找的
分享到:
相关推荐
这可能包括创建一个`Player`类来表示玩家,一个`Computer`类来代表电脑,以及一个`Game`类来管理游戏逻辑。 3. **类的使用**:在Java中,类是用来封装数据和行为的结构。例如,`Player`类可能包含姓名、选择的石头...
标题中的“Python猜大小小游戏”指的是一个使用Python编程语言编写的简单游戏,它通常用于教学目的,帮助初学者了解如何处理用户输入、条件判断以及循环结构等基础编程概念。在这个游戏中,计算机随机生成一个数字,...
《一个小小的猜数字游戏》 猜数字游戏是一种常见的编程练习,它通常涉及到随机数生成、条件判断、循环结构以及用户交互等基本编程概念。在这个游戏中,计算机生成一个秘密数字,玩家需要通过一系列尝试来猜出这个...
【Python猜大小小游戏】是一个基于Python编程语言开发的娱乐项目,通常用于教学目的,帮助学生实践编程技能。这个项目经过导师的指导并已通过高分期末大作业的评审,因此,它不仅是一个完整的代码实现,而且是经过...
在"android小小小的一个好玩的游戏"这个主题中,我们聚焦于一个简单却有趣的Android游戏——掷骰子游戏。 掷骰子游戏通常基于概率和运气,它可能包含一些基本的策略元素,使得游戏既简单又引人入胜。在Android平台...
开发者可能会使用`Random`类的`Next()`方法来设定一个范围,然后与用户输入的猜测进行比较。游戏逻辑可能包含循环结构(如`while`或`do-while`)以确保用户有多次尝试的机会,直到猜中为止。此外,还需要用到控制台...
本项目是一个基于Swing开发的拼图游戏,旨在提供娱乐和逻辑思维训练。 在Swing拼图游戏中,开发者可能使用了JFrame作为主要窗口,JPanel作为游戏面板,并自定义了拼图块的组件。这些组件可能是JButton或自定义的...
【标题】"一个小小的纸牌程序(VB.NET)"揭示了这个项目是使用VB.NET编程语言开发的一个初级水平的应用程序。VB.NET,全称为Visual Basic .NET,是Microsoft .NET框架的一部分,它提供了面向对象的编程环境,适用于...
在C#中,可以使用System.Random类来生成随机数,这在石头剪刀布游戏中可能用于决定电脑的选择,使得每一轮游戏的结果具有不确定性。同时,开发者表示游戏可能存在漏洞,并邀请他人帮助完善,这表明了对代码审查和...
【描述】:“小小的一个java编程游戏,实现窗体界面的玩法”提示我们这个游戏是具有图形用户界面(GUI)的,它使用Java的Swing或JavaFX库来创建窗口,并允许玩家通过交互式的界面参与游戏。窗体界面通常包含按钮、...
这通常通过调用`java.util.Random`类来实现,设置一个特定范围并生成一个秘密数字。 3. **关卡设计**:游戏分为五关,每关允许的最大猜测次数不同,这需要在源码中设定关卡参数,并在用户猜错时判断是否超出次数,...
这个游戏看起来是一个简单的猜数字游戏,玩家需要根据难度选择一个区域,然后系统会生成一组数字,玩家需要输入同样数量的数字来尝试匹配。下面我们将详细解释其中涉及的Java编程知识点: 1. **类与对象**: - `...
在这个游戏中,开发者可能使用了`java.util.Random`类来生成随机数,并且通过比较用户的输入与目标数字,实现逻辑判断。例如,可以设定游戏规则为1-100之间的整数,每次猜测后会提示玩家是“过高”、“过低”还是...
5. **随机数生成**:Python的`random`模块可以帮助我们生成随机的交易价格、星球发现等事件,增加游戏的不确定性和趣味性。 6. **控制流**:条件语句(if...else)和循环(for、while)是实现游戏逻辑的关键,比如...
` 创建了一个包含10个整数元素的数组。 2. **填充数组**: - 可以使用循环结构逐个元素地初始化数组,或者使用`Arrays.fill()`方法一次性填充数组的所有元素。例如,`Arrays.fill(array, 10);` 将数组中的所有...
这个游戏的核心逻辑在于生成一个随机数并让用户尝试猜测。`java.util.Random`类用于生成随机数,`nextInt(int bound)`方法可以生成0到bound(不包括bound)的随机整数。通过`Scanner`获取用户输入并与随机数比较,...
在这个Python程序中,我们看到如何使用基本的编程概念和库来创建一个简单的烟花效果。这个效果是通过模拟火花粒子在屏幕上的运动来实现的。以下是关键知识点的详细说明: 1. **随机数生成**:使用`random.uniform(a...
【Dice-Game-DOM:我的第一个DOM WEB】项目是一个初学者级别的JavaScript实践,它通过创建一个基于DOM(Document Object Model)的在线骰子游戏来教授基础的网页交互和JavaScript编程概念。在这个项目中,我们将深入...
使用`java.util.Random`类生成随机数,以及`Math`类提供的函数(如`cos`, `sin`, 和 `pow`)来帮助计算。 Perlin Map的主要应用包括: - **地形生成**: 在游戏和虚拟世界中,Perlin Noise常用于创建山脉、河流、...