Python 游戲編程快速上手, 4/e Invent Your Own Computer Games with Python, 4/e

[美]Al Sweigart(斯維加特)

  • Python 游戲編程快速上手, 4/e-preview-1
  • Python 游戲編程快速上手, 4/e-preview-2
Python 游戲編程快速上手, 4/e-preview-1

商品描述

Python是一種高 級程序設計語言,因其簡潔、易讀及可擴展性日漸成為程序設計領域備受推崇的語言。

本書通過編寫一個個小巧、有趣的游戲來教授Python編程,並且採用直接展示游戲的源代碼並通過實例來解釋編程的原理的方式。全書共21章,12個游戲程序和示例貫穿其中,介紹了Python基礎知識、數據類型、函數、流程控制、程序調試、流程圖設計、字符串操作、列表和字典、笛卡爾坐標系、密碼學基礎、游戲AI模擬、動畫圖形、碰撞檢測、聲音和圖像等方方面面的程序設計知識。本書可以幫助讀者在輕松有趣的過程中,掌握Python游戲編程的基本技能。

本書適合不同年齡和層次的Python編程初學者閱讀。

作者簡介

Al Sweigart是一名教授孩子和成人编程的软件开 发者。通过http://inventwithpython.com/可以访问他编写的编程教程。他是《Python编程快速上手——让繁琐工作自动化》的作者。

目錄大綱

目  錄

 

第 1章 交互式Shell 1

1.1 一些簡單的數學知識 1

1.1.1 整數和浮點數 2

1.1.2 表達式 2

1.2 計算表達式 3

1.3 語法錯誤 4

1.4 在變量中存儲值 4

1.5 小結 8

第 2章 編寫程序 9

2.1 字符串值 10

2.2 連接字符串 10

2.3 在IDLE的文件編輯器中

編寫程序 11

2.3.1 創建Hello World程序 11

2.3.2 保存程序 12

2.3.3 運行程序 13

2.4 Hello World程序如何工作 14

2.4.1 註釋 15

2.4.2 函數:程序中的小程序 15

2.4.3 終止程序 16

2.5 命名變量 16

2.6 小結 17

第3章 “猜數字”游戲 19

3.1 “猜數字”的運行示例 20

3.2 “猜數字”程序的源代碼 20

3.3 導入random模塊 21

3.4 用random.randint()函數

生成隨機數 22

3.5 歡迎玩家 23

3.6 流程控制語句 23

3.6.1 使用循環來重復代碼 23

3.6.2 組織語句塊 24

3.6.3 for循環語句 25

3.7 玩家的猜測 26

3.8 使用int()函數、float()函數、str()

函數和bool()函數來轉換值 26

3.9 布爾數據類型 28

3.9.1 比較操作符 28

3.9.2 用條件檢查True或

False 29

3.9.3 體驗布爾值、比較操作符

和條件 29

3.9.4 =和==的區別 30

3.10 if語句 30

3.11 用break語句提早離開循環 31

3.12 判斷玩家是否贏了 31

3.13 判斷玩家是否輸了 32

3.14 小結 32

第4章 一個講笑話程序 35

4.1 Jokes游戲的運行示例 35

4.2 Jokes游戲的源代碼 36

4.3 代碼如何工作 36

4.4 轉義字符 37

4.5 單引號和雙引號 38

4.6 print()的end關鍵字形參 39

4.7 小結 39

第5章 Dragon Realm 41

5.1 如何玩Dragon Realm 41

5.2 Dragon Realm的運行示例 42

5.3 Dragon Realm的流程圖 42

5.4 Dragon Realm的源代碼 43

5.5 導入random和time模塊 44

5.6 Dragon Realm中的函數 44

5.6.1 def語句 45

5.6.2 調用函數 45

5.6.3 把函數定義放在哪裡 45

5.7 多行字符串 46

5.8 while語句實現循環 46

5.9 布爾操作符 47

5.9.1 and操作符 47

5.9.2 or操作符 48

5.9.3 not操作符 49

5.9.4 布爾操作符的運算 49

5.10 返回值 50

5.11 全局作用域和局部作用域 51

5.12 函數形參 52

5.13 顯示游戲結果 53

5.14 決定哪個山洞有友善的龍 53

5.15 游戲循環 54

5.15.1 在程序中調用函數 55

5.15.2 詢問玩家要不要再玩

一局 55

5.16 小結 56

第6章 使用調試器 57

6.1 Bug的類型 57

6.2 調試器 58

6.2.1 啟動調試器 59

6.2.2 用調試器單步執行程序 60

