Python面向對象編程:構建游戲和GUI Object-Oriented Python: Master Oop by Building Games and GUIs

[美]艾維·卡爾布(Irv Kalb)

  • Python面向對象編程:構建游戲和GUI-preview-1
  • Python面向對象編程:構建游戲和GUI-preview-2
Python面向對象編程:構建游戲和GUI-preview-1

商品描述

本書首先介紹構建類和創建對象的基礎知識,並結合代碼講述如何將理論付諸實踐;然後討論面向對象編程的關鍵概念——封裝、多態性和繼承,包括如何使用對象管理器創建並管理多個對象,如何通過封裝對客戶端代碼隱藏對象的內部細節,如何使用多態性定義一個接口並在多個類中實現它,如何應用繼承構建現有代碼;最後講述如何構建一款帶完整的動畫和聲音的視頻游戲,從而將所有內容整合在一起。本書涵蓋了兩個功能齊全的Python代碼包,它們將加速Python中圖形用戶界面程序的開發。

本書不僅適合Python開發人員閱讀,還適合電腦相關專業的師生閱讀。

作者簡介

Irv Kalb是加州大学圣克鲁斯硅谷分校和硅谷大学的客座教授,负责“Python入门”与“Python面向对象编程”课程的教学。Irv拥有计算机科学的学士和硕士学位,使用多种计算机语言进行面向对象编程已超过30年,并且到现在已经有超过10年的教学经验。他有几十年的软件开发经验,主要关注教育软件的开发。在Furry Pants Productions公司,他和妻子以Darby the Dalmatian这个角色为原型,制作并发布了两张寓教于乐的CD-ROM。Irv还撰写了Learn to Program with Python 3: A Step-by-step Guide to Programming(Apress)一书。

Irv深入参与了极限飞盘(Ultimate Frisbee)这项运动的早期开发。他主持编写了多个版本的官方规则手册,并与人合著了关于这项运动的图书—— Ultimate: Fundamentals of the Sport。

目錄大綱

目  錄

 

第 一部分 面向對象編程入門

第 1章 過程式Python示例 2

1.1 Higher or Lower紙牌游戲 2

1.1.1 表示數據 2

1.1.2 實現 3

1.1.3 可重用的代碼 5

1.2 銀行賬戶模擬 5

1.2.1 分析必要的操作和數據 5

1.2.2 實現1:不使用函數的單個賬戶 6

1.2.3 實現2:使用函數的單個賬戶 7

1.2.4 實現3:兩個賬戶 9

1.2.5 實現4:使用列表的多個賬戶 10

1.2.6 實現5:賬戶字典的列表 13

1.3 過程式實現的常見問題 15

1.4 面向對象解決方案:初識類 15

1.5 小結 16

第 2章 通過面向對象編程模擬物體 17

2.1 構建物體的軟件模型 17

2.2 類和對象簡介 18

2.3 類、對象和實例化 19

2.3.1 在Python中編寫類 20

2.3.2 作用域和實例變量 21

2.3.3 函數和方法的區別 22

2.3.4 從類創建對象 22

2.3.5 調用對象的方法 23

2.3.6 從相同類創建多個實例 24

2.3.7 Python數據類型被實現為類 25

2.3.8 對象的定義 26

2.4 創建一個更加復雜的類 26

2.5 將一個更加復雜的物理對象表示為類 28

2.5.1 向方法傳遞實參 32

2.5.2 多個實例 33

2.5.3 初始化參數 34

2.6 類的使用 35

2.7 以OOP作為解決方案 35

2.8 小結 36

第3章 對象的思維模型和 “self”的意義 37

3.1 重看DimmerSwitch類 37

3.2 1號高級思維模型 38

3.3 2號深層模型 39

3.4 self的含義 41

3.5 小結 43

第4章 管理多個對象 44

4.1 銀行賬戶類 44

4.2 導入類的代碼 46

4.3 創建一些測試代碼 47

4.3.1 創建多個賬戶 47

4.3.2 在列表中包含多個Account對象 49

4.3.3 具有唯一標識符的多個對象 51

