Linux中國

為什麼說 Python 和 Pygame 最適合編程初學者

上個月,Scott Nesbitt 發表了一篇標題為 Mozilla 支出 50 萬美元來支持開源項目的文章。其中一個基於 HTML/JavaScript 的遊戲平台項目 Phaser 獲得了 50,000 美元的獎勵。整整一年裡,我都在使用 Phaser 平台來教我的小女兒,用來學習的話,它是最簡單也是最好的 HTML 遊戲開發平台。然而,對於初學者來說,使用 Pygame 也許效果更好。原因如下:

1、 小段代碼塊

Pygame,基於計算機課程中最流行的語言 PythonPython 非常適合用一小段代碼來實現我們的想法,孩子們可以從單個文件和單個代碼塊起開始學習,在掌握函數(function)或類(class)對象之前,就可以寫出義大利麵條似的代碼。 很像手指畫,所想即所得。

以這樣的方式來學習,當編寫的代碼越來越難於管理的時候,孩子們很自然的就會把代碼分解成函數模塊和類模塊。在學習函數之前就學習了 Python 語言的語法,學生將掌握基本的編程知識,對了解全局作用域和局部作用域起到更好的作用。

大多數 HTML 遊戲在一定程度上會將結構、樣式和編程邏輯分為 HTML、CSS 和 JavaScript,並且需要 CSS 和 HTML 的知識。從長遠來看,雖然拆分更好,但對初學者來說是個障礙。一旦孩子們發現他們可以用 HTML 和 CSS 快速構建網頁,很有可能就會被顏色、字體和圖形的視覺刺激分散注意力。即使僅僅只專註於 JavaScript 代碼,也需要學習基本的文檔結構模型(DOM),以使 JavaScript 代碼能夠嵌入進去。

2、 全局變數更清晰

Python 和 JavaScript 都使用動態類型變數,這意味著變數只有在賦值才能確定其類型是一個字元串、一個整數還是一個浮點數,然而在 JavaScript 更容易出錯。類似於類型變數,JavaScript 和 Python 都有全局變數和局部變數之分。Python 中,如果在函數塊內要使用全局變數,就會以 global 關鍵字區分出來。

要理解在 Phaser 上教授編程初學者所面臨的挑戰的話,讓我們以基本的製作您的第一個 Phaser 遊戲教程為例子,它是由 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》 中,Richard Davey 和 Ilija Melentijevic 解釋說:在很多 Phaser 項目中通常都會使用全局變數,原因是使用它們完成任務更容易、更快捷。

「如果您開發過遊戲,只要代碼量到一定規模,那麼(使用全局變數)這種做法會使您陷入困境的,可是我們為什麼還要這樣做?原因很簡單,僅僅只是要使我們的 Phaser 項目容易完成,更簡單而已。」

針對一個 Phaser 應用程序,雖然可以使用局部變數和拆分代碼塊來達到關注點隔離這些手段來重構代碼,但要使第一次學習編程的小孩能理解,顯然很有難度的。

如果您想教你的孩子學習 JavaScript,或者如果他們已經知道怎樣使用像 Python 來編程的話,有個好的 Phaser 課程推薦: 完整的手機遊戲開發課程,是由 Pablo Farias Navarro 開發製作的。雖然標題看著是移動遊戲,但實際是關於 JavaScript 和 Phaser 的。JavaScript 和 Phaser 移動應用開發已經轉移到 PhoneGap 話題去了。

3、 Pygame 無依賴要求

由於 Python Wheels 的出現,Pygame 超級容易安裝。在 Fedora/Red Hat 系統下也可使用 yum 包管理器來安裝:

sudo yum install python3-pygame

更多信息請參考官網 Pygame 安裝說明文檔

相比來說,雖然 Phaser 本身更容易安裝,但需要掌握更多的知識。前面提到的,學生需要在 HTML 文檔中組裝他們的 JavaScript 代碼,同時還需要些 CSS。除了這三種語言(HTML、CSS、JavaScript),還需要使用火狐或谷歌開發工具和編輯器。JavaScript 最常用的編輯器有 Sublime、Atom、VS Code(按使用多少排序)等。

由於瀏覽器同源策略的原因,如果您直接在瀏覽器中打開 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 開發遊戲 課程,同時也在使用 Allen B. Downey 的 Python 編程思想:如何像計算機科學家一樣思考。在 Android 手機上可以使用 Tom RothamePAPT Pyame 來安裝 Pygame 遊戲。

儘管有我的建議, 我總是懷疑孩子們很快就會搬到 JavaScript。這沒關係 —— JavaScript 是一門成熟的編程語言,有很多很多輔助工具。但有多年的幫助大兒子使用 Python 創建炫酷遊戲經歷的我,依然鍾情於 Python 和 Pygame。

關於作者

Craig Oda —— 東京 Linux 用戶組的首位總裁和共同創始人,奧萊理日本出版的《Linux 日文環境》的共同作者。在亞洲建立了第一個 ISP 的核心團隊成員之一。一個大型 Linux 公司的產品管理及市場的前任副總裁。矽谷開發者關係諮詢公司 Oppkey 的合作方。更多

via: https://opensource.com/article/17/11/pygame

作者:Craig Oda 譯者:runningwater 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國