2. 对游戏类进行完善
现在宝石类中已经包含了显示玩家控制的宝石所需要的函数。我们接下来看看如何对CGemDropsGame类进行处理。
为了创建用于玩家控制的宝石,需要能够随机生成宝石颜色。在概要设计时已经说明过,在前20对落下的宝石中将只采用4种颜色,超过20对、在40对之前宝石的颜色增加为5种,最后宝石的颜色变为6种。此外,在100对以后,我们将用一个比较小的概率来生成彩虹宝石。
为了能够简单地随机生成宝石颜色,我们将这个操作包装到一个函数中,即Generate-
RandomGemColor函数,如程序清单8-17所示。
为新宝石随机生成颜色
/// <summary>
/// Returns a random gem color.
/// </summary>
/// <remarks>The range of colors returned will slowly increase as the
/// game progresses.</remarks>
private int GenerateRandomGemColor()
{
// We'll generate a gem at random based upon how many pieces the player
// has dropped.
// For the first few turns, we'll generate just the first four gem colors
if (_piecesDropped < 20) return Random.Next(0, 4);
// For the next few turns, we'll generate the first five gem colors
if (_piecesDropped < 40) return Random.Next(0, 5);
// After 100 pieces, we'll have a 1-in-200 chance of generating a "rainbow"
// gem
if (_piecesDropped >= 100 && Random.Next(200) == 0) return GEMCOLOR_RAINBOW;
// Otherwise return any of the available gem colors
return Random.Next(0, 6);
}
这段代码利用_piecesDropped变量来确定返回值中宝石颜色的范围,从而得到是否应该偶尔生成一个彩虹宝石。
为了对宝石的运动进行跟踪,我们要声明一个二元数组来保存它们的详细信息。该数组为类级别的变量,名为_playerGems。同时,我们还要创建一个二元数组来存储下一对将要出现的宝石的详细信息。该数组名为_playerNextGems。这两个数组的声明如程序清单。