陳凱


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