`
hellojyj
  • 浏览: 61434 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

丰富多彩的随机数

阅读更多

 随机数,美丽的地方就在于不确定。

 

 java里面生成随机数大体上来分为两种:

 

1.调用Math类的静态方法random()去生成一个在0-1之间的double型随机数,如果需要整型,那么就用以下代码(int)(Math.random()*10)的方法来生成一个0-9的随机数。

 

2.用Random类中生成随机数的方法,如生成一个随机整数就可以用一下代码生成new Random().nextInt(10)  生成的随机数是0-9的,你可以改变里面的参数来生成范围不同的随机数。

 

接下来我给大家分享下我眼中的随机数~~~~

----------------------------------------------------卖萌分割线/(-w-) \---------------------------------------------------------

 

在图形界面设计中的画布对象中g.filloval(x,y,width,height);以及设置画布颜色g.setColor(new Color(r,g,b));

我们将在这两个方法中的参数中用随机数去谱写华美的篇章。

首先我在颜色设置上动手脚~

g.setColor(new Color(100,100,100);这样的颜色是简单单调的,那要是换成g.setColor(new Color(new Random().nextInt(255),new Random().nextInt(255),new Random().nextInt(255)),你可以想象到每次产生的图形是不一样的颜色,这样就会有丰富多彩的圆了。

 

但是一个平面的圆始终不能给我们带来想要的视觉享受,那么如果用上循环,你可以得到意想不到的收获

 

private void draw3DBall(){
		for(int i=0;i<25;i++){
			
			g.setColor(new Color(colorValue1+i*5,colorValue2+i*5,colorValue3+i*5));
			g.fillOval(x+i, y+i, 50-i*2, 50-i*2);  //colorValue1,colorValue2,colorValue3是三个随机数
		}
	}

这样画出来的图形不在是圆了,这是一个球!

 

 

 

在颜色上做完手脚,让我们把视线转移到g.filloval()里面的参数里:

我先来介绍下这四个参数吧。java中画的圆是以长度为width,宽度为height,左上角坐标为(x,y)矩形内切出来的圆。也就是说你只要给这四个赋予随机数,那么你画出来的圆就是随机大小,随机分布的!

 

 

如果就这样画出来-= -那也太没品味了~

我们这里线程(Thread)让它动起来~@@

 

public void run() {
		while(true){
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if(flag){
				continue;
			}
			delete3DBall();
			
			x+=VX;
			y+=VY;
			//撞击返回
			if(x>jpPl.getWidth()-50||x<0){
				VX = -VX;
			}
			if(y>jpPl.getHeight()-50||y<0){
				VY = -VY;
			}
			draw3DBall();
			
			
		}
	}
	/**
	 * 绘制新的圆球
	 */
	private void draw3DBall(){
		for(int i=0;i<25;i++){
			
			g.setColor(new Color(colorValue1+i*5,colorValue2+i*5,colorValue3+i*5));
			g.fillOval(x+i, y+i, 50-i*2, 50-i*2);
		}
	}
	/**
	 * 用背景色覆盖原来的圆球
	 */
	private void delete3DBall(){
		for(int i=0;i<25;i++){
			
			g.setColor(jpPl.getBackground());
			g.fillOval(x+i, y+i, 50-i*2, 50-i*2);
		}
	}

 球动的原理就是不断改变坐标(x,y),也就是说我们在线程中每一次循环改变一次x,y的值,而这样的该变量*线程休眠时间 = 球运动的速度 ;为了让每个球运动方式不同,我们又可以每个球的线程中x,y的增量不同,这样我们又用到了随机数

 

最后的效果就是:

 




 
 

 

 

 

 

 

 

 

程序源代码:

package cn.jinyejun.My3DBall;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * 3DBall Play
 * 
 * @author 金晔俊
 * 
 */

public class WinPlay {
	private JFrame jf;
	private JPanel jpPl;
	private Graphics g;
	private ArrayList<GameThread> list = new ArrayList<GameThread>();

	public WinPlay() {

		initUI();
		System.out.println(g);

	}

	private void initUI() {
		jf = new JFrame();
		jf.setTitle("3D Ball Play");
		jf.setLayout(new BorderLayout());
		jf.setSize(600, 500);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setLocationRelativeTo(null);

		// 开始、暂停、继续 按钮组;
		JPanel jp = new JPanel();
		jp.setLayout(new FlowLayout());
		JButton jbuSt = new JButton("Start");
		jbuSt.setFocusable(false);
		JButton jbuPs = new JButton("pause");
		jbuPs.setFocusable(false);
		JButton jbuCt = new JButton("continue");
		jbuCt.setFocusable(false);
		jp.add(jbuSt);
		jp.add(jbuPs);
		jp.add(jbuCt);

		jf.add(jp, BorderLayout.NORTH);

		// 3D球显示区域
		jpPl = new JPanel();
		jpPl.setBackground(Color.WHITE);
		jpPl.setPreferredSize(new Dimension(500, 500));

		jf.add(jpPl);

		jf.setVisible(true);

		// 获取JpPl画布
		g = jpPl.getGraphics();

		jbuSt.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				GameThread gt = new GameThread(jpPl, g);
				list.add(gt);
				gt.start();

			}

		});

		jbuPs.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				for (int i = 0; i < list.size(); i++) {
					list.get(i).setFlag(true);
				}

			}

		});
		jbuCt.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				for (int i = 0; i < list.size(); i++) {
					list.get(i).setFlag(false);
				}

			}

		});

	}

	public static void main(String[] args) {
		new WinPlay();
	}

}

 

package cn.jinyejun.My3DBall;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

import javax.swing.JPanel;

public class GameThread extends Thread{
	private JPanel jpPl;
	private Graphics g;
	private int x,y;
	private int VX = new Random().nextInt(5)+1,VY = new Random().nextInt(5)+1;
	private boolean flag = false;
	
	private int colorValue1 = Math.abs(new Random().nextInt(255)-5*25);
	private int colorValue2 = Math.abs(new Random().nextInt(255)-5*25);
	private int colorValue3 = Math.abs(new Random().nextInt(255)-5*25);

	public GameThread(JPanel jpPl,Graphics g) {
		this.jpPl = jpPl;
		this.g = g;
	}

	@Override
	public void run() {
		while(true){
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if(flag){
				continue;
			}
			delete3DBall();
			
			x+=VX;
			y+=VY;
			//撞击返回
			if(x>jpPl.getWidth()-50||x<0){
				VX = -VX;
			}
			if(y>jpPl.getHeight()-50||y<0){
				VY = -VY;
			}
			draw3DBall();
			
			
		}
	}
	/**
	 * 绘制新的圆球
	 */
	private void draw3DBall(){
		for(int i=0;i<25;i++){
			
			g.setColor(new Color(colorValue1+i*5,colorValue2+i*5,colorValue3+i*5));
			g.fillOval(x+i, y+i, 50-i*2, 50-i*2);
		}
	}
	/**
	 * 用背景色覆盖原来的圆球
	 */
	private void delete3DBall(){
		for(int i=0;i<25;i++){
			
			g.setColor(jpPl.getBackground());
			g.fillOval(x+i, y+i, 50-i*2, 50-i*2);
		}
	}
	
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	
	

}

 

  • 大小: 90.9 KB
  • 大小: 88.3 KB
1
0
分享到:
评论
2 楼 hellojyj 2014-04-05  
嗯,谢谢你的意见~初学者~@ TuT
1 楼 freezingsky 2014-04-04  
你没发现你画出的圆,有很多的毛边吗?我建议你用Graphic2D,进行降噪。另外,我觉得你这文章属于一般的粒子运动方面的知识,随机数方面的东西,反而没有说到点子上。

相关推荐

    shell脚本如何获取随机数random

    在Linux操作系统中,shell脚本是编写自动化...这些技巧的使用能够让shell脚本的编写更加丰富多彩,同时提升脚本的灵活性和实用性。在处理需要随机性的自动化任务时,合理利用这些方法能够显著提高脚本的效率和可靠性。

    Js生成随机数.rar

    通过理解并灵活运用这些技巧,开发者可以创建出各种具有随机性的功能,让程序更加丰富多彩。在易语言中,虽然语法与JavaScript不同,但其核心思想是相通的,同样可以通过类似的逻辑来实现随机数的生成。

    e语言-易语言多彩验证码

    画板组件提供了丰富的绘图函数,如填充颜色、线条绘制、文字输出等,可以用来构建验证码的各种形状和颜色。 2. **随机数生成**:为了生成不规则且难以预测的验证码,程序需要使用随机数生成器。易语言提供了生成...

    RandDisplayJiong

    此外,MATLAB还提供了颜色映射(colormap)和色彩条(colorbar)等功能,可以让生成的图像更加丰富多彩。程序可能使用`colormap`来改变图像的颜色方案,或者使用`colorbar`来显示颜色与值的对应关系。 在程序运行...

    Scratch显示与隐藏(讲义).pdf

    总的来说,掌握Scratch中的显示与隐藏功能,不仅可以提升编程技能,还能激发创意,创造出丰富多彩的互动故事和游戏。通过实践,孩子们能够更好地理解和应用编程逻辑,为未来的学习打下坚实的基础。

    Java开发周末家庭聚餐活动策划小游戏代码示例.docx

    结合烹饪、户外活动或其他娱乐项目,可以创建一个丰富多彩的活动日程。选择适合所有参与者的游戏和活动,确保考虑年龄、兴趣和身体状况,让大家都能参与进来,享受聚会的乐趣。通过这样的互动,不仅可以放松身心,还...

    c++2048小游戏

    《C++实现2048游戏详解》 2048是一款广受欢迎的数字合并游戏,玩家通过上、下、...在实践中,还可以根据自己的兴趣和需求,进一步优化代码结构,提高游戏性能,甚至加入网络对战等功能,使2048游戏变得更加丰富多彩。

    易语言颜色随机渐变源码.7z

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机专业的用户也能快速上手编程。...在实践中不断探索和改进,你将能更好地运用易语言创造丰富多彩的视觉效果。

    随机抽奖猜谜语程序(含代码)

    该程序基于Visual Basic (VB)语言开发,允许用户根据自身需求进行定制,使得年会活动更加丰富多彩。 首先,让我们深入理解这款程序的核心功能。随机抽奖是程序的基础,它利用VB内置的随机数生成函数,确保每次抽奖...

    气泡屏保程序 运行之后再屏幕中可以显示多个彩球飘动的效果

    这些库提供了高效且灵活的图形绘制功能,能够帮助开发者创建出丰富多彩的动态效果。 2. **粒子系统**:彩球飘动的效果可能采用了粒子系统的设计,粒子系统是一种模拟复杂动态效果的方法,通过大量简单对象(粒子)...

    c语言实现非常漂亮祝福烟花效果.zip

    9. **颜色控制**:虽然标准的C语言不直接支持彩色输出,但通过一些终端控制序列(如ANSI转义码),可以在某些平台上实现颜色输出,让烟花效果更丰富多彩。 10. **程序优化**:为了使烟花效果更加流畅,可能需要考虑...

    Fireworks in applet

    5. **颜色和随机数**: 为了使烟花效果更加丰富多彩,可能会用到Java的色彩类Color以及随机数生成器Random。烟花的颜色、大小、速度等属性可以通过随机数来生成,增加视觉的随机性和多样性。 6. **HTML集成**: "test...

    多边形多彩折纸构图动态圆球js特效动画.zip

    在IT领域,JavaScript(简称JS)是一种广泛使用的前端编程语言,尤其在网页开发中,它为用户界面提供了丰富的动态效果和交互性。本资源“多边形多彩折纸构图动态圆球js特效动画.zip”包含了一个利用JavaScript实现的...

    43-Flappybird-少儿编程scratch项目源代码文件案例素材.zip

    《43-Flappybird-少儿编程scratch项目源代码文件案例素材》是一个针对儿童和初学者设计的游戏开发案例,旨在教授使用Scratch编程语言创建一...同时,团队合作也能进一步培养沟通协作的能力,使得学习过程更加丰富多彩。

    错题-Python标准库.pdf

    在Python编程语言中,标准库提供了许多有用的功能模块,其中包括turtle模块和random模块。turtle库主要用于图形绘制,而random库则用于生成各种...通过掌握这些基础功能,可以创建出丰富多彩的图形和模拟随机现象。

    用VB放烟花 源代码

    烟花的发射方向、速度和颜色变化可以通过随机数实现,VB的`Randomize`函数和`Rnd`函数能帮助我们生成随机参数,使烟花展示更加丰富多彩。 4. **坐标系统和数学运算**: 在二维坐标系中,烟花的运动轨迹可以通过...

    MonteCarlo(蒙特卡洛法)简介.ppt

    蒙特卡洛方法的应用实例丰富多彩,例如,可以通过向正方形内随机投掷点来估算不规则图形的面积,比例为落入图形内的点数除以总投掷点数。这种方法类似于民意测验,通过小样本调查来推断整体趋势。 在科技计算领域,...

    python烟花代码.doc

    通过本教程的学习,读者不仅能够掌握基础的Python编程知识,还能学会如何利用Python进行图形化界面设计,以及如何通过随机数生成丰富多彩的效果。 #### 二、基础知识回顾 在开始之前,我们先简要回顾一下几个关键...

    精彩编程与编程技巧-用VB制作下雪的特技景象...

    ### 使用VB制作下雪特效景象知识点详解 #### 一、知识点概述 在计算机图形学领域,特效编程一直是吸引用户注意并提升用户体验的重要手段之一。...通过不断地实践和改进,开发者可以创造出更加丰富多彩的应用程序。

    python烟花代码 (5).zip

    Python中,可以通过`random`模块生成随机颜色,或者使用`colorsys`模块将RGB颜色转换为HSV(色相、饱和度、亮度)模型,以实现更丰富的色彩变化。 3. **随机数生成**:烟花的发射位置、方向、速度和颜色等属性都...

Global site tag (gtag.js) - Google Analytics