資源描述:
《網(wǎng)絡(luò)棋牌游戲設(shè)計(jì)方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、網(wǎng)絡(luò)棋牌游戲設(shè)計(jì)方法先前在論壇中看了一位朋友讓大家給他查看一下他寫的推箱子游戲?yàn)槭裁闯鲥e(cuò),我第一想法就是這很難做到,別人寫的程序,特別是實(shí)現(xiàn)流程和邏輯只有作者本人比較清楚,外人是要花費(fèi)一定時(shí)間才能把握程序的中主體設(shè)計(jì)思想再進(jìn)一步研究。我想除了學(xué)習(xí)或項(xiàng)目要求是很少人愿意花這樣的精力去讀別人的代碼的,而粗看他的代碼,我覺得是他本人在程序設(shè)計(jì)的思想上出了差錯(cuò),而細(xì)想現(xiàn)在對引擎或硬件知識介紹的多卻很少有講解怎么實(shí)現(xiàn)對現(xiàn)實(shí)的抽象,即怎么合理的去設(shè)計(jì)游戲,實(shí)用軟件......所以想寫這樣一篇文章來和大家探討一下“棋盤”游戲的設(shè)計(jì)思路。??“棋盤”
2、游戲的種類豐富,俄羅斯方塊,推箱子,象棋,五子棋......等等這些都可以歸類到“棋盤”游戲中來。面對這類游戲設(shè)計(jì)的時(shí)候,我本人的見解是首先對“棋盤”做研究,實(shí)在不行再去研究“棋子”。換句話說,就是以游戲中的活動(dòng)區(qū)域?yàn)檠芯繉ο?,像象棋就是他的棋盤,俄羅斯方塊就是他整個(gè)的方塊的活動(dòng)區(qū)域。我們這里姑且就把他叫做“棋盤法”。??一.“棋盤法”基本實(shí)現(xiàn)方法??“棋盤法”實(shí)現(xiàn)起來其實(shí)很簡單,一般來說就是把棋盤看作一個(gè)網(wǎng)格,那么我們就把他看作與之對應(yīng)的二維數(shù)組。然后適當(dāng)組織數(shù)據(jù)結(jié)構(gòu)去抽象旗子,制定規(guī)?則,這樣就很容易實(shí)現(xiàn)游戲。??二.“棋盤法”的
3、優(yōu)缺點(diǎn)??任何一個(gè)算法或思想都是有優(yōu)缺點(diǎn)的,而我們的“棋盤法”的最大優(yōu)點(diǎn)就是可以方便我們組織數(shù)據(jù)結(jié)構(gòu),簡化了游戲規(guī)則的編寫,使我們編程時(shí)思路比較清晰直觀,通常就是直接根據(jù)游戲?qū)嶋H規(guī)則編寫就可以了,這個(gè)我們會(huì)以實(shí)例加以說明。然而他最大的缺點(diǎn)就是可能耗費(fèi)大量內(nèi)存,試想,如果我們的棋盤規(guī)格很大,那我們就得開辟一個(gè)比較大的二維數(shù)組,并且如果你要將代碼移植到單片機(jī),ARM等硬件平臺上。那你就不得不考慮自己的方法問題,在這些硬件平臺上內(nèi)存資源是極其寶貴的。也許有朋友會(huì)說那在PC機(jī)上總可以的。的確現(xiàn)在PC機(jī)資源豐富,功能強(qiáng)大,可有時(shí)候還是不能如你所
4、愿。一個(gè)很經(jīng)典的例子就是五子棋的人工智能,為了讓五子棋在人機(jī)對戰(zhàn)中具備攻防兼?zhèn)涞闹悄?,我們只有開辟一個(gè)于棋盤規(guī)格相呼應(yīng)的二維的樹組來記錄棋盤上各點(diǎn)的勝算幾率,(有興趣的朋友可以到網(wǎng)上去找找資料)這樣的話,在DOS下你就只能開辟一個(gè)約10X10的棋盤,即使在WINDOS下也只能大約16X16的棋盤。(當(dāng)然,這里是說直接開辟數(shù)組,采用特別技術(shù)的不算)。所以說,這個(gè)“棋盤法”也是有他自己的限制的。??三.“棋盤法”的適用條件??根據(jù)上面的介紹,我們應(yīng)該很容易總結(jié)出“棋盤法”的適用條件。即棋盤規(guī)格適中,棋子會(huì)頻繁的在棋盤中移動(dòng)。游戲規(guī)則若復(fù)雜
5、更應(yīng)首先推選“棋盤法”。很好的一個(gè)例子就是象棋。象棋的走法規(guī)則復(fù)雜,而采用棋盤法就可以很直觀的把規(guī)則做出來。當(dāng)然其中要注意的是,程序員要考慮好使用內(nèi)存的大小,考慮好游戲編寫方法和內(nèi)存數(shù)據(jù)管理技巧的相匹配。比如,一個(gè)很經(jīng)典的游戲--貪食蛇。他就不適合用“棋盤法”或是說用這個(gè)方法不合算。貪食蛇的棋盤很大,可蛇身并不會(huì)很大,若采用“棋盤法”那內(nèi)存無疑是浪費(fèi),而且在規(guī)則實(shí)現(xiàn)上也是直接以蛇身作為研究對象好解決問題。所以在編寫這類游戲時(shí)得在宏觀上對他有個(gè)較全面的考慮。??四.“棋盤法”的例子??前面說過,可以用“棋盤法”編寫的游戲很多,我們以前玩
6、的小游戲我基本都寫過,基于方便說明問題和論壇朋友提出的幫忙看看他的推箱子游戲。那下面我們就拿推箱子游戲來說明“棋盤法”的編寫過程。?1.前期準(zhǔn)備??在編寫這個(gè)游戲之前,我們先個(gè)游戲找個(gè)主題,我的是“植樹”。即“箱子其實(shí)就是樹,由一個(gè)小人搬運(yùn)到樹坑中。首先我們開辟一個(gè)12X12大小的二維數(shù)組作為棋盤。然后我們思考一下推箱子的棋子有哪些?一個(gè)是小人,可移動(dòng)的數(shù),還有樹坑。我們的游戲過程也很簡單,在棋盤上有一圈籬笆,這個(gè)是小人的活動(dòng)方法,其中有幾個(gè)固定的樹坑,還有分散在不同地方的樹,小人要推動(dòng)這些樹全部進(jìn)入樹坑就算游戲通關(guān)。有了以上思考,我
7、們就著手來實(shí)現(xiàn)。??2.定義數(shù)據(jù)??我們開辟一個(gè)12X12的二維數(shù)組表示棋盤,然后我們來定義個(gè)數(shù)值代表的含義。數(shù)值為0表示此格子為背景,1表示為籬笆,2表示為樹,3表示為樹坑,4表示人小人,5表示為樹已移植到樹坑。?有了此定義,我們就寫出顯示各棋子的模塊:voidDot_pawn(charx,chary,charmode);/*在棋盤相應(yīng)位置畫出棋子,其中mode為0表示背景,1表示籬笆,2表示未移植樹,3表示樹坑,4表示人,5表示樹種坑中*/voidDot_pawn(charx,chary,charmode){char*name_b
8、mp;switch(mode)/*根據(jù)Mode決定顯示的圖片*/{case0:name_bmp="kong.bmp";break;case1:name_bmp="liba.bmp";break;case2:name_bm