Learning XNA 3.0 第七章 第二节

来源:互联网 发布:淘宝怎么打快递单 编辑:程序博客网 时间:2024/06/03 16:28

随机生成各种精灵

为了随机生成各种精灵, 你首先得确定每个种类出现的概率。这个游戏里的大部分精灵都将是AutomatedSpritesChasingSprites是第二多的,而EvadingSprites只是偶尔路过……这一节,我们将会给各种精灵出现的概率赋一个百分比的值。每次有一个精灵重生的时候,你都要基于各种精灵出现的概率来判断生成何种精灵。每种精灵具体的概率该是啥样的呢?就是你可以用这些概率来测试游戏,而且你还可以调整他们的值,让开发者感觉哎哟不错哦~(这句话翻了好久,不知道怎么表达,原句是:The exact percentage likelihood for each sprite type is something that you can play with as you test your game, and you can adjust the values to the point where they feel right to you, the developer.

首先,打开SpriteManage类,添加三个新的类级别的变量来表现各种精灵出现的概率。

int likelihoodAutomated = 75;

int likelihoodChasing = 20;

int likelihoodEvading = 5;

你会发现这三个概率加起来等于100(相当于100%)。本质上来说就是,75%AutomatedSprites20%ChasingSprites5%EvadingSprites

现在,你要添加一些代码。这些代码会生成一个随机数,然后,根据这个随机数的值,来生成三种精灵中的一种。打开SpriteManage类,用下面的代码调用SpriteList.Add方法,这些代码放在SpawnEnemy方法的尾部。

spriteList.Add(

new EvadingSprite (Game.Content.Load<Texture2D>(@"images/skullball"),

position, new Point(75, 75), 10, new Point(0, 0),

new Point(6, 8), speed, "skullcollision", this, .75f, 150, 0));

还有以下的代码:

// Get random number

int random = ((Game1)Game).rnd.Next(100);

if (random < likelihoodAutomated)

{

// Create AutomatedSprite

122 | Chapter 7: Putting It All Together

spriteList.Add(

new AutomatedSprite(Game.Content.Load<Texture2D>(@"images/skullball"),

position, new Point(75, 75), 10, new Point(0,0), new Point(6, 8),

speed, "skullcollision", 0));

}

else if (random < likelihoodAutomated +

likelihoodChasing)

{

// Create ChasingSprite

spriteList.Add(

new ChasingSprite(Game.Content.Load<Texture2D>(@"images/skullball"),

position, new Point(75, 75), 10, new Point(0,0), new Point(6, 8),

speed, "skullcollision", this, 0)); }

else

{

// Create EvadingSprite

spriteList.Add(

new EvadingSprite(Game.Content.Load<Texture2D>(@"images/skullball"),

position, new Point(75, 75), 10, new Point(0, 0), new Point(6, 8),

speed, "skullcollision", this, .75f, 150, 0));

}

这段代码生成一个0-99的随机数,然后拿这个数跟表示AutomatedSprites出现的概率的变量比较,如果这个数小于这个变量,则生成AutomatedSprites。如果不小于,则和AutomatedSpritesChasingSprites两种概率的和比较大小。如果小于,则生成ChasingSprites,如果不小于,则生成EvadingSprites

如果你觉得这个说不通的话,你可以这么理解:取出这个例子那些变量的值,随机数(就是在0-99之间的那个数)首先被拿来判断是否小于75。如果小于,一个AutomatedSprites将被创建。这就说明了,有75%的概率会创建一个AutomatedSprites对象,这也正是你想要的。如果随机数大于75,那就再看看这个随机数是否小于95(即,AutomatedSprites的概率—75%ChasingSprites的概率—20%的和)。因为如果随机数小于75的话,就绝对不会进行后面这个比较,偶尔还会比较一下这个值是否处于7594之间(这个也就是ChasingSprites出现的概率,20%,再次强调一下,这正是你想要的概率)。最终,如果以上的情况都不为真的话,一个EvadingSprites对象将会被创建,换句话说,如果随机数是94-99之间的话,正好是你想要的5%的概率。

咩哈哈,咱们走一个~编译然后运行游戏,你应该会注意到大部分生成的都是AutomatedSprites,还夹杂着一些ChasingSprites,偶尔还能看见打酱油的EvadingSprites路过……太给力啦~

现在问题是,游戏到了这个地步,虽然不同种类的精灵有着不同的行为,但是他们看起来却是一样的。这不仅会让游戏变得无聊,也会让玩家感到疑惑——长得相似的物体不是应该做一些相似的事情吗?所以,你需要为每个不同种类的精灵写一些区别……

原创粉丝点击