重磅推荐
【产品特色】


【编辑推荐】

本书教你如何使用流行的Python编程语言来编写计算机游戏,即便你之前没有任何编程经验。 首先,本书带领读者猜数字和Tic Tac Toe这样的经典游戏,然后开始学习更加高级的游戏的开发,例如基于文本的Sonar Treasure Hunt游戏以及带有音效和动画的Dodger游戏。在此过程中, 我们还会学习关键的编程和数学概念,这些将使得你的游戏开发技能达到更高的层级。 通过本书,你将学习: 使用组合循环、变量和流程控制语句; 选择合适的数据结构来完成任务,例如列表、字典和元组; 使用pygame模块,为游戏添加图形和动画; 处理键盘和鼠标输入; 编写简单的人工智能程序,从而能够和计算机玩游戏; 使用加密技术把文本信息转换为密码; 调试程序并找出常见错误。 随着你编写每一个游戏,你将打下牢固的Python编程基础,并且能够更好地理解计算机科学的基础知识。


【内容简介】

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




返回顶部