《XNA高级编程:Xbox 360和Windows》3-5

3.5 RandomHelper


     看一下辅助类中的 RandomHelper 类,在单一项目中它用得不是很多,但几乎任何一个游戏都会需要产生一些随机数让游戏内容看上去没有太多的周期性,并让游戏富于变化。

     Breakout 游戏中,您就需要一些随机数,这里的砖块( block )就是随机生成的。第一级的随机概率是 10% ,第二级是 20% ,以此类推,这样游戏级别不断提升,游戏也就变得更难。当然您可以使用 Random 类,调用 Next 方法来生成一个新的随机数,但如果您想生成一个随机标准化向量,就得使用下面的代码:

Random randomGenerator  =   new  Random(( int )DateTime.Now.Ticks);
Vector3 randomNormalVector 
=   new  Vector3(
            (
float )randomGenerator.NextDouble()  *   2.0f   -   1.0f ,
            (
float )randomGenerator.NextDouble()  *   2.0f   -   1.0f ,
            (
float )randomGenerator.NextDouble()  *   2.0f   -   1.0f );
randomNormalVector.Normalize();

     如果不想一次次地重复这段代码,使用类似 RandomHelper 的辅助类会很有帮助。图 3-8 显示了 RandomHelper 类的内部结构。
图3-8

图3-8

     可以看到这个类的方法都很简单,花几分钟就可以写出这个类。但这个类非常有用,使用内部的 Random 类的静态实例 globalRandomGenerator RandomHelper 类在生成随机数的时候比每次需要随机数都创建一个新的 Random 实例快得多。

生成随机向量

     下面是 RandomHelper 类的一个方法,用来获得二维随机向量:
///   <summary>
///  Get Random Vector2
///   </summary>
///   <param name="min"> Minimum for each component </param>
///   <param name="max"> Maximum for each component </param>
///   <returns> Vector2 </returns>
public   static  Vector2 GetRandomVector2( float  min,  float  max)
{
    
return   new  Vector2(
        GetRandomFloat(min, max),
        GetRandomFloat(min, max));
//  GetRandomVector2(min, max)

     测试
RandomHelper 类中的方法没有太大意义,因为所有的方法返回值都是随机数,没有必要检查 GetRandomVector2 方法返回的是不是一个二维向量,基本上不会出错。

转载于:https://www.cnblogs.com/AlexCheng/archive/2010/05/11/2120332.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值