6.3 查找Bug 63

6.4 設置斷點 65

6.5 使用斷點 66

6.6 小結 68

第7章 用流程圖設計Hangman 69

7.1 如何玩Hangman 69

7.2 Hangman的運行示例 70

7.3 ASCII字符圖 71

7.4 用流程圖來設計一個程序 71

7.4.1 生成流程圖 72

7.4.2 流程圖的分支 73

7.4.3 結束或者重新開始游戲 74

7.4.4 再猜一次 75

7.4.5 為玩家提供反饋 77

7.5 小結 78

第8章 編寫Hangman的代碼 79

8.1 Hangman的源代碼 79

8.2 導入random模塊 82

8.3 常量 82

8.4 列表數據類型 83

8.4.1 用索引訪問元素 83

8.4.2 列表連接 84

8.4.3 in操作符 85

8.5 調用方法 85

8.5.1 列表方法reverse()和

append() 86

8.5.2 字符串方法split() 86

8.6 從單詞列表中獲取一個神秘

單詞 87

8.7 向玩家顯示游戲板 87

8.7.1 list()函數和range()函數 88

8.7.2 列表和字符串分片 89

8.7.3 用空格表示神秘單詞 90

8.8 獲取玩家的猜測 91

8.8.1 字符串方法lower()和

upper() 92

8.8.2 離開while循環 93

8.9 elif語句 93

8.10 確保玩家輸入一個有效的

猜測 94

8.11 詢問玩家是否想再玩一局 94

8.12 回顧Hangman中的函數 95

8.13 游戲循環 96

8.13.1 調用displayBoard()函數 96

8.13.2 讓玩家輸入他們的猜測 96

8.13.3 判斷字母是否在這個

神秘單詞中 97

8.13.4 判斷玩家是否獲勝 97

8.13.5 當玩家猜錯時 97

8.13.6 檢查玩家是否輸了 98

8.13.7 結束並重新設置游戲 98

8.14 小結 99

第9章 Hangman擴展 101

9.1 添加更多的猜測機會 101

9.2 字典數據類型 102

9.2.1 用len()函數獲取字典的

大小 103

9.2.2 字典和列表的區別 103

9.2.3 字典方法keys()和

values() 104

9.2.4 在Hangman中使用單詞的

字典 104

9.3 從一個列表中隨機選取 105

9.4 從列表中刪除項 106

9.5 多變量賦值 107

9.6 向玩家顯示單詞的分類 108

9.7 小結 109

第 10章 Tic Tac Toe 111

10.1 Tic Tac Toe的運行示例 112

10.2 Tic Tac Toe的源代碼 113

10.3 設計程序 116

10.3.1 用數據表示游戲板 117

10.3.2 游戲AI 117

10.4 導入random模塊 119

10.5 在屏幕上打印游戲板 119

10.6 讓玩家來選擇X或O 120

10.7 決定誰先走 121

10.8 在游戲板上放置一個標記 121

10.8.1 列表引用 121

10.8.2 在makeMove()中使用

列表引用 124

10.9 判斷玩家是否獲勝 125

10.10 復制游戲板的數據 126

10.11 判斷游戲板上的格子是否

為空 127

10.12 讓玩家輸入他們的落子 127

10.13 短路求值 128

10.14 從落子列表中選擇一個

落子 130

10.15 None值 130

10.16 創建電腦的AI 131

10.16.1 電腦判斷自己能否

落子即獲勝 132

10.16.2 電腦判斷玩家是否

可以落子即獲勝 132

10.16.3 依次判斷角、中心

和邊 133

10.16.4 判斷游戲板是否滿了 133

10.17 游戲循環 134

10.17.1 決定玩家的符號和

誰先走 134

10.17.2 運行玩家的輪次 134

10.17.3 運行電腦的輪次 135

10.17.4 詢問玩家是否再玩

一次 136

10.18 小結 136

第 11章 推理游戲Bagels 137

11.1 Bagels的運行示例 138

11.2 Bagels的源代碼 138

11.3 Bagels的流程圖 140

11.4 導入random並定義

getSecretNum() 140

11.5 打亂一組唯 一數的順序 141

11.5.1 用random.shuffle()函數改變

列表項的順序 141

11.5.2 從打亂次序的數中獲取神秘

數字 142

11.6 復合賦值操作符 142

11.7 計算要給出的線索 143

11.8 列表方法sort() 144

11.9 字符串方法join() 145

11.10 檢查字符串中是否只包含

數字 145

11.11 游戲的開始 146

11.12 字符串插值 146

