关于我们
![]() ![]() |
Python游戏编程快速上手 第4版
Python是一种高级程序设计语言,因其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言。
本书通过编写一个个小巧、有趣的游戏来教授Python编程,并且采用直接展示游戏的源代码并通过实例来解释编程的原理的方式。全书共21章,12个游戏程序和示例贯穿其中,介绍了Python基础知识、数据类型、函数、流程控制、程序调试、流程图设计、字符串操作、列表和字典、笛卡尔坐标系、密码学基础、游戏AI模拟、动画图形、碰撞检测、声音和图像等方方面面的程序设计知识。本书可以帮助读者在轻松有趣的过程中,掌握Python游戏编程的基本技能。 本书适合不同年龄和层次的Python编程初学者阅读。
本书教你如何使用流行的Python编程语言来编写计算机游戏,即便你之前没有任何编程经验。
首先,本书带领读者猜数字和Tic Tac Toe这样的经典游戏,然后开始学习更加高级的游戏的开发,例如基于文本的Sonar Treasure Hunt游戏以及带有音效和动画的Dodger游戏。在此过程中, 我们还会学习关键的编程和数学概念,这些将使得你的游戏开发技能达到更高的层级。 通过本书,你将学习: 使用组合循环、变量和流程控制语句; 选择合适的数据结构来完成任务,例如列表、字典和元组; 使用pygame模块,为游戏添加图形和动画; 处理键盘和鼠标输入; 编写简单的人工智能程序,从而能够和计算机玩游戏; 使用加密技术把文本信息转换为密码; 调试程序并找出常见错误。 随着你编写每一个游戏,你将打下牢固的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.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 如何玩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
你还可能感兴趣
我要评论
|