AlphaBot:對 Robocode 的創始人 Mat Nelson 的一次采訪
關于 Robocode 如何產生以及將來的發展的深思
Dana Triplett(dana@orange-atelier.com)
自由作家
2002 年 7 月
假如您一直在關注 developerWorks 和 alphaWorks 的話,您會看到一個名為 Robocode 的小東西的巨大能量:Robocode 是一個比較上癮的游戲,剛好可以用于 java 編程教學。Mat Nelson 在過去 18 月內已經付出了一段寶貴的時間來開發 Robocode。起初是為了自己娛樂,后來就成了一份認真的工作,把他心愛的這個項目放到了 IBM alphaWorks 上。現在已經到了他收獲的時候。Robocode 的成功用“爆炸性”來描述一點也不過分 — 而這才只是個開頭。
Mat Nelson
早在 1995 年,也就是 Mat Nelson 開始在 IBM 做全職工作之前,他就開始使用 Java 語言了。隨著這種語言的成熟,這個狂熱的玩家看到了創建這個“他一直想玩”的游戲的機會。2000 年后期 Robocode 剛開始時只是個人的努力,2001 年 7 月以 alphaWorks 下載的形式帶入 IBM 后就成了一種職業工作。在這個游戲(下載次數超過了 121,000 次)和它的創始人的名聲漸大之際,我們請 developerWorks 的通訊記者 Dana Triplett 對 Mat 進行了一次采訪,請他談談是什么激發了他創建 Robocode 的靈感,以及他對 Robocode 未來發展的看法。
Robocode Rumble 鏈接
從 alphaWork 下載 Robocode。
閱讀“Rock ''em, sock ''em Robocode”(developerWorks,2002 年 1 月)和“Rock ''em, sock ''em Robocode: Round 2”(developerWorks,2002 年 5 月)
進入 Robocode Rumble 辯論會。
developerWorks:Robocode 背后的中心思想是什么?
Nelson:Robocode 是一種有趣的競賽性編程,而“有趣”在這里絕對是要害詞。使用幾行簡單的代碼,您就可以看著您的機器人在屏幕上四處奔馳,碾碎一切擋道的東西。在做這件事時,您將學習到一種解決目前真實問題的真實的語言。
dW:哪些游戲曾經是您最喜歡的,您最喜歡它們的哪些方面?
Nelson:Worms 的 Commodore 64 版(不要與目前同名的游戲混淆)是我看到的第一個游戲,它讓我“教”一些東西在游戲中如何行動,然后看它們玩。我還非常喜歡戰略和角色扮演游戲。這幾年來令我上癮的有哪些游戲?Civilization、Master of Orion、Sim City、Command and Conquer 系列、Warcraft/Starcraft 系列、Ultima 系列和 Diablo 系列。當然,我還玩過數百種其它的游戲,但我最喜歡的肯定是那些讓我構建一樣東西,然后在游戲環境中放開它,看它如何發展的游戲。
dW:這些游戲中有哪一個是您開始創建 Robocode 時的靈感來源嗎?
Nelson:Worms,肯定是,其它的還有 C64 游戲 Mail Order Monsters。那些經典游戲中的其中一些非常棒。那時還沒有圖形,所以一切東西都必須可玩。那正是我正設法在 Robocode 中采用的方法:輕易開始,玩起來有趣,并且讓人很上癮。
然而 Robocode 的主要靈感來源于 Brad Schick 創建的一個名為 Robot Battle 的游戲(這個游戲本身的靈感來源于 Robot Wars 的 Apple 2 版)。我在 1995 年發現了 Robot Battle,并花費了無數的時間創建我自己的機器人“The Cleaner”。它實在是太有趣了。我看著其他人創建的機器人把它淘汰出局,然后設計了我自己的戰略。那時主要的挑戰是一類被稱為 seesaw bot 的機器人,它們會往返移動,很難擊中。 Cleaner 在試圖擊中它們時碰到了很多麻煩。我的解決辦法?我用了一點三角知識來估算 seesaw 的角度,然后向那個角度猛烈開火。我一鼓作氣完成了編寫,然后開心地看著 Cleaner 3 爬上比賽排行榜。
dW:當您開始開發 Robocode 時,您心目中的觀眾是誰?
Nelson:開始時,只是我自己。Robocode 是我一直想玩的游戲,所以我寫了它。
我希望即使您什么也不知道也可以玩 Robocode,而當您了解得更多時它可以與您一起成長。學起來簡單,但很難精通,就象國際象棋。我把 API 設計得盡可能簡單,并提供了幾個樣本機器人說明如何使用它。我希望任何人,從建筑師到中學生到動物園治理員,都能夠讓一個簡單的機器人運行,并說“嗨,我寫了一個 Java 程序!”。另一方面,高級用戶很快意識到他們可以使用 Java 編程語言的整套功能,隨心所欲地使用它為自己的機器人構建行為。
dW:現實生活中玩 Robocode 的人們讓您感到過驚奇嗎?
Nelson:最大的驚奇是成功本身。我很有把握人們會有愛好玩它,因為我 ...... 但我沒想到有那么多人!現在的下載次數超過了 100,000,真讓我大吃一驚。我一直能夠很驚異(興奮)地看到人們用不同的方式使用 Robocode,而社區也一直讓我感到驚喜。
dW:Robocode 玩家建立了哪些具獨創性的機器人示例?
Nelson:有很多種,包括猜測目標(不是直接向機器人開火,而是向機器人即將到達的地方開火)、跟蹤和記錄敵人的行為、多線程控制機器人的不同方面、即時(just-in-time)算法、躲避子彈、僵持、最優化的雷達跟蹤 ......,還有很多很多。其中最優秀的機器人簡直讓人吃驚。我最近引入了一個全新型的戰略,也就是組,所以我非常期待看到接下來還會有什么東西出現。
dW:您想為 Robocode 添加些什么功能?
Nelson:我想做的第一件事是把 API 重新構建為更簡單、更面向對象、更具擴展性和更開放的 API。例如,我更希望看到 radar.setTurn()
而非 setTurnRadarRight()
。一旦 Radar 成了一個對象,我們就可以擁有不同類型的 Radar:setRadar(new Radar(range,speed))
。
作為 API 重設計的一部分,我預備解決兩個突出的大問題:度數對弧度和單位圓數學(Unit circle math)。機器人將有一個單獨的調用,該調用確定它們是想使用度數,還是使用弧度,而另一個調用在單位圓數學或羅盤數學(Compass math)間切換。單位圓數學用于 Java 中的所有三角方法,它的 0 度指向右,逆時針方向為正。而羅盤數學的 0 度指向上,順時針為正。不同的程序員喜歡不同的東西,我希望在使 API 簡單的同時支持它們中的全部。
另一個大問題是物理學問題。目前 Robocode 的物理學原理極其簡單。為增加真實感,我預備引入力矢量。例如,加速度將會被空氣阻力和滾動摩擦力抵消一部分,而不只受到“最大速率”的限制。根據摩擦力和半彈性碰撞原理,機器人撞到另一個機器人的一側時會把它推到一邊去。我以前對這些的試驗使游戲比以前“酷”了許多。猛烈地撞向一個機器人并使其發出尖利的聲音滑向一邊,這是很有趣的。另外,前后加速將會更改;機器人向前移動時速度可以更快。
目前,撞擊(Ramming)還未被充分利用,所以,我想引入機器人各部分不同的裝甲力量 — 仍然是可配置的。擊中機器人的一側將會造成更大的傷害。
我還想在競技場中引入墻和障礙物,以及不同外形的競技場、這將產生許多全新的戰略。
因為這些更改要引入一些復雜的編程,我計劃使它更輕易擴充機器人。一個專家可以寫一個查找墻四周路徑的可重用的機器人類,而一個新手可以只使用它來快速創建一個不錯的機器人(同時學習如何重用代碼)。
dW:您認為將來 Robocode 會變成一個由 alphaWorks 主持的分布式游戲嗎?
Nelson:現在我主要關心簡單性;引入一定程度的復雜性卻不能使游戲玩起來更有趣是沒有必要的。Robocode 在分布式環境中會比現在更有趣嗎(現在的 Robocode 只是一種單機游戲,可以從中下載其它的機器人)?我還不確信。我的確認為有一個空間可以容納一個趣味無窮的分布式 Java 編程游戲...... 但我認為那就是一個新游戲,不是 Robocode。
dW:為什么您選擇用 Java 編寫 Robocode?
Nelson:當我在 1995 年發現 Java 時,我馬上就被迷住了。它是一種簡潔、優雅的語言。使用 Java 可以比用其它語言節省一半的時間,并且做出來的東西可以在完全不同的系統上運行。 例如,Robocode 可以在 Mac OS X 上運行,而我甚至從來沒接觸過 Mac。
目前,Java 速度很快,盡管許多人仍沒有意識到這一點。計算機的處理速度正以驚人的速度增長,JVM 的速度比以前任何時候都快,Java 已經成熟了,我們甚至可以用硬件加速生成圖形。Java 現在已經用于客戶機了,我希望 Robocode 可以幫忙促進這一點。
dW:是什么使您想使用自己的編程技巧為程序員創建一個教育性游戲而不是創建只用于娛樂的浮華的游戲?
Nelson:沒有任何東西。我的確只是為了好玩而編寫了一個浮華的游戲。我們是后來才發現它的教學用途的。
在 25 年的玩游戲生涯中,我已經花費了無數的時間來學習如何玩游戲。我閱讀手冊、看幫助菜單、查閱游戲參考資料、還在 Web 上看技巧和提示。當然,與任何其它游戲一樣,對 Robocode 也要做相同的事。但有一點很大的不同:手冊是關于 Java 的。參考資料是 Javadoc。幫助菜單是 Java 教程。學習玩 Robocode 就是學習 Java,剛開始時我沒有意識到這一點。
我希望擔任編程入門課程的教授和教師能夠發現 Robocode 是一種使學習變得很有趣的好方法,并推廣 Java,使人們選擇使用 Java。使用幾篇教程(游戲內部和外部皆可),我相信我們可以使 Robocode 成為一個更好的自學工具。我將嘗試用幾個簡單的任務來完成我們的游戲內教程(就象“完成這 10 個任務您就能夠很好地理解 Java 一樣”)。稍微利用些指導,任何人都可以成為 Java 程序員。
回頭看一下,很明顯;它當然是一個教育工具。但 Robocode 是從一個全新的角度達到了現在的程度。Robocode 是一個游戲。但在您學習玩 Robocode 時,哦,哇唔!您學會了 Java。我的確是把 Robocode 作為一個有趣的游戲而不是教育工具來寫的,而且我還將繼續以這種精神開發它。但假如您在得到樂趣的同時又學會了 Java,那就太妙了!
新聞熱點
疑難解答