關(guān)于我們
書單推薦
新書推薦
|
Python游戲編程快速上手 第4版
Python是一種高級程序設(shè)計語言,因其簡潔、易讀及可擴展性日漸成為程序設(shè)計領(lǐng)域備受推崇的語言。
本書通過編寫一個個小巧、有趣的游戲來教授Python編程,并且采用直接展示游戲的源代碼并通過實例來解釋編程的原理的方式。全書共21章,12個游戲程序和示例貫穿其中,介紹了Python基礎(chǔ)知識、數(shù)據(jù)類型、函數(shù)、流程控制、程序調(diào)試、流程圖設(shè)計、字符串操作、列表和字典、笛卡爾坐標系、密碼學基礎(chǔ)、游戲AI模擬、動畫圖形、碰撞檢測、聲音和圖像等方方面面的程序設(shè)計知識。本書可以幫助讀者在輕松有趣的過程中,掌握Python游戲編程的基本技能。 本書適合不同年齡和層次的Python編程初學者閱讀。
本書教你如何使用流行的Python編程語言來編寫計算機游戲,即便你之前沒有任何編程經(jīng)驗。
首先,本書帶領(lǐng)讀者猜數(shù)字和Tic Tac Toe這樣的經(jīng)典游戲,然后開始學習更加高級的游戲的開發(fā),例如基于文本的Sonar Treasure Hunt游戲以及帶有音效和動畫的Dodger游戲。在此過程中, 我們還會學習關(guān)鍵的編程和數(shù)學概念,這些將使得你的游戲開發(fā)技能達到更高的層級。 通過本書,你將學習: 使用組合循環(huán)、變量和流程控制語句; 選擇合適的數(shù)據(jù)結(jié)構(gòu)來完成任務(wù),例如列表、字典和元組; 使用pygame模塊,為游戲添加圖形和動畫; 處理鍵盤和鼠標輸入; 編寫簡單的人工智能程序,從而能夠和計算機玩游戲; 使用加密技術(shù)把文本信息轉(zhuǎn)換為密碼; 調(diào)試程序并找出常見錯誤。 隨著你編寫每一個游戲,你將打下牢固的Python編程基礎(chǔ),并且能夠更好地理解計算機科學的基礎(chǔ)知識。
Al Sweigart是一名教授孩子和成人編程的軟件開發(fā)者。通過http://inventwithpython.com/可以訪問他編寫的編程教程。他是暢銷書《Python編程快速上手——讓繁瑣工作自動化》的作者。
目 錄
第1章 交互式Shell 1 1.1 一些簡單的數(shù)學知識 1 1.1.1 整數(shù)和浮點數(shù) 2 1.1.2 表達式 2 1.2 計算表達式 3 1.3 語法錯誤 4 1.4 在變量中存儲值 4 1.5 小結(jié) 8 第2章 編寫程序 9 2.1 字符串值 10 2.2 連接字符串 10 2.3 在IDLE的文件編輯器中 編寫程序 11 2.3.1 創(chuàng)建Hello World程序 11 2.3.2 保存程序 12 2.3.3 運行程序 13 2.4 Hello World程序如何工作 14 2.4.1 注釋 15 2.4.2 函數(shù):程序中的小程序 15 2.4.3 終止程序 16 2.5 命名變量 16 2.6 小結(jié) 17 第3章 “猜數(shù)字”游戲 19 3.1 “猜數(shù)字”的運行示例 20 3.2 “猜數(shù)字”程序的源代碼 20 3.3 導入random模塊 21 3.4 用random.randint()函數(shù) 生成隨機數(shù) 22 3.5 歡迎玩家 23 3.6 流程控制語句 23 3.6.1 使用循環(huán)來重復代碼 23 3.6.2 組織語句塊 24 3.6.3 for循環(huán)語句 25 3.7 玩家的猜測 26 3.8 使用int()函數(shù)、float()函數(shù)、str() 函數(shù)和bool()函數(shù)來轉(zhuǎn)換值 26 3.9 布爾數(shù)據(jù)類型 28 3.9.1 比較操作符 28 3.9.2 用條件檢查True或 False 29 3.9.3 體驗布爾值、比較操作符 和條件 29 3.9.4 =和==的區(qū)別 30 3.10 if語句 30 3.11 用break語句提早離開循環(huán) 31 3.12 判斷玩家是否贏了 31 3.13 判斷玩家是否輸了 32 3.14 小結(jié) 32 第4章 一個講笑話程序 35 4.1 Jokes游戲的運行示例 35 4.2 Jokes游戲的源代碼 36 4.3 代碼如何工作 36 4.4 轉(zhuǎn)義字符 37 4.5 單引號和雙引號 38 4.6 print()的end關(guān)鍵字形參 39 4.7 小結(jié) 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中的函數(shù) 44 5.6.1 def語句 45 5.6.2 調(diào)用函數(shù) 45 5.6.3 把函數(shù)定義放在哪里 45 5.7 多行字符串 46 5.8 while語句實現(xiàn)循環(huán) 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 函數(shù)形參 52 5.13 顯示游戲結(jié)果 53 5.14 決定哪個山洞有友善的龍 53 5.15 游戲循環(huán) 54 5.15.1 在程序中調(diào)用函數(shù) 55 5.15.2 詢問玩家要不要再玩 一局 55 5.16 小結(jié) 56 第6章 使用調(diào)試器 57 6.1 Bug的類型 57 6.2 調(diào)試器 58 6.2.1 啟動調(diào)試器 59 6.2.2 用調(diào)試器單步執(zhí)行程序 60 6.3 查找Bug 63 6.4 設(shè)置斷點 65 6.5 使用斷點 66 6.6 小結(jié) 68 第7章 用流程圖設(shè)計Hangman 69 7.1 如何玩Hangman 69 7.2 Hangman的運行示例 70 7.3 ASCII字符圖 71 7.4 用流程圖來設(shè)計一個程序 71 7.4.1 生成流程圖 72 7.4.2 流程圖的分支 73 7.4.3 結(jié)束或者重新開始游戲 74 7.4.4 再猜一次 75 7.4.5 為玩家提供反饋 77 7.5 小結(jié) 78 第8章 編寫Hangman的代碼 79 8.1 Hangman的源代碼 79 8.2 導入random模塊 82 8.3 常量 82 8.4 列表數(shù)據(jù)類型 83 8.4.1 用索引訪問元素 83 8.4.2 列表連接 84 8.4.3 in操作符 85 8.5 調(diào)用方法 85 8.5.1 列表方法reverse()和 append() 86 8.5.2 字符串方法split() 86 8.6 從單詞列表中獲取一個神秘 單詞 87 8.7 向玩家顯示游戲板 87 8.7.1 list()函數(shù)和range()函數(shù) 88 8.7.2 列表和字符串分片 89 8.7.3 用空格表示神秘單詞 90 8.8 獲取玩家的猜測 91 8.8.1 字符串方法lower()和 upper() 92 8.8.2 離開while循環(huán) 93 8.9 elif語句 93 8.10 確保玩家輸入一個有效的 猜測 94 8.11 詢問玩家是否想再玩一局 94 8.12 回顧Hangman中的函數(shù) 95 8.13 游戲循環(huán) 96 8.13.1 調(diào)用displayBoard()函數(shù) 96 8.13.2 讓玩家輸入他們的猜測 96 8.13.3 判斷字母是否在這個 神秘單詞中 97 8.13.4 判斷玩家是否獲勝 97 8.13.5 當玩家猜錯時 97 8.13.6 檢查玩家是否輸了 98 8.13.7 結(jié)束并重新設(shè)置游戲 98 8.14 小結(jié) 99 第9章 Hangman擴展 101 9.1 添加更多的猜測機會 101 9.2 字典數(shù)據(jù)類型 102 9.2.1 用len()函數(shù)獲取字典的 大小 103 9.2.2 字典和列表的區(qū)別 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 小結(jié) 109 第10章 Tic Tac Toe 111 10.1 Tic Tac Toe的運行示例 112 10.2 Tic Tac Toe的源代碼 113 10.3 設(shè)計程序 116 10.3.1 用數(shù)據(jù)表示游戲板 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 復制游戲板的數(shù)據(jù) 126 10.11 判斷游戲板上的格子是否 為空 127 10.12 讓玩家輸入他們的落子 127 10.13 短路求值 128 10.14 從落子列表中選擇一個 落子 130 10.15 None值 130 10.16 創(chuàng)建計算機的AI 131 10.16.1 計算機判斷自己能否 落子即獲勝 132 10.16.2 計算機判斷玩家是否 可以落子即獲勝 132 10.16.3 依次判斷角、中心 和邊 133 10.16.4 判斷游戲板是否滿了 133 10.17 游戲循環(huán) 134 10.17.1 決定玩家的符號和 誰先走 134 10.17.2 運行玩家的輪次 134 10.17.3 運行計算機的輪次 135 10.17.4 詢問玩家是否再玩 一次 136 10.18 小結(jié) 136 第11章 推理游戲Bagels 137 11.1 Bagels的運行示例 138 11.2 Bagels的源代碼 138 11.3 Bagels的流程圖 140 11.4 導入random并定義 getSecretNum() 140 11.5 打亂一組唯一數(shù)的順序 141 11.5.1 用random.shuffle()函數(shù)改變 列表項的順序 141 11.5.2 從打亂次序的數(shù)中獲取神秘 數(shù)字 142 11.6 復合賦值操作符 142 11.7 計算要給出的線索 143 11.8 列表方法sort() 144 11.9 字符串方法join() 145 11.10 檢查字符串中是否只包含 數(shù)字 145 11.11 游戲的開始 146 11.12 字符串插值 146 11.13 游戲循環(huán) 147 11.13.1 獲取玩家的猜測 147 11.13.2 根據(jù)玩家的猜測給出 線索 148 11.13.3 判斷玩家的輸贏 148 11.13.4 詢問玩家是否再玩 一局 148 11.14 小結(jié) 149 第12章 笛卡爾坐標 151 12.1 網(wǎng)格和笛卡爾坐標 151 12.2 負數(shù) 153 12.3 計算機屏幕的坐標系 154 12.4 數(shù)學技巧 155 12.4.1 技巧1:減號吃掉它左邊 的加號 155 12.4.2 技巧2:兩個減號合并為 一個加號 155 12.4.3 技巧3:加法的可 交換性 156 12.5 絕對值和abs()函數(shù) 156 12.6 小結(jié) 157 第13章 Sonar Treasure Hunt游戲 159 13.1 Sonar Treasure Hunt的運行 示例 160 13.2 Sonar Treasure Hunt的源 代碼 162 13.3 設(shè)計程序 167 13.4 導入random、sys和math 模塊 167 13.5 創(chuàng)建一個新的游戲板 167 13.6 繪制游戲板 168 13.6.1 在頂部繪制X軸 169 13.6.2 繪制海洋 170 13.6.3 打印出海洋中的行 170 13.6.4 在游戲板底部繪制X軸 坐標 171 13.7 創(chuàng)建隨機的藏寶箱 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 游戲循環(huán) 177 13.11.1 為玩家顯示游戲的 狀態(tài) 179 13.11.2 處理玩家的移動 179 13.11.3 找到一個沉沒的 藏寶箱 179 13.11.4 判斷玩家是否贏了 180 13.11.5 判斷玩家是否輸了 180 13.11.6 用sys.exit()函數(shù)終止 程序 181 13.12 小結(jié) 181 第14章 凱撒密碼 183 14.1 密碼學和加密 184 14.2 凱撒密碼簡介 184 14.3 凱撒密碼的運行示例 185 14.4 凱撒密碼程序的源代碼 186 14.5 設(shè)置最大鍵長度 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 小結(jié) 193 第15章 Reversegam游戲 195 15.1 如何玩Reversegam 195 15.2 Reversegam的運行示例 198 15.3 Reversegam的源代碼 200 15.4 導入模塊和設(shè)置常量 205 15.5 游戲板數(shù)據(jù)結(jié)構(gòu) 205 15.5.1 在屏幕上繪制游戲板數(shù)據(jù) 結(jié)構(gòu) 205 15.5.2 創(chuàng)建一個新的游戲板數(shù)據(jù) 結(jié)構(gòu) 206 15.6 判斷一次落子是否有效 207 15.6.1 查看8個方向中的每一個 方向 208 15.6.2 發(fā)現(xiàn)是否有可以反轉(zhuǎn)的 棋子 209 15.7 判斷有效的坐標 210 15.7.1 得到所有有效移動的一個 列表 210 15.7.2 調(diào)用bool()函數(shù) 211 15.8 計算游戲板的得分 212 15.9 獲取玩家的棋子選擇 212 15.10 決定誰先走 213 15.11 在游戲板上落下一個棋子 213 15.12 復制游戲板數(shù)據(jù)結(jié)構(gòu) 214 15.13 判斷一個格子是否在 角落上 214 15.14 獲取玩家的移動 214 15.15 獲取計算機的移動 216 15.15.1 角落移動策略 216 15.15.2 獲取最高得分的移動的 列表 217 15.16 在屏幕上打印分數(shù) 218 15.17 游戲開始 218 15.17.1 檢查僵局 218 15.17.2 運行玩家的輪次 219 15.17.3 運行計算機的輪次 220 15.18 游戲循環(huán) 221 15.19 詢問玩家是否再玩一局 222 15.20 小結(jié) 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()函數(shù) 調(diào)用 229 16.2.5 使用百分數(shù)評級AI 229 16.3 比較不同的AI算法 231 16.3.1 模擬程序3的源代碼 231 16.3.2 模擬程序3的AI是 如何工作的 232 16.3.3 比較AI 235 16.4 小結(jié) 237 第17章 創(chuàng)建圖形 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 設(shè)置pygame窗口 243 17.7.1 元組 243 17.7.2 Surface對象 244 17.8 設(shè)置顏色變量 244 17.9 將文本寫到pygame窗口上 245 17.9.1 使用字體來樣式化 文本 245 17.9.2 渲染一個Font對象 246 17.9.3 使用Rect屬性設(shè)置文本 位置 247 17.10 用一種顏色填充一個Surface 對象 248 17.11 pygame的繪制函數(shù) 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 事件和游戲循環(huán) 253 17.14.1 獲取事件對象 253 17.14.2 退出程序 254 17.15 小結(jié) 254 第18章 動畫圖形 255 18.1 Animation程序的運行示例 255 18.2 Animation程序的源代碼 256 18.3 讓積木移動和彈回 258 18.4 設(shè)置常量變量 258 18.4.1 用于方向的常量變量 259 18.4.2 用于顏色的常量變量 260 18.5 設(shè)置積木數(shù)據(jù)結(jié)構(gòu) 260 18.6 游戲循環(huán) 260 18.6.1 處理玩家退出的情況 261 18.6.2 移動每一個積木 261 18.6.3 彈跳一個積木 262 18.6.4 將積木繪制到窗口中 新的位置 263 18.6.5 在屏幕上繪制窗口 264 18.7 小結(jié) 264 第19章 碰撞檢測 265 19.1 碰撞檢測程序的運行示例 266 19.2 Collision Detection程序的 源代碼 266 19.3 導入模塊 268 19.4 使用一個時鐘來同步程序 268 19.5 創(chuàng)建窗口和數(shù)據(jù)結(jié)構(gòu) 269 19.6 設(shè)置變量以記錄移動 270 19.7 處理事件 270 19.7.1 處理KEYDOWN事件 271 19.7.2 處理KEYUP事件 273 19.8 轉(zhuǎn)移玩家 274 19.9 添加新的食物方塊 274 19.10 在屏幕上移動玩家 275 19.10.1 將玩家繪制到屏幕上 275 19.10.2 檢查碰撞 276 19.11 在窗口上繪制食物方塊 276 19.12 小結(jié) 277 第20章 聲音和圖像 279 20.1 使用精靈添加圖像 279 20.2 聲音文件和圖像文件 280 20.3 Sprites and Sounds程序的 運行示例 281 20.4 Sprites and Sounds程序的 源代碼 281 20.5 創(chuàng)建窗口和數(shù)據(jù)結(jié)構(gòu) 284 20.5.1 添加一個精靈 284 20.5.2 改變一個精靈的大小 284 20.6 創(chuàng)建音樂和聲音 285 20.6.1 添加聲音文件 285 20.6.2 切換和關(guān)閉聲音 285 20.7 把玩家繪制到窗口上 286 20.8 檢查碰撞 286 20.9 在窗口中繪制櫻桃 287 20.10 小結(jié) 287 第21章 帶有聲音和圖像的Dodger 289 21.1 回顧pygame的基本數(shù)據(jù) 類型 289 21.2 Dodger的運行示例 290 21.3 Dodger的源代碼 291 21.4 導入模塊 295 21.5 創(chuàng)建常量 295 21.6 定義函數(shù) 296 21.6.1 終止和暫停游戲 296 21.6.2 記錄和敵人的碰撞 297 21.6.3 將文本繪制到窗口 297 21.7 初始化pygame并設(shè)置窗口 298 21.8 設(shè)置Font、Sound和Image 對象 299 21.9 顯示開始界面 300 21.10 開始游戲 300 21.11 游戲循環(huán) 302 21.11.1 處理鍵盤事件 302 21.11.2 處理鼠標移動 303 21.12 增加新的敵人 303 21.13 移動玩家角色和敵人 305 21.14 實現(xiàn)作弊模式 306 21.15 刪除敵人 306 21.16 繪制窗口 307 21.16.1 繪制玩家的得分 307 21.16.2 繪制玩家角色和敵人 307 21.17 碰撞檢測 308 21.18 游戲結(jié)束屏幕 308 21.19 修改Dodger游戲 309 21.20 小結(jié) 310
你還可能感興趣
我要評論
|