4.3.4 創建一個交互式菜單 53

4.4 創建對象管理器 54

4.4.1 創建對象管理器 56

4.4.2 創建對象管理器的主代碼 58

4.5 使用異常更好地處理錯誤 59

4.5.1 try和except 60

4.5.2 raise語句和自定義異常 60

4.6 在Bank程序中使用異常 61

4.6.1 使用異常的Account類 61

4.6.2 優化後的Bank類 63

4.6.3 處理異常的主代碼 64

4.7 在對象列表上調用相同的方法 65

4.8 接口與實現 67

4.9 小結 67

第二部分 使用pygame創建圖形

用戶界面

第5章 pygame簡介 70

5.1 安裝pygame 70

5.2 窗口 71

5.2.1 窗口坐標系統 71

5.2.2 像素顏色 74

5.3 事件驅動的程序 75

5.4 使用pygame 76

5.4.1 打開一個空白窗口 76

5.4.2 繪制圖片 79

5.4.3 檢測鼠標單擊 81

5.4.4 處理鍵盤操作 83

5.4.5 創建基於位置的動畫 86

5.4.6 使用pygame矩形 88

5.5 播放聲音 90

5.5.1 播放音效 90

5.5.2 播放背景音樂 91

5.6 繪制形狀 92

5.7 小結 95

第6章 面向對象的pygame 96

6.1 使用OOP pygame創建屏保球 96

6.1.1 創建Ball類 96

6.1.2 使用Ball類 98

6.1.3 創建多個Ball對象 99

6.1.4 創建大量Ball對象 100

6.2 構建可重用的、面向對象的按鈕 101

6.2.1 構建一個Button類 101

6.2.2 使用SimpleButton的主代碼 103

6.2.3 創建包含多個按鈕的程序 104

6.3 構建可重用的、面向對象的文本顯示 105

6.3.1 顯示文本的步驟 105

6.3.2 創建SimpleText類 106

6.4 包含SimpleText和SimpleButton的彈球示例 107

6.5 對比接口與實現 109

6.6 回調函數 109

6.6.1 創建回調函數 110

6.6.2 對SimpleButton使用回調函數 110

6.7 小結 112

第7章 pygame GUI小部件 113

7.1 向函數或方法傳遞實參 113

7.1.1 位置和關鍵字形參 114

7.1.2 關於關鍵字形參的一些說明 115

7.1.3 使用None作為默認值 115

7.1.4 選擇關鍵字和默認值 116

7.1.5 GUI小部件中的默認值 117

7.2 pygwidgets包 117

7.2.1 設置 117

7.2.2 總體設計方法 118

7.2.3 添加圖片 119

7.2.4 添加按鈕、復選框和單選按鈕 119

7.2.5 文本輸出和輸入 122

7.2.6 其他pygwidgets類 124

7.2.7 pygwidgets示例程序 124

7.3 一致的API的重要性 125

7.4 小結 125

第三部分 封裝、多態性和繼承

第8章 封裝 128

8.1 函數的封裝 128

8.2 對象的封裝 129

8.3 封裝的含義 129

8.3.1 直接訪問方式以及為什麽應該避免使用這種方式 130

8.3.2 嚴格解釋getter和setter 133

8.3.3 安全的直接訪問 135

8.4 使實例變量更加私密 135

8.4.1 隱式私有 135

8.4.2 更加顯式地私有 135

8.5 裝飾器和@屬性 136

8.6 pygwidgets類中的封裝 139

8.7 一個真實的故事 140

8.8 抽象 141

8.9 小結 143

第9章 多態性 144

9.1 向現實世界的對象發送消息 144

9.2 編程中應用多態性的經典示例 145

9.3 使用pygame形狀的示例 146

9.3.1 Square類 146

9.3.2 Circle類和Triangle類 147

9.3.3 創建形狀的主程序 149

9.3.4 擴展模式 151

9.4 pygwidgets表現出多態性 151

9.5 運算符的多態性 152

9.5.1 魔術方法 153

9.5.2 比較運算符的魔術方法 153

9.5.3 包含魔術方法的Rectangle類 154

