作者 | Craig Oda
譯者 | runningwater
我們有三個理由來說明 Pygame 對初學程式設計者是最好的選擇。
上個月,Scott Nesbitt[1] 發表了一篇標題為 Mozilla 支出 50 萬美元來支援開源專案[2]的文章。其中一個基於 HTML/JavaScript 的遊戲平臺專案 Phaser 獲得了 50,000 美元的獎勵。整整一年裡,我都在使用 Phaser 平臺來教我的小女兒,用來學習的話,它是最簡單也是最好的 HTML 遊戲開發平臺。然而,對於初學者來說,使用 Pygame [3]也許效果更好。原因如下:
1、 小段程式碼塊
Pygame,基於計算機課程中最流行的語言[4] Python。Python 非常適合用一小段程式碼來實現我們的想法,孩子們可以從單個檔案和單個程式碼塊起開始學習,在掌握函式(function)或類(class)物件之前,就可以寫出義大利麵條似的程式碼。 很像手指畫,所想即所得。
以這樣的方式來學習,當編寫的程式碼越來越難於管理的時候,孩子們很自然的就會把程式碼分解成函式模組和類模組。在學習函式之前就學習了 Python 語言的語法,學生將掌握基本的程式設計知識,對瞭解全域性作用域和區域性作用域起到更好的作用。
大多數 HTML 遊戲在一定程度上會將結構、樣式和程式設計邏輯分為 HTML、CSS 和 JavaScript,並且需要 CSS 和 HTML 的知識。從長遠來看,雖然拆分更好,但對初學者來說是個障礙。一旦孩子們發現他們可以用 HTML 和 CSS 快速構建網頁,很有可能就會被顏色、字型和圖形的視覺刺激分散註意力。即使僅僅只專註於 JavaScript 程式碼,也需要學習基本的檔案結構模型(DOM),以使 JavaScript 程式碼能夠嵌入進去。
2、 全域性變數更清晰
Python 和 JavaScript 都使用動態型別變數,這意味著變數只有在賦值才能確定其型別是一個字串、一個整數還是一個浮點數,然而在 JavaScript 更容易出錯。類似於型別變數,JavaScript 和 Python 都有全域性變數和區域性變數之分。Python 中,如果在函式塊內要使用全域性變數,就會以 global
關鍵字區分出來。
要理解在 Phaser 上教授程式設計初學者所面臨的挑戰的話,讓我們以基本的製作您的第一個 Phaser 遊戲教程[5]為例子,它是由 Alvin Ourrad 和 Richard Davey 開發製作的。在 JavaScript 中,程式中任何地方都可以訪問的全域性變數很難追蹤除錯,常常引起 Bug 且很難解決。因為 Richard 和 Alvin 是專業程式員,所以在這兒特意使用全域性變數以使程式簡潔。
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
function preload() {
game.load.image('sky', 'assets/sky.png');
}
var player;
var platforms;
function create() {
game.physics.startSystem(Phaser.Physics.ARCADE);
...
在他們的 Phaser 程式設計手冊 《Interphase》[6] 中,Richard Davey 和 Ilija Melentijevic 解釋說:在很多 Phaser 專案中通常都會使用全域性變數,原因是使用它們完成任務更容易、更快捷。
“如果您開發過遊戲,只要程式碼量到一定規模,那麼(使用全域性變數)這種做法會使您陷入困境的,可是我們為什麼還要這樣做?原因很簡單,僅僅只是要使我們的 Phaser 專案容易完成,更簡單而已。”
針對一個 Phaser 應用程式,雖然可以使用區域性變數和拆分程式碼塊來達到關註點隔離這些手段來重構程式碼,但要使第一次學習程式設計的小孩能理解,顯然很有難度的。
如果您想教你的孩子學習 JavaScript,或者如果他們已經知道怎樣使用像 Python 來程式設計的話,有個好的 Phaser 課程推薦: 完整的手機遊戲開發課程[7],是由 Pablo Farias Navarro[8]開發製作的。雖然標題看著是移動遊戲,但實際是關於 JavaScript 和 Phaser 的。JavaScript 和 Phaser 移動應用開發已經轉移到 PhoneGap[9] 話題去了。
3、 Pygame 無依賴要求
由於 Python Wheels[10] 的出現,Pygame 超級容易安裝[11]。在 Fedora/Red Hat 系統下也可使用 yum
包管理器來安裝:
sudo yum install python3-pygame
更多資訊請參考官網 Pygame 安裝說明檔案[12]。
相比來說,雖然 Phaser 本身更容易安裝,但需要掌握更多的知識。前面提到的,學生需要在 HTML 檔案中組裝他們的 JavaScript 程式碼,同時還需要些 CSS。除了這三種語言(HTML、CSS、JavaScript),還需要使用火狐或谷歌開發工具和編輯器。JavaScript 最常用的編輯器有 Sublime、Atom、VS Code(按使用多少排序)等。
由於瀏覽器同源策略[13]的原因,如果您直接在瀏覽器中開啟 HTML 檔案的話,Phaser 應用是不會執行的。您必須執行 Web 服務,並透過服務訪問這些檔案。還好,對於大多數工程專案,可以不用在本地執行 Apache 服務,只需要執行一些輕量級的服務就可以,比如 httpster。
Phaser 和 JavaScript 的優勢
JavaScript 和 Phaser 有著種種的不好,為什麼我還繼續教授他們?老實說,我考慮了很長一段時間,我在擔心著學生學習變數申明提升和變數作用域的揪心。我開發出基於 Pygame 和 Python 的課程,隨後也開發出一濤基於 Phaser 的。最終,我決定使用 Pablo 預先制定的課程作為起點。
我轉用 JavaScript 有兩個原因。首先,JavaScript 已經成為正式應用的正式語言。除了 Web 應用外,也可使用於移動和服務應用方面。JavaScript 無處不在,其廣泛應用於孩子們每天都能看到的應用中。如果他們的朋友使用 Javascript 來程式設計,他們很可能也會受影響而使用之。正如我看到了 JavaScript 背後的動力,所以深入研究了可編譯成 JavaScript 的替代語言,主要是 Dart 和 TypeScript 兩種。雖然我不介意額外的轉換步驟,但還是最喜歡 JavaScript。
最後,我選擇使用 Phaser 和 JavaScript 的組合,是因為我意識到上面那些問題在 JavaScript 可以被解決,僅僅只是一些工作量而已。高質量的除錯工具和一些大牛們的工作使得 JavaScript 成為教育孩子編碼的可用和有用的語言。
最後話題: Python 對壘 JavaScript
當家長問我使用的什麼語言作為孩子的入門語言時,我會立即推薦 Python 和 Pygame。因為有成千上萬的課程可選,而且大多數都是免費的。我為我的兒子選擇了 Al Sweigart 的 使用 Python 和 Pygame 開發遊戲[15] 課程,同時也在使用 Allen B. Downey 的 Python 程式設計思想:如何像電腦科學家一樣思考[16]。在 Android 手機上可以使用 Tom Rothame 的 PAPT Pyame[18] 來安裝 Pygame 遊戲。
儘管有我的建議, 我總是懷疑孩子們很快就會搬到 JavaScript。這沒關係 —— JavaScript 是一門成熟的程式語言,有很多很多輔助工具。但有多年的幫助大兒子使用 Python 建立炫酷遊戲經歷的我,依然鐘情於 Python 和 Pygame。
關於作者
Craig Oda —— 東京 Linux 使用者組的首位總裁和共同創始人,奧萊理日本出版的《Linux 日文環境》的共同作者。在亞洲建立了第一個 ISP 的核心團隊成員之一。一個大型 Linux 公司的產品管理及市場的前任副總裁。矽谷開發者關係諮詢公司 Oppkey 的合作方。更多[19]
via: https://opensource.com/article/17/11/pygame
作者:Craig Oda[19] 譯者:runningwater 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出