《Python游戏编程快速上手 第4版》[美]Al Sweigart(斯维加特)【文字版_PDF电子书_下载】
内容简介:
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.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