作 者:(美)斯維加特 著 李強 譯
定 價:79.9
出 版 社:人民郵電出版社
出版日期:2017年10月01日
頁 數:336
裝 幀:平裝
ISBN:9787115466419
本書教你如何使用流行的Python編程語言來編寫計算機遊戲,即便你之前沒有任何編程經驗。首先,本書帶領讀者猜數字和Tic Tac Toe這樣的遊戲,然後開始學習更加高 級的遊戲的開發,例如基於文本的Sonar Treasure Hunt遊戲以及帶有音效和動畫的Dodger遊戲。在此過程中, 我們還會學習關鍵的編程和數學概念,這些將使得你的遊戲開發技能達到更高的層級。通過本書,你將學習:使用組合循環、變量和流程控制語句;選擇合適的數據結構來完成任務,例如列表、組;使用pygame等
●第1章交互式Shell1
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創建HelloWorld程序11
2.3.2保存程序12
2.3.3運行程序13
2.4HelloWorld程序如何工作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.3for循環語句25
3.7玩家的猜測26
3.8使用int()函數、float()函數、str()函數和bool()函數來轉換值26
3.9布爾數據類型28
3.9.1比較操作符28
3.9.2用條件檢查True或False29
3.9.3體驗布爾值、比較操作符和條件29
3.9.4=和==的區別30
3.10if語句30
3.11用break語句提早離開循環31
3.12判斷玩家是否贏了31
3.13判斷玩家是否輸了32
3.14小結32
第4章一個講笑話程序35
4.1Jokes遊戲的運行示例35
4.2Jokes遊戲的源代碼36
4.3代碼如何工作36
4.4轉義字符37
4.5單引號和雙引號38
4.6print()的end關鍵字形參39
4.7小結39
第5章DragonRealm41
5.1如何玩DragonRealm41
5.2DragonRealm的運行示例42
5.3DragonRealm的流程圖42
5.4DragonRealm的源代碼43
5.5導入random和time模塊44
5.6DragonRealm中的函數44
5.6.1def語句45
5.6.2調用函數45
5.6.3把函數定義放在哪裡45
5.7多行字符串46
5.8while語句實現循環46
5.9布爾操作符47
5.9.1and操作符47
5.9.2or操作符48
5.9.3not操作符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.1Bug的類型57
6.2調試器58
6.2.1啟動調試器59
6.2.2用調試器單步執行程序60
6.3查找Bug63
6.4設置斷點65
6.5使用斷點66
6.6小結68
第7章用流程圖設計Hangman69
7.1如何玩Hangman69
7.2Hangman的運行示例70
7.3ASCII字符圖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.1Hangman的源代碼79
8.2導入random模塊82
8.3常量82
8.4列表數據類型83
8.4.1用索素83
8.4.2列表連接84
8.4.3in操作符85
8.5調用方法85
8.5.1列表方法reverse()和append()86
8.5.2字符串方法split()86
8.6從單詞列表中獲取一個神秘單詞87
8.7向玩家顯示遊戲板87
8.7.1list()函數和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.9elif語句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章TicTacToe111
10.1TicTacToe的運行示例112
10.2TicTacToe的源代碼113
10.3設計程序116
10.3.1用數據表示遊戲板117
10.3.2遊戲AI117
10.4導入random模塊119
10.5在屏幕上打印遊戲板119
10.6讓玩家來選擇X或O120
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.15None值130
10.16創建計算機的AI131
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章推理遊戲Bagels137
11.1Bagels的運行示例138
11.2Bagels的源代碼138
11.3Bagels的流程圖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章SonarTreasureHunt遊戲159
13.1SonarTreasureHunt的運行示例160
13.2SonarTreasureHunt的源代碼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.5設置優選鍵長度187
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如何玩Reversegam195
15.2Reversegam的運行示例198
15.3Reversegam的源代碼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章ReversegamAI模擬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使用百分數評級AI229
16.3比較不同的AI算法231
16.3.1模擬程序3的源代碼231
16.3.2模擬程序3的AI是如何工作的232
16.3.3比較AI235
16.4小結237
第17章創建圖形239
17.1安裝pygame240
17.2pygame中的HelloWorld240
17.3運行pygameHelloWorld程序的示例240
17.4pygameHelloWorld的源代碼241
17.5導入pygame模塊242
17.6初始化pygame243
17.7設置pygame窗口243
17.組243
17.7.2Surface對像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.11pygame的繪制函數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.12Surface對像的blit()方法252
17.13將Surface對像繪制到屏幕上253
17.14事件和遊戲循環253
17.14.1獲取事件對像253
17.14.2退出程序254
17.15小結254
第18章動畫圖形255
18.1Animation程序的運行示例255
18.2Animation程序的源代碼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.2CollisionDetection程序的源代碼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.3SpritesandSounds程序的運行示例281
20.4SpritesandSounds程序的源代碼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章帶有聲音和圖像的Dodger289
21.1回顧pygame的基本數據類型289
21.2Dodger的運行示例290
21.3Dodger的源代碼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
Python是一種高級程序設計語言,因其簡潔、易讀及可擴展性日漸成為程序設計領域備受推崇的語言。本書通過編寫一個個小巧、有趣的遊戲來教授Python編程,並且采用直接展示遊戲的源代碼並通過實例來解釋編程的原理的方式。全書共21章,12個遊戲程序和示例貫穿其中,介紹了Python基礎知識、數據類型、函數、流程控制、程序調試、流程圖設計、字符串操作、列表和字典、笛卡爾坐標繫、密碼學基礎、遊戲AI模擬、動畫圖形、踫撞檢測、聲音和圖像等方方面面的程序設計知識。本書可以幫助讀者在輕松有趣的過程中,掌握Python遊戲編程的基本技能。本書適合不同年齡和層次的Python編程初學者閱讀。
(美)斯維加特 著 李強 譯
Al Sweigart是一名教授孩子和成人編程的軟件開 發者。通過http://inventwithpython.com/可以訪問他編寫的編程教程。他是《Python編程快速上手——讓繁瑣工作自動化》的作者。