歡迎光臨
每天分享高質量文章

為什麼說 Python 和 Pygame 最適合編程初學者 | Linux 中國

我們有三個理由來說明 Pygame 對初學編程者是最好的選擇。
— Craig Oda


本文導航
編譯自 | https://opensource.com/article/17/11/pygame 
 作者 | 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 是專業程式員,所以在這兒特意使用全域性變數以使程式簡潔。

  1. var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

  2. function preload() {

  3.     game.load.image('sky', 'assets/sky.png');

  4. }

  5. var player;

  6. var platforms;

  7. function create() {

  8.     game.physics.startSystem(Phaser.Physics.ARCADE);

  9. ...

在他們的 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 包管理器來安裝:

  1. 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 有著種種的不好,為什麼我還繼續教授他們?老實說,我考慮了很長一段時間,我在擔心著學生學習變數申明提升variable hoisting和變數作用域的揪心。我開發出基於 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中國 榮譽推出

LCTT 譯者

runningwater ? ? ? ?
共計翻譯:49 篇
貢獻時間:1526 天


推薦文章

< 左右滑動查看相關文章 >

點擊圖片、輸入文章 ID 或識別二維碼直達

赞(0)

分享創造快樂

© 2021 知識星球   网站地图