第1章 使用类的Python 1
1.1 了解Geometry程序 1
1.2 初识Python 2
1.2.1 Python工具 3
1.2.2 Python语言 7
1.3 Python中的对象 7
1.3.1 在面向对象之前是什么 8
1.3.2 接下来是什么 11
1.3.3 OOP:Python的方式 14
1.3.4 单继承 16
1.3.5 多继承 17
1.4 小结 19
第2章 初识Pygame:Pie游戏 21
2.1 了解Pie游戏 21
2.2 使用Pygame 22
2.2.1 打印文本 23
2.2.2 循环 24
2.2.3 绘制圆 25
2.2.4 绘制矩形 26
2.2.5 绘制线条 28
2.2.6 绘制弧形 29
2.3 Pie游戏 30
2.4 小结 33
第3章 I/O、数据和字体:Trivia游戏 34
3.1 了解Trivia游戏 34
3.2 Python数据类型 35
3.2.1 关于打印的更多知识 36
3.2.2 获取用户输入 38
3.2.3 处理异常 39
3.2.4 Mad Lib游戏 39
3.3 文件输入/输出 42
3.3.1 操作文本 42
3.3.2 操作二进制文件 44
3.4 Trivia游戏 46
3.4.1 用Pygame打印文本 47
3.4.2 Trivia类 47
3.4.3 加载Trivia数据 48
3.4.4 显示问题和答案 49
3.4.5 响应用户输入 51
3.4.6 继续下一个问题 52
3.4.7 主代码 52
3.5 小结 54
第4章 用户输入:Bomb Catcher游戏 55
4.1 认识Bomb Catcher游戏 55
4.2 Pygame事件 56
4.2.1 实时事件循环 57
4.2.2 键盘事件 58
4.2.3 鼠标事件 59
4.3 设备轮询 59
4.3.1 轮询键盘 59
4.3.2 轮询鼠标 62
4.4 Bomb Catcher游戏 64
4.5 小结 67
第5章 Math和Graphics:Analog Clock示例程序 69
5.1 Analog Clock示例程序简介 69
5.2 基本三角函数 70
5.2.1 圆理论 70
5.2.2 遍历圆周 74
5.2.3 圆示例 76
5.3 Analog Clock示例程序 78
5.3.1 获取时间 78
5.3.2 绘制时钟 79
5.4 小结 85
第6章 位图图形:Orbiting Spaceship示例程序 87
6.1 认识Orbiting Spaceship示例程序 87
6.2 使用位图 88
6.2.1 加载位图 88
6.2.2 绘制背景 89
6.2.3 绘制行星 91
6.2.4 绘制航空飞船 91
6.3 环绕行星轨道 94
6.4 小结 100
第7章 用精灵实现动画:Escape the Dragon游戏 101
7.1 认识Escape the Dragon游戏 101
7.2 使用Pygame精灵 102
7.2.1 定制动画 102
7.2.2 加载精灵序列图 104
7.2.3 更改帧 104
7.2.4 绘制一帧 105
7.2.5 精灵组 106
7.2.6 MySprite类 107
7.2.7 测试精灵动画 109
7.3 Escape the Dragon游戏 110
7.3.1 跳跃 111
7.3.2 冲突 112
7.3.3 源代码 113
7.4 小结 116
第8章 精灵冲突:Zombie Mob游戏 117
8.1 Zombie Mob游戏简介 117
8.2 冲突检测技术 118
8.2.1 两个精灵之间的矩形检测 118
8.2.2 两个精灵之间的圆检测 119
8.2.3 两个精灵之间的像素精确遮罩检测 120
8.2.4 精灵和组之间的矩形冲突 120
8.2.5 两个组之间的矩形冲突检测 121
8.3 Zombie Mob游戏 121
8.3.1 创建自己的模块 122
8.3.2 高级定向动画 125
8.3.3 与僵尸冲突 128
8.3.4 获得生命值 129
8.3.5 游戏源代码 131
8.4 小结 136
第9章 数组、列表和元组:Block Breaker游戏 137
9.1 Block Breaker游戏简介 137
9.2 数组和列表 137
9.2.1 有一个维度的列表 138
9.2.2 创建栈式列表 140
9.2.3 创建队列式列表 141
9.2.4 更多维度的列表 141
9.3 元组 145
9.3.1 打包元组 145
9.3.2 解包元组 145
9.3.3 搜索元素 146
9.3.4 计数元素 146
9.3.5 作为常量数组的元组 147
9.4 Block Breaker游戏 148
9.4.1 Block Breaker关卡 148
9.4.2 加载和修改关卡 151
9.4.3 初始化游戏 152
9.4.4 移动挡板 153
9.4.5 移动球 154
9.4.6 撞击挡板 155
9.4.7 撞击砖块 155
9.4.8 主代码 156
9.4.9 更新MySprite 157
9.5 小结 159
第10章 计时和声音:Oil Spill游戏 160
10.1 Oil Spill游戏简介 160
10.2 声音 161
10.2.1 加载音频文件 161
10.2.2 播放音频剪辑 162
10.3 构建Oil Spill游戏 162
10.3.1 游戏逻辑 162
10.3.2 源代码 165
10.4 小结 169
第11章 编程逻辑:Snake游戏 170
11.1 Snake游戏简介 170
11.2 开发Snake游戏 171
11.2.1 画出蛇来——SnakeSegment类 172
11.2.2 增长蛇——nake类 172
11.2.3 蛇吃食物——Food类 173
11.2.4 初始化游戏 174
11.2.5 主程序 176
11.2.6 通过吃食物而长长 178
11.2.7 咬到自己是不明智的 179
11.2.8 跌落世界之外 180
11.3 教蛇学会自己移动 180
11.3.1 自动移动 181
11.3.2 获得当前方向 182
11.3.3 朝着食物移动 183
11.3.4 其他代码修改 183
11.4 小结 184
第12章 三角函数:Tank Battle游戏 185
12.1 Tank Battle游戏简介 185
12.2 角速率 186
12.2.1 计算角速率 186
12.2.2 Pygame笨拙的旋转 187
12.2.3 以任意角度前后移动坦克 188
12.2.4 改进角度折返 190
12.3 构建Tank Battle游戏 190
12.3.1 坦克 190
12.3.2 子弹 194
12.3.3 主程序代码 195
12.4 小结 201
第13章 随机地形:Artillery Gunner游戏 202
13.1 Artillery Gunner游戏简介 202
13.2 创建地形 203
13.2.1 定义高度地图 203
13.2.2 平滑地形 208
13.2.3 定位栅格点 210
13.3 大炮 212
13.3.1 放置大炮 212
13.3.2 绘制炮塔 213
13.3.3 发射大炮 213
13.3.4 让炮弹再飞一会儿 214
13.3.5 计算机开火 215
13.3.6 为击中计分 215
13.4 完整的游戏 217
13.5 小结 224
第14章 更多内容:Dungeon角色扮演游戏 226
14.1 Dungeon游戏简介 226
14.2 回顾经典的Dungeon RPG 227
14.2.1 Rogue 228
14.2.2 NetHack 229
14.2.3 AngBand 230
14.2.4 Sword of Fargoal 232
14.2.5 Kingdom of Kroz 232
14.2.6 ZZT 232
14.3 创建一个地下城关卡 234
14.3.1 理解ASCII字符 234
14.3.2 模拟文本控制台显示 238
14.3.3 生成随机房间 241
14.3.4 生成随机的通道 246
14.4 填充地下城 252
14.4.1 添加入口和出口 252
14.4.2 添加金子 254
14.4.3 添加武器、盔甲和生命值 255
14.4.4 添加怪兽 257
14.4.5 完整的Dungeon类 257
14.4.6 添加玩家的角色 262
14.5 高级游戏逻辑 266
14.5.1 捡拾物品 266
14.5.2 与怪兽战斗 270
14.5.3 移动怪兽 273
14.5.4 可见性范围 275
14.5.5 退出关卡 277
14.5.6 结束游戏逻辑 277
14.6 小结 281
附录A 安装Python和Pygame 283
A.1 安装Python 283
A.2 安装Pygame 286
附录B Pygame按键代码 288