Pages

Friday, February 11, 2011

Rubywarrior has climbed to the top of the tower

繼上篇 Rubywarrior for the beginner 介紹,Ruby warrior 是一款設計來教學 Ruby 程式語言,透過互動規劃 AI 來過關的娛樂遊戲。我們扮演一名戰士要爬到高塔的位置取得珍貴紅寶石。每一層樓我們要寫 Ruby script 來建構控制我們的戰士來對抗敵人,解救俘虜,取得階梯。我們每層樓開戰以前可以得到一些線索可循,但是不知道開戰後會發生什麼事情。我們必須要寫足夠的 AI 技巧來讓我們的戰士足夠應付每一關。

在 Beginner 的塔有 1~9 關,每一關會發生什麼事情我們不會知道,僅知道這關會長什麼樣子,戰士可以用哪些技能來搭配破這關,當 Ruby script 跑下去就見真章了。在這過程我們除了要學寫 Ruby ,我們還可以在過程學到了什麼呢?

AI 分析能力,練習預測與判斷,列出會發生的狀況,這過程好比我們在開發程式前,先把 Functional Spec 先確定,再寫程式碼。好幾關我都是必須要先把白紙拿出來,畫了幾個狀況,才能規劃出我的邏輯判斷式。

程式碼不是拋棄式的。每一關的戰士是來自上一關,一層一層往上爬,所以戰士判斷能力是會接續的。當知道這點我們就不會亂寫我們的程式碼,或者硬寫只是為了過上一關。因為每過一關,進入到下一關,我們是必須要接收來自上一關的程式碼,寫出更好維護與增加擴充的程式碼。

Refactoring (重構)的練習。破該層樓是最終目標,所以能打敗敵人過關是最基本條件,這樣分數未必高分,所以我們如果以可以破關進入下一關為跑出來結果為對前提,再求 我們的分數要高,所以程式碼改寫求更好是必須要的。例如俘虜忘記解救,誤判誤殺,或者休息過多浪費回合數,這些都是可以破關但是可以改進的空間。

當學了基本的 Ruby 基本的判斷式 if else、定義有效率的 functions 可以讓程式碼更清楚與重複利用、透過陣列判斷增加更多分析方式,這 9 關即可輕鬆破關。當全部破關即來到了 Epic mode,即是不但可以一層一層關卡過,還有辦法可以一口氣全部過,且拿高分是最好的目標,這邊為我的 Rubywarrior 程式碼 。我規劃這些考量的先後順序為,解救人質、安全情況下休息補充體力、攻擊敵人、射擊敵人、開始休息、前進、如果需要轉身移動。


CONGRATULATIONS! You have climbed to the top of the tower and rescued the fair maiden Ruby. Your average grade for this tower is: A 破關最新紀錄 ,不知道您是否也因為破了 Beginner 而開始學會基本 Ruby script 撰寫方式了呢?這麼有趣又能學會語言的好遊戲工具,希望你也試試。

No comments:

Post a Comment