天天看點

Silverlight C# 遊戲開發:未寫代碼先設計

本文隻有兩個主題:

1、遊戲設計清晰的必要

2、循環邏輯的代碼設計

遊戲設計:

未寫代碼先設計,這是一個非常重要的建議,如果在寫代碼前還不知道要開發一個什麼遊戲,那麼會遇上很多問題,這些問題包括:

代碼編寫異常艱難

半路重構

工作量無法估計

預算嚴重超支

……

如果第一次開發遊戲,那麼就容易有兩種情況,第一,遊戲就那樣還用的着設計嗎,第二,無從下手,到底該怎麼設計,第一種肯定考慮不周全,這是大多數情況,第二種比第一種更悲慘,啟示無論那種情況,把問題羅列出來,到一起回答就可以解決很多,比如說,可以嘗試回答如下問題:

遊戲主題是什麼?

是什麼類型的遊戲,RPG?SLG?FPS?MMO?

有沒有劇情?

是單機的還是網絡的?

單機的話,單人還是雙人的?

網絡的話,是區域網路還是網際網路?

遊戲風格是什麼樣的?

如何操控?

2D還是3D?

打算讓玩家玩多久到頭?

都是什麼玩家玩?

應用技術是那些?

目标終端是否可承載?

能夠滿足玩家什麼需求?

确切來說,以上的問題僅僅是遊戲設計的一個小部分,按照經驗,可能為一個或者多個問題要研究很久,舉例來說,遊戲類型将制約代碼的主要邏輯,比如說劇情類的遊戲就必須要需要一個劇情腳本,而相應的政策遊戲相比劇情腳本更加需要智能腳本,這樣的情況下,你的代碼和處理就需要有很多的考慮。

比如以前我們在開發網絡遊戲的時候,有一個項目地圖是一個整體,不需要獨立的地圖編輯器去編輯,隻需要在3DMAX中将物體名稱起好,所有的行為對應到一張Excel表,如果是這樣的一種模式,地圖編輯工具就不需要花太大力氣……

可能所在的團隊有策劃的支援,可以省去很多力氣,然而最佳的情況下是開發者就是策劃,哈,也許會着磚頭吧。

代碼設計

首先得了解遊戲運作的機制,在考慮更加深層次的東西,任何遊戲都是一個循環體,就如下圖所示:

<a target="_blank" href="http://blog.51cto.com/attachment/201111/165557623.jpg"></a>

可能覺得,這和Silverlight遊戲開發有什麼關系呢,這不是用戶端遊戲的開發做法嗎?在遊戲誕生的那天起,它本身就是一個循環,在程式中更加是一個循環體,這個基礎理論是都适用,我們了解了循環機制,就可以依據這個流程設計代碼,上面就夠了嗎?讓我們展開來看看:

<a target="_blank" href="http://blog.51cto.com/attachment/201111/165606546.jpg"></a>

上面隻是寫了一個大概,如果你打算開發一個遊戲的話,需要考慮的更多,如果轉換到最簡單的僞代碼的話則是:

GameLoop

while( Game.State != emGameState.Exit)

{

switch(Game.State)

case emGameState.Init:

Game.Init();

break;

case emGameState.Loop:

Game.Loop();

case emGameState.Exit:

Game.Exit();

}

上面是一個最簡單的代碼設計,隻需要在Game類中執行相應的邏輯即可,但是是否想過這樣肯定不行,如果按照這個樣子寫下去,那麼就不是一個完整的遊戲,最多隻是一個展示品,要做成一個完整的遊戲,就得在主要循環裡加入更多的行為,最好的方法莫過于先構想流程:

<a target="_blank" href="http://blog.51cto.com/attachment/201111/165615763.jpg"></a>

按照上面的流程圖,那麼循環代碼可能是這樣的:

case emGameState.Menu:

Game.Menu();

case emGameState.Starting:

Game.Starting();

Game.LoopLogic();

case emGameState.Rest:

Game.Rest();

可是問題又來了,無端的循環是不是造成了系統浪費,确實,無論在什麼技術上都是在考慮如何解決不必要的開銷,而且我們用的Silverlight來開發,c#又是這麼面向對象的語言,這麼寫太不進階,引入進階程式設計理論該如何做呢,這個部分以後再說,在這裡抛磚引玉,看看下圖也許會有啟示:)

<a target="_blank" href="http://blog.51cto.com/attachment/201111/165626376.gif"></a>

本文轉自nowpaper 51CTO部落格,原文連結:http://blog.51cto.com/nowpaper/712608