11.13 游戲循環 147

11.13.1 獲取玩家的猜測 147

11.13.2 根據玩家的猜測給出

線索 148

11.13.3 判斷玩家的輸贏 148

11.13.4 詢問玩家是否再玩

一局 148

11.14 小結 149

第 12章 笛卡爾坐標 151

12.1 網格和笛卡爾坐標 151

12.2 負數 153

12.3 電腦屏幕的坐標系 154

12.4 數學技巧 155

12.4.1 技巧1:減號吃掉它左邊

的加號 155

12.4.2 技巧2:兩個減號合並為

一個加號 155

12.4.3 技巧3:加法的可

交換性 156

12.5 絕 對值和abs()函數 156

12.6 小結 157

第 13章 Sonar Treasure Hunt游戲 159

13.1 Sonar Treasure Hunt的運行

示例 160

13.2 Sonar Treasure Hunt的源

代碼 162

13.3 設計程序 167

13.4 導入random、sys和math

模塊 167

13.5 創建一個新的游戲板 167

13.6 繪制游戲板 168

13.6.1 在頂部繪制X軸 169

13.6.2 繪制海洋 170

13.6.3 打印出海洋中的行 170

13.6.4 在游戲板底部繪制X軸

坐標 171

13.7 創建隨機的藏寶箱 171

13.8 判斷一次移動是否有效 172

13.9 在游戲板上進行一次移動 172

13.9.1 找到近的藏寶箱的

算法 172

13.9.2 使用列表方法remove()

刪除值 175

13.9.3 獲取玩家的移動 176

13.10 為玩家打印出游戲說明 177

13.11 游戲循環 177

13.11.1 為玩家顯示游戲的

狀態 179

13.11.2 處理玩家的移動 179

13.11.3 找到一個沉沒的

藏寶箱 179

13.11.4 判斷玩家是否贏了 180

13.11.5 判斷玩家是否輸了 180

13.11.6 用sys.exit()函數終止

程序 181

13.12 小結 181

第 14章 凱撒密碼 183

14.1 密碼學和加密 184

14.2 凱撒密碼簡介 184

14.3 凱撒密碼的運行示例 185

14.4 凱撒密碼程序的源代碼 186

14.6 決定加密還是解密 187

14.7 從玩家處得到消息 188

14.8 從玩家處得到密鑰 188

14.9 加密或解密消息 188

14.9.1 使用字符串方法find()

找到所傳遞的字符串 189

14.9.2 加密或解密每個字母 190

14.10 程序開始 191

14.11 暴力破解 191

14.12 添加暴力破解模式 192

14.13 小結 193

第 15章 Reversegam游戲 195

15.1 如何玩Reversegam 195

15.2 Reversegam的運行示例 198

15.3 Reversegam的源代碼 200

15.4 導入模塊和設置常量 205

15.5 游戲板數據結構 205

15.5.1 在屏幕上繪制游戲板數據

結構 205

15.5.2 創建一個新的游戲板數據

結構 206

15.6 判斷一次落子是否有效 207

15.6.1 查看8個方向中的每一個

方向 208

15.6.2 發現是否有可以反轉的

棋子 209

15.7 判斷有效的坐標 210

15.7.1 得到所有有效移動的一個

列表 210

15.7.2 調用bool()函數 211

15.8 計算游戲板的得分 212

15.9 獲取玩家的棋子選擇 212

15.10 決定誰先走 213

15.11 在游戲板上落下一個棋子 213

15.12 復制游戲板數據結構 214

15.13 判斷一個格子是否在

角落上 214

15.14 獲取玩家的移動 214

15.15 獲取電腦的移動 216

15.15.1 角落移動策略 216

15.15.2 獲取高得分的移動的列表 217

15.16 在屏幕上打印分數 218

15.17 游戲開始 218

15.17.1 檢查僵局 218

15.17.2 運行玩家的輪次 219

15.17.3 運行電腦的輪次 220

15.18 游戲循環 221

15.19 詢問玩家是否再玩一局 222

15.20 小結 222

第 16章 Reversegam AI模擬 223

16.1 讓電腦和自己下棋 224

16.1.1 模擬程序1的運行

示例 224

16.1.2 模擬程序1的源代碼 225

16.1.3 刪除玩家提示並添加一個

電腦玩家 226

16.2 讓電腦自己多玩幾次 227

16.2.1 模擬程序2的運行

示例 227

16.2.2 模擬程序2的源代碼 227

16.2.3 記錄多次游戲 228

16.2.4 註釋掉print()函數

調用 229

16.2.5 使用百分數評級AI 229

