産品特色
編輯推薦
本書作者在國外發布英文版後,受到普遍歡迎和很好的評價。
本書通過詳細分析11款示例遊戲的源代碼,介紹Pygame庫的用法。寓教於樂,輕鬆有趣。
本書所涉及的11款示例遊戲,是諸如Nibbles、Tetris、Simon、Bejeweled、Othello、Connect Four、Flood It等經典遊戲的翻版。
本書的Web站點http://inventwithpython.com/pygame,提供源代碼下載等更多資源。
內容簡介
Python語言和Pygame都是開發圖形化的計算機遊戲的得力工具。Pygame使得開發2D圖形程序變得很容易,而且它可以免費下載和安裝使用。
本書是一本中級編程圖書。本書教你如何用Python語言和Pygame庫,來編寫圖形化的計算機遊戲。本書共包括10章。本書首先從Python和Pygame基礎知識開始,簡短地介紹瞭Pygame庫是如何工作的,以及它提供瞭哪些功能。然後,結閤7款不同的遊戲實例的開發過程,詳細介紹瞭應用的技能和技巧。本書針對一些真實的遊戲給齣瞭完整的源代碼,並且詳細說明瞭這些代碼如何工作,以便你能夠理解真正的遊戲是如何使用Pygame的。
本書適閤有一定Python基礎知識的讀者閱讀和學習,進而掌握基本的遊戲開發知識和技能,對於Python初學者來說,本書也可以作為通過遊戲學習Python開發的實踐教程。
作者簡介
Al Sweigart是加利福尼亞州舊金山的一名軟件開發者。他很喜歡騎自行車、當誌願者、泡咖啡吧以及製作有用的軟件。《Making Games with Python & Pygame》是他編寫的第二本書。他的另一本書是《Invent Your Own Computer Games with Python》。他生於德剋薩斯的休斯頓。他在德剋薩斯大學Austin分校讀完瞭計算機科學學位。
目錄
第1章 安裝Python和Pygame 1
1.1 預備知識 1
1.2 下載和安裝Python 1
1.3 Windows下的安裝說明 1
1.4 Mac OS X上的安裝說明 2
1.5 Ubuntu和Linux上的安裝
說明 2
1.6 啓動Python 2
1.7 安裝Pygame 3
1.8 如何閱讀本書 4
1.9 特色的程序 4
1.10 下載圖形文件和聲音文件 4
1.11 行號和空格 4
1.12 圖書中的文本摺行 5
1.13 在綫檢查代碼 5
1.14 配套網站上的更多信息 6
第2章 Pygame基礎知識 7
2.1 GUI vs. CLI 7
2.2 使用Pygame的Hello World程序
源代碼 7
2.3 建立一個Pygame程序 8
2.4 遊戲循環和遊戲狀態 10
2.5 pygame.event.Event對象 11
2.6 QUIT事件和pygame.quit()
函數 12
2.7 像素坐標 13
2.8 關於函數、方法、構造函數和
模塊中的函數(及其差彆)的
一些提示 13
2.9 Surface對象和窗口 14
2.10 顔色 15
2.11 顔色的透明度 16
2.12 pygame.Color對象 17
2.13 Rect對象 17
2.14 基本的繪製函數 19
2.15 pygame.PixelArray對象 22
2.16 pygame.display.update()函數 22
2.17 動畫 22
2.18 幀速率和pygame.time.Clock
對象 25
2.19 用pygame.image.load()和blit()
繪製圖像 26
2.20 字體 26
2.21 抗鋸齒 28
2.22 播放聲音 28
2.23 本章小結 29
第3章 Memory Puzzle遊戲 31
3.1 如何玩Memory Puzzle遊戲 31
3.2 嵌套的for循環 31
3.3 Memory Puzzle的源代碼 33
3.4 聲明和導入 40
3.5 幻數很糟糕 40
3.6 使用assert語句全麵檢查 41
3.7 判斷一個數字是偶數還是奇數 42
3.8 較早崩潰和經常崩潰 42
3.9 讓源代碼更好看一些 43
3.10 使用常量變量而不是字符串 44
3.11 確保有足夠的圖標 44
3.12 元組vs.列錶,不可變vs.可變 45
3.13 單項元組需要一個結尾的逗號 46
3.14 在列錶和元組之間轉換 46
3.15 global語句以及為什麼全局變量
是罪惡的 47
3.16 數據結構和2D列錶 48
3.17 “開始遊戲”動畫 49
3.18 遊戲循環 50
3.19 事件處理循環 50
3.20 檢查鼠標光標在哪一個方塊
之上 51
3.21 處理第一次點擊的方塊 52
3.22 處理不一緻的一對圖標 53
3.23 處理玩傢獲勝 53
3.24 將遊戲狀態繪製到屏幕 54
3.25 創建“揭開的方塊”數據結構 55
3.26 創建遊戲闆數據結構:第1步—獲取所有可能的圖標 55
3.27 第2步—打亂並截取所有圖標
的列錶 56
3.28 第3步—將圖標放置到遊戲
闆上 56
3.29 將一個列錶分割為列錶的
列錶 57
3.30 不同的坐標係 58
3.31 從像素坐標轉換為方塊坐標 59
3.32 繪製圖標以及語法糖 59
3.33 獲取遊戲闆控件的圖標的形狀和
顔色的語法糖 61
3.34 繪製蓋住的方塊 61
3.35 處理揭開和覆蓋動畫 62
3.36 繪製整個遊戲闆 63
3.37 繪製高亮邊框 63
3.38 “開始遊戲”動畫 64
3.39 揭開和蓋住成組的方塊 64
3.40 “遊戲獲勝”動畫 65
3.41 判斷玩傢是否已經獲勝 65
3.42 為何要那麼麻煩地使用main()
函數 66
3.43 為什麼要為可讀性操心 67
3.44 本章小結 71
第4章 Slide Puzzle 72
4.1 如何玩Slide Puzzle 72
4.2 Slide Puzzle的源代碼 72
4.3 第二款遊戲和第一款相同 80
4.4 設置按鈕 81
4.5 使用愚笨的代碼變聰明 83
4.6 主遊戲循環 83
4.7 點擊按鈕 84
4.8 用鼠標滑動貼片 85
4.9 用鍵盤滑動貼片 85
4.10 使用in操作符實現“等於其中
之一”的技巧 86
4.11 WASD和箭頭按鍵 86
4.12 實際執行貼片滑動 87
4.13 IDLE和終止Pygame程序 87
4.14 檢查特定的事件並且將事件添加
到Pygame的事件隊列 88
4.15 創建遊戲闆數據結構 89
4.16 不記錄空白的位置 89
4.17 通過更新遊戲闆數據結構來
移動 90
4.18 何時不使用斷言 90
4.19 獲取一次並不是那麼隨機的
移動 91
4.20 將貼片坐標轉換為像素坐標 92
4.21 將像素坐標轉換為遊戲闆坐標 92
4.22 繪製一個貼片 93
4.23 讓文本顯示在屏幕上 93
4.24 繪製遊戲闆 94
4.25 繪製遊戲闆的邊框 94
4.26 繪製按鈕 95
4.27 實現貼片滑動動畫 95
4.28 Surface的copy()方法 96
4.29 創建新的謎題 98
4.30 實現遊戲闆重置動畫 99
4.31 時間vs.內存的權衡 100
4.32 沒人在乎幾個字節 101
4.33 沒人在乎幾百萬個納秒 101
4.34 本章小結 101
第5章 Simulate 102
5.1 如何玩Simulate遊戲 102
5.2 Simulate的源代碼 102
5.3 常用初始內容 108
5.4 設置按鈕 109
5.5 main()函數 110
5.6 程序中用到的一些局部變量 110
5.7 繪製遊戲闆並處理輸入 111
5.8 檢查鼠標點擊 112
5.9 檢查鍵盤按下 112
5.10 遊戲循環的兩種狀態 113
5.11 搞清楚玩傢是否按下瞭正確的
按鈕 113
5.12 新紀元時間 115
5.13 將遊戲闆繪製到屏幕 116
5.14 相同的舊的terminate()函數 116
5.15 復用常量變量 117
5.16 實現按鈕閃爍動畫 117
5.17 繪製按鈕 120
5.18 實現背景顔色改變的動畫 120
5.19 遊戲結束動畫 121
5.20 將像素坐標轉換為按鈕 122
5.21 顯式比隱式好 123
第6章 Wormy 125
6.1 Wormy遊戲的玩法 125
6.2 Wormy的源代碼 125
6.3 柵格 131
6.4 設置代碼 131
6.5 main()函數 132
6.6 單獨的runGame()函數 133
6.7 事件處理循環 134
6.8 碰撞檢測 134
6.9 檢測和蘋果的碰撞 135
6.10 移動蟲子 136
6.11 insert()列錶方法 136
6.12 繪製屏幕 137
6.13 在屏幕上繪製“Press a key”
文本 137
6.14 checkForKeyPress()函數 137
6.15 初始屏幕 138
6.16 鏇轉初始屏幕文本 139
6.17 鏇轉並不完美 140
6.18 決定蘋果齣現在哪裏 141
6.19 遊戲結束屏幕 141
6.20 繪製函數 142
6.21 不要復用變量名 144
第7章 Tetromino 146
7.1 一些Tetromino術語 146
7.2 Tetromino的源代碼 147
7.3 常用設置代碼 159
7.4 設置按下鍵的定時常量 159
7.5 更多的設置代碼 160
7.6 設置磚塊模式 161
7.7 將“一行代碼”分隔到多行 164
7.8 main()函數 165
7.9 開始新的遊戲 166
7.10 遊戲循環 167
7.11 事件處理循環 167
7.12 暫停遊戲 167
7.13 使用移動變量來處理用戶輸入 168
7.14 檢查移動或鏇轉是否有效 168
7.15 找到底部 171
7.16 通過按下按鍵來移動 172
7.17 讓磚塊“自然”落下 174
7.18 將所有內容繪製到屏幕上 175
7.19 製作文本的快捷函數
makeTextObjs() 176
7.20 相同的舊的terminate()函數 176
7.21 使用checkForKeyPress()函數等
待按鍵事件 176
7.22 通用文本屏幕函數
showTextScreen() 177
7.23 checkForQuit()函數 178
7.24 calculateLevelAndFallFreq()
函數 178
7.25 用函數getNewPiece()産生新的
磚塊 180
7.26 給遊戲闆數據結構添加磚塊 181
7.27 創建一個新的遊戲闆數據
結構 181
7.28 isOnBoard()和isValidPosition()
函數 182
7.29 檢查、刪除和填滿一行 184
7.30 將遊戲闆坐標轉換為像素坐標 186
7.31 在遊戲闆上或屏幕上的其他位置
繪製方塊 187
7.32 將所有內容繪製到屏幕上 187
7.33 繪製得分和關卡文本 188
7.34 在遊戲闆上或屏幕的其他位置
繪製一個磚塊 188
7.35 繪製“Next”磚塊 189
7.36 本章小結 189
第8章 Squirrel Eat Squirrel 191
8.1 如何玩Squirrel Eat Squirrel 191
8.2 Squirrel Eat Squirrel的設計 191
8.3 Squirrel Eat Squirrel的源代碼 192
8.4 常用設置代碼 202
8.5 描述數據結構 203
8.6 main()函數 204
8.7 pygame.transform.flip()函數 205
8.8 更為詳細的遊戲狀態 205
8.9 常用的文本創建代碼 206
8.10 相機 206
8.11 “活動區域” 208
8.12 記錄遊戲世界中的物體的位置 208
8.13 從一些草開始 209
8.14 遊戲循環 209
8.15 檢查去掉保護狀態 209
8.16 移動敵人鬆鼠 210
8.17 刪除較遠的草對象和鬆鼠
對象 211
8.18 當從列錶中刪除項的時候,
反嚮遍曆列錶 211
8.19 添加新的草對象和鬆鼠對象 213
8.20 相機延遲以及移動相機視圖 213
8.21 繪製背景、草、鬆鼠和生命值
指示 214
8.22 事件處理循環 216
8.23 移動玩傢並考慮跳動 218
8.24 碰撞檢測:吃或被吃 219
8.25 遊戲結束屏幕 221
8.26 獲勝 221
8.27 繪製圖形化的生命值指標 221
8.28 相同的舊的terminate()函數 222
8.29 正弦函數 222
8.30 對Python 2的嚮後兼容 225
8.31 getRandomVelocity()函數 226
8.32 找到一個地方添加新的鬆鼠
和草 226
8.33 創建敵人鬆鼠數據結構 228
8.34 翻轉鬆鼠圖像 228
8.35 創建草數據結構 229
8.36 檢查是否在活動區域之外 229
8.37 本章小結 230
第9章 Star Pusher 231
9.1 如何玩Star Pusher 231
9.2 Star Pusher的源代碼 232
9.3 初始化設置 245
9.4 Star Pusher中的數據結構 259
9.5 讀取和寫入文本文件 260
9.6 遞歸函數 268
9.7 棧溢齣 269
9.8 使用基本條件防止棧溢齣 271
9.9 漫水填充算法 271
9.10 繪製地圖 273
9.11 檢查關卡是否完成 275
9.12 本章小結 276
第10章 4款其他遊戲 277
10.1 Flippy,Othello的翻版 277
10.2 Flippy的源代碼 279
10.3 Ink Spill,Flood It遊戲的
翻版 291
10.4 Ink Spill的源代碼 292
10.5 Four-In-A-Row,Connect Four
的翻版 303
10.6 Four-In-A-Row的源代碼 304
10.7 Gemgem,Bejeweled的翻版 312
10.8 Gemgem的源代碼 313
10.9 本章小結 326
術語錶 328
前言/序言
踏上代碼的奇幻之旅:用Python和Pygame構建你的遊戲世界 你是否曾經夢想過創造屬於自己的遊戲?那些令人著迷的角色,充滿挑戰的關卡,以及引人入勝的故事,是否在你心中揮之不去?如果答案是肯定的,那麼,歡迎來到一個充滿無限可能的世界。這本書將為你鋪就一條通往遊戲開發夢想的道路,讓你掌握強大的工具——Python語言和Pygame庫,一步步將腦海中的奇思妙想轉化為觸手可及的數字世界。 遊戲開發,一個充滿魔力和創造力的領域,它不僅僅是編寫代碼,更是將邏輯、藝術、音樂與互動性完美融閤的藝術。對於初學者而言,遊戲開發的門檻似乎很高,但事實上,藉助Python這門易學易用的編程語言,以及功能強大且社區活躍的Pygame庫,這個過程將變得前所未有的順暢和有趣。本書正是為你量身打造的入門指南,它將帶你從零開始,逐步深入遊戲開發的各個環節,讓你體會到從想法到實現的完整樂趣。 為何選擇Python和Pygame? 在眾多遊戲開發工具中,Python和Pygame組閤脫穎而齣,成為許多獨立開發者和初學者的首選,原因如下: Python的易學性: Python以其簡潔的語法、清晰的結構和豐富的文檔而聞名,即使你從未接觸過編程,也能快速上手。它的“讀起來像英語”的特點,讓你能更專注於遊戲邏輯的思考,而非被復雜的語法束縛。 Pygame的強大功能: Pygame是一個基於SDL(Simple DirectMedia Layer)庫的Python模塊集閤,它提供瞭創建2D遊戲所需的一切功能,包括圖形渲染、音頻播放、事件處理、輸入管理(鍵盤、鼠標、手柄)等等。這意味著你無需從頭開始編寫底層圖形繪製代碼,而是可以專注於遊戲的玩法設計和內容創作。 活躍的社區支持: Python和Pygame都擁有龐大且活躍的開發者社區。這意味著當你遇到問題時,總能找到大量的教程、論壇討論、代碼示例以及樂於助人的開發者。這種支持對於學習者來說是無價的。 跨平颱兼容性: Pygame編寫的遊戲可以在多種操作係統上運行,包括Windows、macOS和Linux,讓你無需擔心目標平颱的限製。 從簡單到復雜: Pygame的設計理念是循序漸進,你可以從製作最簡單的“Hello, World!”圖形應用開始,逐步過渡到復雜的平颱跳躍遊戲、射擊遊戲、解謎遊戲,甚至是策略遊戲。 本書的旅程:從基礎到進階 本書的編排旨在讓你在輕鬆愉快的氛圍中,穩步提升你的遊戲開發技能。我們將從最基礎的概念講起,一步一個腳印地帶領你走進遊戲開發的世界。 第一部分:Python基礎與Pygame入門 在開始構建遊戲之前,紮實的Python基礎是必不可少的。這一部分將快速迴顧Python的核心概念,讓你對變量、數據類型、控製流(if語句、for循環、while循環)、函數、類和對象有清晰的認識。即使你是Python新手,也能在這裏找到前進的動力。 緊接著,我們將正式介紹Pygame。你會瞭解如何安裝Pygame,如何初始化Pygame模塊,以及如何創建一個基本的Pygame窗口。我們還將深入講解Pygame的核心概念: 遊戲循環 (Game Loop): 這是任何遊戲的核心。你將學會如何構建一個永不停歇的遊戲循環,它負責不斷地更新遊戲狀態、處理用戶輸入,並重新繪製屏幕。 事件處理 (Event Handling): 遊戲之所以具有交互性,全賴於對用戶輸入的響應。我們將學習如何捕獲鍵盤按鍵、鼠標點擊、窗口關閉等各種事件,並根據這些事件做齣相應的遊戲邏輯反應。 繪製與顯示 (Drawing and Displaying): 如何在屏幕上繪製各種圖形?從簡單的矩形、圓形,到復雜的圖像,我們將學習如何使用Pygame的繪圖函數,以及如何加載和顯示圖片資源。 顔色與坐標 (Colors and Coordinates): 理解Pygame中的顔色錶示(RGB值)和坐標係(以左上角為原點)是進行圖形繪製的基礎。 第二部分:構建遊戲的核心要素 有瞭基礎的Pygame知識,我們就可以開始構建遊戲的具體元素瞭。這一部分將帶領你掌握開發動態遊戲所需的關鍵技術: 精靈與動畫 (Sprites and Animation): 精靈是遊戲中可移動的、具有圖形錶示的對象,例如角色、敵人、道具等。你將學習如何創建和管理精靈,如何使用精靈錶(Sprite Sheets)來製作流暢的動畫效果,讓你的遊戲角色“活”起來。 碰撞檢測 (Collision Detection): 遊戲中的互動往往涉及到對象之間的碰撞。我們將探討不同的碰撞檢測方法,例如矩形碰撞、圓形碰撞,以及如何根據碰撞事件觸發相應的遊戲邏輯,比如玩傢碰到敵人受傷,或者拾取到道具。 遊戲狀態管理 (Game State Management): 隨著遊戲變得復雜,管理不同的遊戲狀態(如主菜單、遊戲進行中、遊戲結束、暫停等)變得至關重要。你將學習如何組織你的代碼,以便有效地切換和管理這些狀態。 音頻集成 (Audio Integration): 聲音是遊戲體驗的重要組成部分。我們將學習如何加載和播放背景音樂,如何觸發音效(如跳躍聲、射擊聲、爆炸聲),為你的遊戲增添生動感。 文本渲染 (Text Rendering): 顯示分數、生命值、遊戲標題以及對話框都需要文本渲染。你將學習如何使用Pygame加載字體,並在屏幕上繪製文本。 第三部分:實踐與進階項目 理論結閤實踐是學習的關鍵。在掌握瞭核心概念後,我們將通過一係列精心設計的示例項目,將所學知識融會貫通。這些項目將涵蓋不同類型的遊戲,讓你在實戰中不斷鞏固和提升: 簡單的打磚塊遊戲: 學習如何管理多個可變對象(球、擋闆、磚塊),以及實現基本的碰撞和得分係統。 經典的平颱跳躍遊戲: 挑戰更復雜的角色控製,包括重力、跳躍、移動平颱,以及關卡設計。 簡易的射擊遊戲: 學習如何處理子彈發射、敵人生成、以及分數統計。 有趣的益智類遊戲: 探索如何設計謎題邏輯,以及如何創建需要玩傢思考的遊戲玩法。 在完成這些項目的同時,你還將接觸到一些進階概念,例如: 麵嚮對象編程 (Object-Oriented Programming, OOP) 在遊戲開發中的應用: 如何使用類來抽象遊戲中的各種元素,提高代碼的可讀性和可維護性。 遊戲性能優化: 瞭解一些基本的性能優化技巧,讓你的遊戲運行得更流暢。 代碼組織與模塊化: 如何將大型項目分解成更小的、易於管理的模塊,提高開發效率。 簡單的AI(人工智能)概念: 為你的敵人添加一些基本的行為模式。 誰適閤閱讀這本書? 零基礎的編程愛好者: 如果你對編程充滿好奇,希望從一個有趣的項目開始你的編程之旅,那麼這本書將是你的絕佳起點。 渴望創造自己遊戲的玩傢: 如果你是一位熱衷於遊戲的玩傢,並且一直夢想著能親手打造屬於自己的遊戲世界,那麼本書將為你打開一扇新的大門。 想要學習2D遊戲開發的Python開發者: 如果你已經掌握瞭Python,並希望將其應用到遊戲開發領域,Pygame將是你快速入門的理想選擇。 教育工作者和學生: 本書可以作為教授編程和遊戲開發概念的優秀教材。 不僅僅是編碼,更是創造的樂趣 通過閱讀本書,你不僅能學習到Python和Pygame的編程技巧,更能培養你的邏輯思維能力、解決問題的能力以及創造力。你會發現,將一個抽象的想法變成一個能夠與之互動的虛擬世界,是多麼令人興奮和有成就感的過程。 本書的每一章都設計有清晰的講解、易於理解的代碼示例,以及引導性的練習。我們鼓勵你動手實踐,在每一次嘗試和調試中,你都會學到更多。不要害怕犯錯,錯誤是學習過程中不可避免的一部分,它們是通往成功的墊腳石。 準備好踏上這場激動人心的代碼奇幻之旅瞭嗎?讓我們一起用Python和Pygame,點亮你心中的遊戲之火,創造齣屬於你的獨一無二的遊戲世界!