9.5.4 使用魔術方法的主程序 156

9.5.5 數學運算符的魔術方法 158

9.5.6 向量示例 158

9.6 創建對象中值的字符串表示 160

9.7 包含魔術方法的Fraction類 162

9.8 小結 165

第 10章 繼承 166

10.1 面向對象編程中的繼承 166

10.2 實現繼承 167

10.3 Employee和Manager示例 168

10.3.1 基類Employee 168

10.3.2 子類Manager 168

10.3.3 測試代碼 170

10.4 客戶端眼中的子類 171

10.5 現實世界的繼承示例 172

10.5.1 InputNumber 172

10.5.2 DisplayMoney 174

10.5.3 示例用法 176

10.6 從同一個基類繼承多個類 179

10.7 抽象類和抽象方法 182

10.8 pygwidgets如何使用繼承 185

10.9 類的層次 186

10.10 使用繼承編程的困難 187

10.11 小結 188

第 11章 管理對象使用的內存 189

11.1 對象的生存期 189

11.1.1 引用計數 189

11.1.2 垃圾回收 194

11.2 類變量 194

11.2.1 類變量常量 194

11.2.2 將類變量用於計數 195

11.3 綜合運用:氣球示例程序 196

11.3.1 常量模塊 197

11.3.2 主程序代碼 198

11.3.3 氣球管理器 200

11.3.4 Balloon類和對象 202

11.4 使用slots管理內存 204

11.5 小結 206

第四部分 在游戲開發中使用OOP

第 12章 紙牌游戲 208

12.1 Card類 208

12.2 Deck類 210

12.3 Higher or Lower游戲 212

12.3.1 主程序 212

12.3.2 Game對象 213

12.4 使用__name__進行測試 216

12.5 其他紙牌游戲 217

12.5.1 Blackjack牌堆 217

12.5.2 使用非標準牌堆的游戲 217

12.6 小結 218

第 13章 定時器 219

13.1 定時器演示程序 219

13.2 實現定時器的3種方法 220

13.2.1 統計幀數 220

13.2.2 定時器事件 221

13.2.3 通過計算經過的時間來創建定時器 222

13.3 安裝pyghelpers 223

13.4 Timer類 224

13.5 顯示時間 226

13.5.1 CountUpTimer 226

13.5.2 CountDownTimer 228

13.6 小結 229

第 14章 動畫 230

14.1 構建動畫類 230

14.1.1 SimpleAnimation類 230

14.1.2 SimpleSpriteSheetAnimation類 234

14.1.3 將兩個類合並起來 237

14.2 pygwidgets中的動畫類 237

14.2.1 Animation類 238

14.2.2 SpriteSheetAnimation類 239

14.2.3 公共基類PygAnimation 240

14.2.4 示例動畫程序 240

14.3 小結 241

第 15章 場景 242

15.1 狀態機方法 242

15.2 狀態機的一個pygame示例 244

15.3 用於管理許多場景的場景管理器 248

15.4 使用場景管理器的一個示例程序 249

15.4.1 主程序 250

15.4.2 構建場景 252

15.4.3 一個典型場景 254

15.5 使用場景的Rock,Paper,Scissors 255

15.6 場景之間的通信 259

15.6.1 從目標場景請求信息 259

15.6.2 向目標場景發送信息 260

15.6.3 向所有場景發送信息 260

15.6.4 測試場景之間的通信 260

15.7 場景管理器的實現 261

15.7.1 run()方法 262

15.7.2 主方法 263

15.7.3 場景之間的通信 264

15.8 小結 265

第 16章 完整的Dodger 游戲 266

16.1 模態對話框 266

16.1.1 Yes/No和警告對話框 266

16.1.2 Answer對話框 269

16.2 構建完整的Dodger游戲 271

16.2.1 游戲概述 271

16.2.2 實現 272

16.2.3 擴展游戲 287

16.3 小結 287

第 17章 設計模式及收尾 289

17.1 模型-視圖-控制器 289

17.1.1 文件顯示示例 289

17.1.2 統計顯示示例 290

17.1.3 MVC模式的優勢 294

17.2 小結 294