2. 對游戲類進(jìn)行完善
現(xiàn)在寶石類中已經(jīng)包含了顯示玩家控制的寶石所需要的函數(shù)。我們接下來看看如何對CGemDropsGame類進(jìn)行處理。
為了創(chuàng)建用于玩家控制的寶石,需要能夠隨機(jī)生成寶石顏色。在概要設(shè)計(jì)時(shí)已經(jīng)說明過,在前20對落下的寶石中將只采用4種顏色,超過20對、在40對之前寶石的顏色增加為5種,最后寶石的顏色變?yōu)?種。此外,在100對以后,我們將用一個(gè)比較小的概率來生成彩虹寶石。
為了能夠簡單地隨機(jī)生成寶石顏色,我們將這個(gè)操作包裝到一個(gè)函數(shù)中,即Generate-
RandomGemColor函數(shù),如程序清單8-17所示。
為新寶石隨機(jī)生成顏色
/// <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變量來確定返回值中寶石顏色的范圍,從而得到是否應(yīng)該偶爾生成一個(gè)彩虹寶石。
為了對寶石的運(yùn)動(dòng)進(jìn)行跟蹤,我們要聲明一個(gè)二元數(shù)組來保存它們的詳細(xì)信息。該數(shù)組為類級別的變量,名為_playerGems。同時(shí),我們還要?jiǎng)?chuàng)建一個(gè)二元數(shù)組來存儲(chǔ)下一對將要出現(xiàn)的寶石的詳細(xì)信息。該數(shù)組名為_playerNextGems。這兩個(gè)數(shù)組的聲明如程序清單。