日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

正文

游戲案例:GemDrops(9)

Windows移動(dòng)游戲開(kāi)發(fā)實(shí)戰(zhàn) 作者:(美)Adam Dawes


 

8.2.5  重置游戲

我們已經(jīng)定義好了寶石對(duì)象,接下來(lái)就向游戲中添加一些進(jìn)一步的功能來(lái)使用它。

該游戲基本上是基于寶石網(wǎng)格的,所以我們應(yīng)該能夠在游戲中對(duì)該網(wǎng)格進(jìn)行存儲(chǔ)。可以使用不同的結(jié)構(gòu)來(lái)實(shí)現(xiàn)網(wǎng)格,但最簡(jiǎn)單的辦法就是聲明一個(gè)數(shù)組。數(shù)組中的每個(gè)元素都包含了一個(gè)CObjGem實(shí)例,表示在游戲區(qū)域中該位置上的寶石。如果該位置上沒(méi)有寶石,就為null。

為了指定數(shù)組的大小,我們還聲明了兩個(gè)常量,用于指定整個(gè)游戲區(qū)域橫向和縱向上能夠包含多少個(gè)寶石。如果以后想對(duì)游戲區(qū)域使用一個(gè)不同的尺寸,那么可以直接修改這些常量,其他所有內(nèi)容都會(huì)自動(dòng)調(diào)整。

程序清單8-8  聲明游戲區(qū)域數(shù)組

// The dimensions of the game board (gems across and gems down)

public const int BOARD_GEMS_ACROSS = 7;

public const int BOARD_GEMS_DOWN = 15;

// Create an array to hold the game board -- all our dropped gems will appear 

// here

private CObjGem[,] _gameBoard = new CObjGem[BOARD_GEMS_ACROSS, BOARD_GEMS_DOWN];

我們還為其他有用的信息添加了屬性,這些信息都是游戲所需的。同時(shí)還提供了用于記錄游戲是否暫停或結(jié)束的標(biāo)志。添加的其他變量分別用于記錄玩家的得分、跟蹤玩家在游戲中堆放好了多少組寶石。

 

// Track whether the game has finished

private bool _gameOver;

// Track whether the game is paused

private bool _paused;

// The player's current score

private int _playerScore;

// The number of pieces that have dropped into the game.

// We'll use this to gradually increase the game difficulty

private int _piecesDropped;

實(shí)現(xiàn)Reset功能所需要的所有東西現(xiàn)在都已經(jīng)到位。我們將通過(guò)Reset函數(shù)將游戲恢復(fù)到初始狀態(tài),使玩家可以重新開(kāi)始游戲。

我們首先將所有簡(jiǎn)單的游戲?qū)傩曰謴?fù)為其初始值。將_gameOver設(shè)置為false,將_playerScore變量及_piecesDropped變量設(shè)置為0。與上一個(gè)示例中所進(jìn)行的操作相似,然后清除所有游戲?qū)ο?,從而使游戲引擎重置為一個(gè)空狀態(tài)。

接下來(lái),對(duì)游戲區(qū)域進(jìn)行初始化。如果在前一次游戲已經(jīng)結(jié)束后我們才進(jìn)行重置,那么游戲區(qū)域中會(huì)包含前面遺留下來(lái)的信息。因此,我們可以調(diào)用ClearBoard函數(shù)(稍后就會(huì)看到該函數(shù))將已經(jīng)顯示在游戲區(qū)域中的寶石清空。這樣就使游戲恢復(fù)為空白,從而可以重玩。Reset函數(shù)目前的代碼如程序清單。

 

/// <summary>

/// Reset the game to its detault state

/// </summary>

public override void Reset()

{

base.Reset();

// Reset game variables

_gameOver = false;

_playerScore = 0;

_piecesDropped = 0;

// Clear any existing game objects

GameObjects.Clear();

// Clear the game board

ClearBoard();

// Ensure the information displayed on the game form is up to date

UpdateForm();

}

這里調(diào)用的ClearBoard函數(shù)只是簡(jiǎn)單地對(duì)_gameBoard數(shù)組中的元素進(jìn)行遍歷,檢測(cè)每個(gè)元素中是否包含了寶石。如果是,就將寶石對(duì)象終止,并從游戲區(qū)域中將該寶石對(duì)象清除。遍歷完成后,游戲區(qū)域就被完全清空。


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) rgspecialties.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)