`
白粥若水
  • 浏览: 103494 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

一个关于随机数类Random的小小游戏

阅读更多

 以前一直觉得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;
}

 

 

     结果发现,生成的图像不是原来以为的不规则排列,而是一个在“数学上非常美丽的图形”。原来所谓的“随机”并不是完全的随机,在大尺度之下,也就是在统计学下,是有规律可找的

分享到:
评论

相关推荐

    用java编写的小小的猜拳游戏

    这可能包括创建一个`Player`类来表示玩家,一个`Computer`类来代表电脑,以及一个`Game`类来管理游戏逻辑。 3. **类的使用**:在Java中,类是用来封装数据和行为的结构。例如,`Player`类可能包含姓名、选择的石头...

    Python猜大小小游戏.7z

    标题中的“Python猜大小小游戏”指的是一个使用Python编程语言编写的简单游戏,它通常用于教学目的,帮助初学者了解如何处理用户输入、条件判断以及循环结构等基础编程概念。在这个游戏中,计算机随机生成一个数字,...

    一个小小的猜数字游戏.rar

    《一个小小的猜数字游戏》 猜数字游戏是一种常见的编程练习,它通常涉及到随机数生成、条件判断、循环结构以及用户交互等基本编程概念。在这个游戏中,计算机生成一个秘密数字,玩家需要通过一系列尝试来猜出这个...

    Python猜大小小游戏.zip

    【Python猜大小小游戏】是一个基于Python编程语言开发的娱乐项目,通常用于教学目的,帮助学生实践编程技能。这个项目经过导师的指导并已通过高分期末大作业的评审,因此,它不仅是一个完整的代码实现,而且是经过...

    android小小小的一个好玩的游戏

    在"android小小小的一个好玩的游戏"这个主题中,我们聚焦于一个简单却有趣的Android游戏——掷骰子游戏。 掷骰子游戏通常基于概率和运气,它可能包含一些基本的策略元素,使得游戏既简单又引人入胜。在Android平台...

    三套C#项目实战-抽奖-成绩管理-猜随机数游戏.zip

    开发者可能会使用`Random`类的`Next()`方法来设定一个范围,然后与用户输入的猜测进行比较。游戏逻辑可能包含循环结构(如`while`或`do-while`)以确保用户有多次尝试的机会,直到猜中为止。此外,还需要用到控制台...

    一个小小的Swing拼图游戏

    本项目是一个基于Swing开发的拼图游戏,旨在提供娱乐和逻辑思维训练。 在Swing拼图游戏中,开发者可能使用了JFrame作为主要窗口,JPanel作为游戏面板,并自定义了拼图块的组件。这些组件可能是JButton或自定义的...

    一个小小的纸牌程序(VB.NET)

    【标题】"一个小小的纸牌程序(VB.NET)"揭示了这个项目是使用VB.NET编程语言开发的一个初级水平的应用程序。VB.NET,全称为Visual Basic .NET,是Microsoft .NET框架的一部分,它提供了面向对象的编程环境,适用于...

    c#做的石头剪刀布游戏

    在C#中,可以使用System.Random类来生成随机数,这在石头剪刀布游戏中可能用于决定电脑的选择,使得每一轮游戏的结果具有不确定性。同时,开发者表示游戏可能存在漏洞,并邀请他人帮助完善,这表明了对代码审查和...

    猜拳游戏 很好的

    【描述】:“小小的一个java编程游戏,实现窗体界面的玩法”提示我们这个游戏是具有图形用户界面(GUI)的,它使用Java的Swing或JavaFX库来创建窗口,并允许玩家通过交互式的界面参与游戏。窗体界面通常包含按钮、...

    收猜数字游戏源码

    这通常通过调用`java.util.Random`类来实现,设置一个特定范围并生成一个秘密数字。 3. **关卡设计**:游戏分为五关,每关允许的最大猜测次数不同,这需要在源码中设定关卡参数,并在用户猜错时判断是否超出次数,...

    java 小游戏

    这个游戏看起来是一个简单的猜数字游戏,玩家需要根据难度选择一个区域,然后系统会生成一组数字,玩家需要输入同样数量的数字来尝试匹配。下面我们将详细解释其中涉及的Java编程知识点: 1. **类与对象**: - `...

    手机猜数字游戏源码

    在这个游戏中,开发者可能使用了`java.util.Random`类来生成随机数,并且通过比较用户的输入与目标数字,实现逻辑判断。例如,可以设定游戏规则为1-100之间的整数,每次猜测后会提示玩家是“过高”、“过低”还是...

    Marskramer:小小的太空交易者游戏,浪费时间

    5. **随机数生成**:Python的`random`模块可以帮助我们生成随机的交易价格、星球发现等事件,增加游戏的不确定性和趣味性。 6. **控制流**:条件语句(if...else)和循环(for、while)是实现游戏逻辑的关键,比如...

    数组与字符串.docx

    ` 创建了一个包含10个整数元素的数组。 2. **填充数组**: - 可以使用循环结构逐个元素地初始化数组,或者使用`Arrays.fill()`方法一次性填充数组的所有元素。例如,`Arrays.fill(array, 10);` 将数组中的所有...

    熟悉java开发.docx

    这个游戏的核心逻辑在于生成一个随机数并让用户尝试猜测。`java.util.Random`类用于生成随机数,`nextInt(int bound)`方法可以生成0到bound(不包括bound)的随机整数。通过`Scanner`获取用户输入并与随机数比较,...

    用 Python 实现烟花效果-new.docx

    在这个Python程序中,我们看到如何使用基本的编程概念和库来创建一个简单的烟花效果。这个效果是通过模拟火花粒子在屏幕上的运动来实现的。以下是关键知识点的详细说明: 1. **随机数生成**:使用`random.uniform(a...

    Dice-Game-DOM:我的第一个DOM WEB

    【Dice-Game-DOM:我的第一个DOM WEB】项目是一个初学者级别的JavaScript实践,它通过创建一个基于DOM(Document Object Model)的在线骰子游戏来教授基础的网页交互和JavaScript编程概念。在这个项目中,我们将深入...

    perlin-map

    使用`java.util.Random`类生成随机数,以及`Math`类提供的函数(如`cos`, `sin`, 和 `pow`)来帮助计算。 Perlin Map的主要应用包括: - **地形生成**: 在游戏和虚拟世界中,Perlin Noise常用于创建山脉、河流、...

Global site tag (gtag.js) - Google Analytics