用C#+XML技術(shù)開發(fā)游戲SokobanPro

字號(hào):

Sokoban Pro是經(jīng)典Sokoban難題游戲的一個(gè)現(xiàn)代版本。本文討論從XML技術(shù)角度來實(shí)現(xiàn)該游戲。下圖是游戲運(yùn)行中的一個(gè)快照。
    Sokoban Pro是經(jīng)典Sokoban難題游戲的一個(gè)現(xiàn)代版本。該游戲極其簡(jiǎn)單,然而該游戲卻是極具挑戰(zhàn)性和富有吸引力。游戲規(guī)則是把所有的盒子移動(dòng)到正確的地方。你可以僅僅推動(dòng)一個(gè)盒子,而不是拉。你可以隨時(shí)通過按動(dòng)U鍵來撤消你的上次移動(dòng)。
    該游戲的一個(gè)現(xiàn)代版本如今在Sokoban Pro網(wǎng)站上可以玩了。因?yàn)樗械淖钪匾牟糠?如讀取/寫XML,移動(dòng)和繪畫)在本文的源代碼中提供,所以我決定在此討論第一個(gè)原始的版本。
    最近的版本(v1.0b)相對(duì)于現(xiàn)在這個(gè)版本包括了下列幾個(gè)方面的改進(jìn):
    ·"官方"beta發(fā)行版
    ·增加菜單支持
    ·我發(fā)現(xiàn)使窗口的大小在每一級(jí)中改變是十分令人惱火的事情,所以在當(dāng)前版本中它變?yōu)楣潭ǖ?BR>    ·你可以在不同級(jí)間來回跳動(dòng),但是僅限于你以前已經(jīng)完成的級(jí)上
    ·針對(duì)級(jí)別的撤消功能
    ·Splash屏幕和圖標(biāo)
    ·修改了許多錯(cuò)誤
    ·也許還有其它一些
    在游戲開始時(shí),你可以創(chuàng)建一個(gè)新的玩家或選擇一個(gè)現(xiàn)有的玩家。既然Sokoban Pro能夠保存你的進(jìn)度,那么你還可以選擇是否你想要繼續(xù)你的上一次游戲。在創(chuàng)建一個(gè)玩家后,你可以選擇一個(gè)級(jí)別集合。一個(gè)級(jí)別集合包含你喜歡的盡可能多的級(jí)別。Sokoban Pro帶有原來的BoxWorld游戲中的前40個(gè)級(jí)別。級(jí)別集合被存儲(chǔ)在XML文件中,這意味著你可以從互聯(lián)網(wǎng)上不同的Sokoban站點(diǎn)下載級(jí)別集合。你還可以創(chuàng)建你自己的級(jí)別。當(dāng)你把它們放到級(jí)別目錄中時(shí),Sokoban Pro將自動(dòng)地識(shí)別級(jí)別集合。
    你用一個(gè)XML文件來實(shí)現(xiàn)保存游戲。它保存最后玩完的級(jí)別集合和最后的玩的級(jí)別,這樣你可以從你上次玩游戲時(shí)離開的地方繼續(xù)玩下去。另外,它還保存你已經(jīng)完成的級(jí)別及相應(yīng)的得分(移動(dòng)和推的數(shù)目)。如果你重玩一級(jí)并且你的執(zhí)行更好一些的話,那么你的分?jǐn)?shù)將被更新。
    基本上,該游戲由下列幾個(gè)類組成:
    ·LevelSet-包含所有的有關(guān)一個(gè)級(jí)別集合(作者信息,級(jí)別數(shù)目,等等……)的信息。它也把級(jí)別集合XML中的級(jí)別裝載到內(nèi)存中。
    ·Level-代表在一個(gè)級(jí)別集合中的一個(gè)級(jí)別。這里發(fā)生的最重要的事情是它追蹤所有的你的移動(dòng)。在玩家移動(dòng)或推一個(gè)盒子時(shí),它更新在一個(gè)級(jí)別中的項(xiàng)。它更新相應(yīng)的圖形并實(shí)現(xiàn)撤消功能,并且最后在屏幕上繪制出級(jí)別。
    ·PlayerData-追蹤所有的玩家信息?;旧希从吵瞿愕腟aveGame。
    ·Board(Form)-主表單處理所有的玩家輸入并且初始化所有的對(duì)象。
    ·Players(Form)-讓你創(chuàng)建一新的玩家或選擇一個(gè)現(xiàn)有的玩家。
    ·Levels(Form)-讓你選擇一個(gè)你想要玩的級(jí)別集合。