序
動手「寫」出自己的遊戲吧!
為什麼人們會想學習程式設計呢?
我想,背後應該有幾種不同的原因:感覺很帥、想更深入瞭解電腦方面的知識、想成為專業工程師……等等。除了上述的原因,我想不論以前或現在,「想要親自設計一個遊戲」這個想法,一定也存在於部分想學程式的人心中。
對30年前的小朋友而言,這是一個非常真切的願望。在當時,想要製作、遊玩遊戲,寫程式便是必備的技能。1983年,任天堂發售了堪稱日本遊戲機鼻祖的「超級任天堂(Super Famicom)」,而在這台遊戲機問世前,如果想要玩遊戲,只能到遊樂場付錢(街機「太空侵略者Space Invaders」於1978年誕生),或是用BASIC培基語言編輯程式來操控微電腦(Microcomputer)才行。BASIC感覺起來大概像這樣:
10 INPUT A
20 INPUT B
30 PRINT A+B
40 GOTO 10
上述的例子中,最後呈現的結果是:用鍵盤輸入2個數字,就能顯示兩者的合計值。這裡用的英語很簡單,我想各位應該能明白它背後的意思。在BASIC問世前,人們只能用16進位(0~9、A~F構成的數字)來輸入機器語言,一想到這裡,就令人不禁覺得陽春的BASIC實在太美妙了。
以前每月發售的微電腦雜誌中,都會刊載用BASIC寫的遊戲程式,只要一字不漏地把那些跨了好幾頁篇幅的程式碼輸入到電腦裡(有時候還需要和朋友一起合作輸入),鍵入「RUN」這個指令,就能玩到和遊樂場裡面一樣的遊戲(事實上兩者之間還是有相當大的差距,必須努力想像才能把它們當成是一樣的東西)。
這個過程真的非常有趣,但畢竟微電腦要價不斐(當時最具代表性的微電腦之一,由NEC出品的「PC-8001」售價為16萬8千日圓),所以我甚至有過幾次驚險的經驗——躲過店員的耳目,把程式碼輸入到電器行陳列的微電腦裡,趁程式碼還沒被刪除前趕緊享樂一番。
現在,人們已經不再需要費這麼大的苦勁。市面上有許許多多很棒的遊戲,我們可以直接購買遊戲包,也可以下載付費或免費遊戲,隨時享受遊戲的樂趣。說實在話,我們根本不需要特別學習程式設計。
那麼,為什麼各位還是願意拿起這本書呢?應該是因為各位已經發現或是隱約覺得寫遊戲比玩遊戲更有趣。說起來,30年前的我確實就是這麼認為的(然後,我現在就成了專業的工程師了)。
為了因應各位的期待,我們寫了這本書。書中會教各位製作1個遊戲——人人都聽過、玩過的射擊遊戲,我們細分成好幾個單元(書中稱之為Stage),仔細講解製作的步驟與原理。
書中使用的程式語言,是美國MIT(麻省理工大學)Media Lab.開發的「Scratch」教學用語言。不同於BASIC,Scratch幾乎不必使用鍵盤進行輸入,只要把寫著中文的「積木」堆積起來,就能寫出程式;也因此,就原理上來說,並不會發生程式語言造成的語法錯誤(Syntax error),光就這點來說,Scratch就已經是一個很值得入門者選擇的學習平台。
已經使用過Scratch的人,相信就會明白運用它寫程式是件很容易的事。但另一方面,讓預設的貓咪角色走路雖然簡單,但若是想讓牠做出更複雜的動作,有的人忽然就會覺得面臨了一個難解的挑戰。事實上,「程式語言本身簡單」與「想製作的對象的語義(Semantics)上的困難程度」,其實是兩碼子事。
到底該用什麼樣的方法,來涉及、討論、處理這個困難點,也是本書試圖解決的問題之一。看起來再怎麼複雜龐大的體系,只要適當分解後,就能變成腦袋能理解的大小。用比較符合潮流的語言來描述的話,我們或許可以說工程師看世界的方法,就是所謂的Computational Thinking(運算思考),舉例來說,提取物件(Object)、如何把東西模型化(Modeling)、如何選擇變數的可視範圍(Scope)、重構(Refactoring)等等,都屬於上述的思考範疇。
雖然寫了一連串看似很難理解的東西,但本書中教導的程式、做出來的遊戲,是非常非常有趣的。但願透過這本書籍,能夠讓各位感受到我以前體會過的寫程式的樂趣。希望讀者們都能享受這份挑戰。
阿部和廣