16.3 比較不同的AI算法 231

16.3.1 模擬程序3的源代碼 231

16.3.2 模擬程序3的AI是

如何工作的 232

16.3.3 比較AI 235

16.4 小結 237

第 17章 創建圖形 239

17.1 安裝pygame 240

17.2 pygame中的Hello World 240

17.3 運行pygame Hello World程序的

示例 240

17.4 pygame Hello World的

源代碼 241

17.5 導入pygame模塊 242

17.6 初始化pygame 243

17.7 設置pygame窗口 243

17.7.1 元組 243

17.7.2 Surface對象 244

17.8 設置顏色變量 244

17.9 將文本寫到pygame窗口上 245

17.9.1 使用字體來樣式化

文本 245

17.9.2 渲染一個Font對象 246

17.9.3 使用Rect屬性設置文本

位置 247

17.10 用一種顏色填充一個Surface

對象 248

17.11 pygame的繪制函數 249

17.11.1 繪制一個多邊形 249

17.11.2 繪制直線 250

17.11.3 繪制圓形 250

17.11.4 繪制橢圓形 251

17.11.5 繪制矩形 251

17.11.6 給像素著色 252

17.12 Surface對象的blit()方法 252

17.13 將Surface對象繪制到

屏幕上 253

17.14 事件和游戲循環 253

17.14.1 獲取事件對象 253

17.14.2 退出程序 254

17.15 小結 254

第 18章 動畫圖形 255

18.1 Animation程序的運行示例 255

18.2 Animation程序的源代碼 256

18.3 讓積木移動和彈回 258

18.4 設置常量變量 258

18.4.1 用於方向的常量變量 259

18.4.2 用於顏色的常量變量 260

18.5 設置積木數據結構 260

18.6 游戲循環 260

18.6.1 處理玩家退出的情況 261

18.6.2 移動每一個積木 261

18.6.3 彈跳一個積木 262

18.6.4 將積木繪制到窗口中

新的位置 263

18.6.5 在屏幕上繪制窗口 264

18.7 小結 264

第 19章 碰撞檢測 265

19.1 碰撞檢測程序的運行示例 266

19.2 Collision Detection程序的

源代碼 266

19.3 導入模塊 268

19.4 使用一個時鐘來同步程序 268

19.5 創建窗口和數據結構 269

19.6 設置變量以記錄移動 270

19.7 處理事件 270

19.7.1 處理KEYDOWN事件 271

19.7.2 處理KEYUP事件 273

19.8 轉移玩家 274

19.9 添加新的食物方塊 274

19.10 在屏幕上移動玩家 275

19.10.1 將玩家繪制到屏幕上 275

19.10.2 檢查碰撞 276

19.11 在窗口上繪制食物方塊 276

19.12 小結 277

第 20章 聲音和圖像 279

20.1 使用精靈添加圖像 279

20.2 聲音文件和圖像文件 280

20.3 Sprites and Sounds程序的

運行示例 281

20.4 Sprites and Sounds程序的

源代碼 281

20.5 創建窗口和數據結構 284

20.5.1 添加一個精靈 284

20.5.2 改變一個精靈的大小 284

20.6 創建音樂和聲音 285

20.6.1 添加聲音文件 285

20.6.2 切換和關閉聲音 285

20.7 把玩家繪制到窗口上 286

20.8 檢查碰撞 286

20.9 在窗口中繪制櫻桃 287

20.10 小結 287

第 21章 帶有聲音和圖像的Dodger 289

21.1 回顧pygame的基本數據

類型 289

21.2 Dodger的運行示例 290

21.3 Dodger的源代碼 291

21.4 導入模塊 295

21.5 創建常量 295

21.6 定義函數 296

21.6.1 終止和暫停游戲 296

21.6.2 記錄和敵人的碰撞 297

21.6.3 將文本繪制到窗口 297

21.7 初始化pygame並設置窗口 298

21.8 設置Font、Sound和Image

對象 299

21.9 顯示開始界面 300

21.10 開始游戲 300

21.11 游戲循環 302

21.11.1 處理鍵盤事件 302

21.11.2 處理鼠標移動 303

21.12 增加新的敵人 303

21.13 移動玩家角色和敵人 305

21.14 實現作弊模式 306

21.15 刪除敵人 306

21.16 繪制窗口 307

21.16.1 繪制玩家的得分 307

21.16.2 繪制玩家角色和敵人 307

21.17 碰撞檢測 308

21.18 游戲結束屏幕 308

21.19 修改Dodger游戲 309

21.20 小結 310