(搬運自我在SegmentFault的博客)
編程游戲(不是游戲編程,也不是編游戲……),也叫代碼游戲,代表着市面上一類特別的游戲。它在游戲中加入了編程的特性(或許反過來說也對)。本文意在梳理市面上的一些編程游戲,並對其玩法進行介紹和評價。
選擇標准
- 項目必須是在時間上是較新的,或者有一定的知名度。不包括年代久遠且不活躍的、知名度過低的。
- 是電子游戲而不是實體游戲(如桌游)。
- 能在線游戲,或者可以獲得可運行的程序。
經過這樣一個簡單的篩選,我得到了一個長長的項目列表。這里面有知名度較高的CodeCombat和騰訊的Code Tank,也有比較新的創業公司的游戲如Glitchspace和Hakitzu。
以下是本文中涉及到的游戲列表:
- Github的熱門項目 CodeCombat
- 代碼坦克 Code Tank
- 第一人稱編程解謎游戲 Glitchspace
- 機器人格斗 Hakitzu
- 代碼龜 Algoid
- 用Java學習魔法 CodeSpells
- 微軟的在線編程游戲 Code Hunt
- 機器人大戰 Robocode
- 解謎闖關游戲 Python Challenge
- 自動機編程 Manufactoria
首先我按照游戲的不同特征進行了分類。
玩法
游戲的玩法大致是通過編程控制游戲中的人物或道具,本文選擇的大部分的游戲都屬於此類。不過也有一類具有特殊的玩法,通常也被認為是編程游戲,本文稱之為謎題游戲。
前者中,游戲的主角通常是魔法師、機器人、坦克等。后者的代表有Python Challenge、Code Hunt和Manufactoria。
編程語言
游戲中的編程語言一般是已有的語言,或者是游戲自創的某種語言,或者沒有直接使用編程語言。
- CodeCombat支持語言最多。從最初只支持JavaScript到現在的JavaScript、Python、CoffeeScript、Clojure、Lua、IO。
- Code Tank和Hakitzu使用JavaScript。
- CodeSpells、Code Hunt和Robocode使用Java。此外,Code Hunt還支持微軟自家的C#。
- Algoid使用自己的類Logo語言。
- 其他的游戲中沒有直接使用編程語言。
游戲目標
游戲的目標通常有:
- 通過游戲使玩家學習某種語言。如Hakitzu和Code Hunt。
- 幫助孩子或初學者了解編程。如CodeCombat、Algoid和CodeSpells。
- 為熟悉編程的人提供編程對戰的平台。如Code Tank和Robocode。
- 不知道要干什么(益智)。如Manufactoria。
有了以上的了解,下面對幾個典型的游戲進行簡單介紹。
CodeCombat
CodeCombat是一個通過玩游戲來學習編程的網站,也是GitHub上最大的開源CoffeeScript項目,有上千程序員和玩家為其編寫程序、測試游戲。到目前為止,已經翻譯成17種國外語言。官方稱,他們網站的任務就是教會人們如何編程,游戲覆蓋編程菜鳥到大神各個階段,總共超過9千關。人們不需要任何編程知識即可了解程序的運行邏輯,並編出實用的代碼。(以下兩張圖片來自驅動之家)
在游戲中,通過代碼實現角色的移動、對話、攻擊、拾取和使用道具。在一開始的關卡中,玩家只要輸入順序執行的指令即可完成任務。隨着游戲的進行,玩家要完成的任務也更加復雜,玩家需要學習使用判斷、循環等語句,在這個過程中玩家不知不覺中就了解了編程。
想要深入了解可以看這篇評測。
和王國守衛戰類似的畫風再加上游戲有趣的劇情設定和眾包得到的豐富關卡,說他是當下編程游戲的佼佼者應該沒有什么異議吧。
Code Tank
Code Tank是由騰訊AlloyTeam開發的一款編程游戲。據說靈感來自上面提到的Robocode。引用一段自家的介紹:
CodeTank是一個非常有趣的競賽性編程游戲平台,通過幾行簡單的Javascript代碼和CodeTank API,每個人都可以方便的構建屬於自己富有智能和個性的坦克(Tank)機器人,並通過互聯網進行在線互動和競賽!CodeTank是 Code Game(代碼游戲,也叫編程游戲)的一種,可以讓你在娛樂的同時學習和提高Javascript編程水平以及進行人工智能的研究。它使用HTML5、CSS3等Web新技術構建的在線平台,天然的基於互聯網,Tank機器人的代碼不需要人工上傳下載,可以直接在線運行與其他選手進行戰斗。
這個游戲和上一個不同,並不是給初學者學習用的。我沒有太多JavaScript編程經驗,進入到游戲中不知道該干什么。進入游戲后首先要創建自己的坦克,之后就是編寫自己的代碼,實現AI控制坦克運動。最終目的是打敗其他玩家的坦克,和那些機器人比賽差不多。
CodeSpells
這是我本人比較喜歡的一款編程游戲,盡管它本身並不火,而且需要下載Java客戶端。下面這段話是它唯一的一段中文介紹:
這款游戲是由計算機學家 William Griswold 帶領的大四學生團隊開發的,游戲的主要受眾為高中生。研發團隊希望由此來開發學生們的創新力和想象力,讓他們主動地去學習知識。該作是一款第一人稱游戲。玩家將扮演一名和矮人們生活在荒島上的魔法師。因為矮人們失去了使用魔法的能力,所以作為魔法師的玩家將幫助矮人們完成魔法。這些咒語是以 Java 語言的形式呈現在玩家面前。玩家需要通過編寫這些語句來完成魔法。在幫助矮人們的同時,玩家還能通過一些解密游戲來獲得相應的成就,當然,同樣是通過 Java 語言的編寫。
通過這段視頻可以看到,該游戲所表現的內容較好地體現了面向對象的編程思想,玩家通過代碼可以支配游戲中的物品,進而改造游戲中的世界。
其他
剩下的那幾個我就簡單來個一句話介紹吧。
- Algoid:使用給定的語言和API控制小烏龜運動來畫畫。可以畫很復雜的畫哦。不過畫了幾個沒什么動力就不玩了……
- Code Hunt:學習C#和Java不錯,確實是從頭一點點學習。但感覺只是披着游戲的外衣的編程題目。Python Challenge和Manufactoria這倆也一樣。
- Python Challenge:每一關卡一個解謎題目。其實和Python沒什么關系,什么語言都可以;感覺和編程關系也不大……
- Manufactoria:自動機編程。Matrix67在他博客上推薦的。
- Glitchspace和Hakitzu:沒有相應的設備,所以沒玩。
- Robocode:和Code Tank一樣。要下載Java代碼到本地,或許還要Eclipse……
小結
本人認為真正好的教育類編程游戲應體現編程思想,而不應局限於某種編程語言或技巧。我所設想的編程游戲應當體現一個開放式的世界,玩家可以對其中的對象編程,玩家可以編程創造或改造物品。這里的編程不一定要通過代碼,如果能通過可視化的方式,玩家或許能更容易理解。或許以后有空我會嘗試一下。