陳凱
初學(xué)程序設(shè)計(jì)者很難真正體會(huì)設(shè)計(jì)一個(gè)“有用”程序的完整過程,因?yàn)樗鲆姷拇蟛糠殖绦蛟O(shè)計(jì)任務(wù),其實(shí)都是為了便于學(xué)習(xí)者入門而被精心構(gòu)造好的。例如,通過判定一個(gè)數(shù)的奇偶性,來熟悉分支結(jié)構(gòu);通過1+2+3+4+……+100的累加,來熟悉循環(huán)結(jié)構(gòu)。一般來說,在講解程序代碼語法的時(shí)候,程序結(jié)構(gòu)就自然而然地呈現(xiàn)在眼前了,或者說,為了講程序結(jié)構(gòu),不得不先引入代碼或偽代碼。對(duì)于一個(gè)從沒有接觸過編程和算法的初學(xué)者來說,他所面對(duì)的就是這些所謂的需要解決的任務(wù),其實(shí)很難算得上是真正的數(shù)學(xué)問題,因而既缺乏趣味性,又不太容易給人以解決任務(wù)的成就感。也有人想從現(xiàn)實(shí)生活中尋找一些能引入程序結(jié)構(gòu)的問題,這當(dāng)然是有益的探索,但帶來的問題也不少,生活實(shí)景的復(fù)雜性和不確定性使得生活中實(shí)際問題的描述變得相當(dāng)復(fù)雜,而為了講解程序結(jié)構(gòu)而特意構(gòu)造出來的問題,往往因?yàn)楹雎粤酥T多生活細(xì)節(jié),多少讓人感覺純粹得有點(diǎn)不真實(shí)。然而,卻有一個(gè)簡(jiǎn)單、純粹而“真實(shí)”的可用于體驗(yàn)程序結(jié)構(gòu)的任務(wù),那就是設(shè)計(jì)游戲。雖然說游戲世界本身是虛擬的,但游戲的設(shè)計(jì)和游戲的通關(guān)過程,卻都是真實(shí)的任務(wù)。只要提供并限定好規(guī)定數(shù)量的游戲場(chǎng)景元素,那么就可以將設(shè)計(jì)游戲流程的任務(wù)交給學(xué)習(xí)者,然后不同的程序結(jié)構(gòu)就會(huì)在游戲流程的設(shè)計(jì)中逐一浮現(xiàn)出來。下面是一個(gè)叫“金幣王子”(也可以是其他名字)的游戲案例,除了作為探險(xiǎn)主角的王子,其他游戲場(chǎng)景元素只有這么幾項(xiàng):洞穴、惡魔、金幣數(shù)、成就值。幾個(gè)預(yù)設(shè)的規(guī)則是:某洞穴中有惡魔,打敗惡魔就可增加成就值,某洞穴有金幣,可按當(dāng)前成就值提取等量數(shù)值的金幣。為了使流程更加簡(jiǎn)潔,假設(shè)洞穴中的惡魔在被打敗后還會(huì)恢復(fù)原樣。
● 簡(jiǎn)單的游戲流程及游戲的實(shí)現(xiàn)
先看一個(gè)極其簡(jiǎn)單的游戲流程:王子進(jìn)入A洞穴打敗惡魔后,成就值加1→王子進(jìn)入B洞穴,根據(jù)成就值提取等量數(shù)值的金幣。以上描述很簡(jiǎn)單,游戲制作也不難,本文使用“RPG Maker XP”來做演示,這款軟件自稱“簡(jiǎn)單到孩子也能使用”,網(wǎng)絡(luò)上有試用版下載,大家也可以嘗試其他各種RPG游戲制作工具,使用方法大同小異。游戲設(shè)計(jì)可分為地圖設(shè)計(jì)和事件設(shè)計(jì)兩個(gè)步驟。
1.地圖設(shè)計(jì)
為簡(jiǎn)單起見,地圖可直接使用程序默認(rèn)的“草原”,然后在草地上添加兩個(gè)洞穴(如圖1)。軟件中有大量的圖標(biāo)和地圖背景可供選用,也可自己繪制圖標(biāo)和背景。
2.事件設(shè)計(jì)
A洞穴添加的事件為兩行,分別是“戰(zhàn)斗處理:小惡魔”和“變量操作:[0001]+=1”,這些事件并不需要打字輸入,只要點(diǎn)擊“執(zhí)行內(nèi)容”框中的菱形按鈕,就可通過向?qū)砑樱ㄈ缦马搱D2)。例如,可將[0001]號(hào)變量看作成就值,為了在打敗惡魔后增加成就值,可點(diǎn)開“操作變量”向?qū)Р磮D3所示進(jìn)行設(shè)置。
B洞穴添加事件也是兩行,分別是“變量操作:[0002]+=變量[0001]”和“文章:你因當(dāng)前成就值\V[0001]獲得金幣\V[0001],當(dāng)前共有金幣\V[0002]”。
以上變量操作仍然可以利用向?qū)硗瓿?。注意:這里操作數(shù)不是常量,而是變量[0001](如圖4)。
只有文章顯示需要手工輸入,這樣在游戲中就會(huì)跳出對(duì)話框,文字中需要展現(xiàn)的成就值和金幣值可用變量“\V[0001]”和“\V[0002]”表示(如圖5)。
整個(gè)游戲就完成了,熟練后,操作過程僅幾分鐘而已。點(diǎn)“前進(jìn)”按鈕可以調(diào)試程序:玩家到A洞穴打惡魔就可以獲得成就值,然后到B洞穴根據(jù)當(dāng)前成就值領(lǐng)取金幣。這樣游戲就運(yùn)行起來了(如圖6)。
● 帶分支的游戲流程
但上述游戲流程有個(gè)漏洞,因?yàn)橥婕铱梢圆煌5氐紹洞穴中領(lǐng)取金幣,所以就需要增加一個(gè)條件判斷,必須要和A洞穴的惡魔交戰(zhàn)后才可獲得金幣。要實(shí)現(xiàn)這個(gè)功能也很簡(jiǎn)單,首先在A洞穴的事件中,加入一行變量的賦值:“變量操作:[0003]=1”,然后在B洞穴的事件中,點(diǎn)出一個(gè)“條件分歧”向?qū)Вㄈ鐖D7)。
這時(shí),軟件就會(huì)自動(dòng)生成一個(gè)分支結(jié)構(gòu)的框架,將先前的命令粘貼到框架預(yù)留的空白處,另外再加入一行“變量操作:[0003]=0”即可(如圖8)。
這樣一來,只有在與惡魔戰(zhàn)斗后,變量[0003]才會(huì)變成“1”,而領(lǐng)取金幣后,變量[0003]就變回“0”。可見,分支結(jié)構(gòu)的實(shí)現(xiàn)也非常簡(jiǎn)單。endprint