編程游戲可助新手掌握現(xiàn)實(shí)編程方法
學(xué)習(xí)編程的過程可能是一個噩夢。熱情滿滿的編程員費(fèi)盡千辛萬苦,克服了那么多令人討厭的框架和百思不得其解的錯誤信息,終于,出成果了——屏幕上跳出”Hello, World!”這個字眼。然后,他疑惑了:“好吧,接下來怎么樣?我到底要怎么辦才能做出點(diǎn)像樣的東西來啊?”
當(dāng)游戲開發(fā)者看到有人在編程游戲上痛苦掙扎時,通常會發(fā)現(xiàn)“這整個東西就是拙劣游戲所走的路線:一堆徒勞無功的努力,不明所以的失敗案例,強(qiáng)加給新玩家的高級功能”等等。如果我們能夠單純地運(yùn)用一些簡單的游戲設(shè)計(jì)原則,學(xué)習(xí)編程將會更有趣而更有效得多。
那么,理想的編程游戲應(yīng)該是怎么樣的呢?

編程游戲
以編程教學(xué)為主題的游戲概念并不算什么新創(chuàng)意。當(dāng)下已有不少受歡迎的編程游戲,如《RoboRally》、《Robozzle》、《Robot Odyssey》和《Light-Bot》等。但這些游戲著重表現(xiàn)的是編程的抽象概念,而不是傳授真實(shí)的編程方法。這種情況類似于FPS游戲可讓人們捕捉到一些射擊的快感,但卻無從掌握真正的射擊本領(lǐng)。
所以,我們怎樣才能利用游戲教授真正意義上的編程方法?
編程游戲的關(guān)鍵特征
以下是一些關(guān)鍵的、游戲化的原則,可以讓編程學(xué)習(xí)更加有趣。我已經(jīng)根據(jù)這些原則制作了一個可玩的網(wǎng)頁游戲《CodeHero》。(游戲邦注:此游戲仍在測試,需要用到Flash Player和Actionscript 3.0.)

0.選擇一種真正的語言。許多編程游戲使用的是游戲性語言、游戲性界面、游戲性環(huán)境。雖然這種設(shè)計(jì)很適合小孩子,但成年的玩家很快就會注意到這種語言的局限性,同時認(rèn)為這門技術(shù)只適合游戲環(huán)境。顯然,真實(shí)編程語言的缺失使得從編程游戲到現(xiàn)實(shí)的編程之間產(chǎn)生了難以逾越的障礙。
解決辦法就是,使用專業(yè)的編程語言。保證語言的功能特征的完整,使玩家在掌握即學(xué)即用的語言的同時,還有充分的進(jìn)步空間。技巧就是把語言簡單地分成幾個易吸收的小塊。
1.容易入門。與所有游戲一樣,編程游戲的上手門檻要低。一般來說,學(xué)習(xí)編程的***步是安裝并啟動集成環(huán)境,但這并不是一個有趣的開端。為了消除這道障礙,代碼與主游戲UI必須同步顯示,玩家編寫好代碼后,可以直接在UI上運(yùn)行代碼并從UI上收到錯誤信息。
為了使用戶簡單快速地上手,還需要隱藏某些高級概念。比如,命名空間和主功能切入點(diǎn),雖然這對于完整的程序運(yùn)行是必要的,但對于初學(xué)者來說,這些內(nèi)容太空洞了,而且需要事先弄懂非常多的高級概念。大多數(shù)傳統(tǒng)的編程教學(xué)技術(shù)只會告訴學(xué)生把需要的代碼敲進(jìn)去,但基本上無視這些代碼。好游戲不會讓玩家去做一些他們摸不著頭腦的事!
讓編程容易呈現(xiàn)于游戲界面。仔細(xì)思考讓游戲?yàn)橥婕揖帉懞们腥朦c(diǎn)和錯誤處理程序,或是簡單地隱藏這些概念。
2.明確的反饋結(jié)果。編程新手寫的代碼應(yīng)該通過動畫和聲音讓其清楚地看到效果。
大多數(shù)代碼的運(yùn)行是可視的。但是,“int a = 4 + 3;”這串代碼的運(yùn)行,用戶是看不到效果的。好游戲的動作輸出總是很明顯——編程游戲也應(yīng)該如此。理想情況是,上述代碼語句能夠在特殊的編譯器中運(yùn)行,而這個編譯器必須能夠重寫“+”運(yùn)算符,如,一個顯示4+3的圖表,然后結(jié)果7存在一個稱為“a”的變量中。當(dāng)然,不可能每一種語言都這樣,所以也許可以讓用戶編寫一個顯示輸出的函數(shù),如儲存(“a”, add (4, 3))——可能是一個有效的解決辦法。無論怎樣,編程游戲應(yīng)該有一個明確的、可檢測的輸出結(jié)果。
3.失敗幫助。剛?cè)腴T的代碼寫手可能會因?yàn)楦鞣N各樣的原因而失?。赫Z法錯誤、異常、無限循環(huán)和邏輯錯誤等。理想的情況是,游戲應(yīng)該檢測到最普遍的編寫錯誤并提供修改指導(dǎo)。
4.清楚可達(dá)的目標(biāo)。開始編程最困難的一部分是決定編寫內(nèi)容。編寫內(nèi)容取決于編程員的技術(shù)水平。不幸的是,大多數(shù)新代碼寫手并不知道自己能寫什么,不能寫什么(大家都知道有不少新手程序員妄想從零起點(diǎn)寫出一款FPS)。編程游戲應(yīng)該追蹤用戶已經(jīng)掌握的技術(shù),然后選擇用戶可以達(dá)到的目標(biāo)。例如,如果編程游戲已經(jīng)教會用戶如何循環(huán),那就可以在數(shù)組部分中涉及循環(huán)。事實(shí)上,在教授新知識的同時,迫使玩家使用之前學(xué)會的內(nèi)容可以強(qiáng)化舊概念的記憶,即溫故知新。
總之,游戲應(yīng)該呈現(xiàn)用戶已知的知識能解決的問題。
其他例子
還有其他一些程序運(yùn)用了類似的技術(shù)。例如,Code School是一個商業(yè)教學(xué)網(wǎng)站,它通過代碼界面互動地教授如“Ruby on Rails”這樣的課題。(注:但因?yàn)橐顿M(fèi),所以作者沒試過。)
結(jié)論
設(shè)計(jì)并制作一款好的編程學(xué)習(xí)游戲應(yīng)該很貼近廣大開發(fā)者的需求。畢竟,沒有程序員,就沒有這么多游戲。除了對游戲產(chǎn)業(yè)的實(shí)際效用,當(dāng)運(yùn)用于現(xiàn)實(shí)世界時,這種設(shè)計(jì)訓(xùn)練還展現(xiàn)出游戲設(shè)計(jì)的價(jià)值所在。雖然這類游戲存在于封閉的空間,但在現(xiàn)實(shí)的背景之下,其傳達(dá)的知識是無價(jià)的。
原文:http://gamerboom.com/archives/37399
【編輯推薦】