书名:大型多人在线游戏开发 作者:(美)亚历山大 编,史晓明 译 来源:人民邮电出版社 出版时间:2006年12月 ISBN:7115152675 定价:59元
本书是一本系统介绍MMP(大型多人,Massively Multiplayer)在线游戏开发知识的文集,汇集业内最优秀的游戏开发人员智慧的精华。本书不仅从MMP游戏的角度对客户端技术进行了讨论,还深入剖析了MMP游戏设计、架构、服务端开发、数据库技术以及MMP游戏核心系统等特定于MMP游戏的知识。对于广大MMP游戏开发人员来说,本书是不可多得的参考资料。
第1章 MMP设计技术
1.1 《卡通城在线》:面向大众的大型多人游戏 Mike Goslin 2
1.1.1 游戏设计问题 2
1.1.2 社会性问题 10
1.1.3 总结 13
1.2 每个人都需要某个人:怎样让在线游戏玩家进行合作 Derek Sanderson 15
1.2.1 玩家不会进行合作,除非他们必须合作 16
1.2.2 角色扮演是主流:玩家间的合作在玩家可以提供独特的功能时最为有效 17
1.2.3 提供功能:预先定义还是通过能力定义 17
1.2.4 为游戏角色提供挑战 18
1.2.5 保持功能的完整性 19
1.2.6 帮助玩家彼此找到对方 20
1.2.7 帮助玩家进行交流 21
1.2.8 总结 21
1.2.9 参考文献 22
1.3 MMP游戏中的游戏平衡 Ben Hanson 23
1.3.1 为游戏中的数值建立基线(baseline) 23
1.3.2 为数值编写模拟程序 24
1.3.3 建立游戏中的度量(Metric) 26
1.3.4 内部和外部测试 26
1.3.5 在发布后对游戏进行平衡 27
1.3.6 对新功能进行平衡 28
1.3.7 总结 28
1.4 使用支付矩阵来设计游戏平衡和AI John M. Olsen 29
1.4.1 什么是支付矩阵? 29
1.4.2 “War”纸牌游戏 30
1.4.3 囚徒困境(Prisoner's Dilemma) 31
1.4.4 简单的格斗游戏 31
1.4.5 不对称的能力 33
1.4.6 延迟和停止 34
1.4.7 自动化 34
1.4.8 总结 36
1.4.9 参考文献 37
1.5 使用用例来描述游戏行为 Matthew Walker 38
1.5.1 什么是用例? 38
1.5.2 为什么要使用用例来开发MMP游戏? 38
1.5.3 怎样编写用例? 39
1.5.4 如何识别用例? 39
1.5.5 用例中的元素:一个标准模版 40
1.5.6 漂亮的图表 45
1.5.7 开始实现 46
1.5.8 用例的指导方针 50
1.5.9 总结 54
1.5.10 参考文献 54
1.6 使用生命值来设计转换因子 John M. Olsen 55
1.6.1 武器的价值 55
1.6.2 治疗、防具和减轻伤害 58
1.6.3 从NPC获得的战利品 59
1.6.4 制造业 60
1.6.5 无关物品 61
1.6.6 检验 61
1.6.7 总结 61
1.7 在MMP游戏设计中加入故事情节 Paul McInnes 62
1.7.1 为了一个更有意义的MMP 62
1.7.2 游戏与故事情节:尴尬的结合 63
1.7.3 故事情节在计算机游戏中的功能 63
1.7.4 挑战更多的认知能力 64
1.7.5 使用有意义行动的最佳场所 65
1.7.6 为MMP游戏模式加入故事情节 66
1.7.7 公共目标 68
1.7.8 总结 69
1.7.9 参考文献 69
1.8 客户服务和玩家声望:一切都和信任有关 Paul D. Sage 70
1.8.1 捣乱(grief) 70
1.8.2 规则只是工具 71
1.8.3 意图 72
1.8.4 当前的服务部门正在这样做,或许他们还没有意识到 72
1.8.5 声望 73
1.8.6 正当行为 73
1.8.7 恶意行为 74
1.8.8 多样性导致了所有的差异 75
1.8.9 当前使用的行为模式跟踪方法 75
1.8.10 更多的问题 76
1.8.11 使用声望 76
1.8.12 总结 76
第2章 MMP体系结构
2.1 为MMP游戏制作仿真框架,第一部分:结构建模 Thor Alexander 80
2.1.1 体系结构纵览 80
2.1.2 支持类 81
2.1.3 核心类 83
2.1.4 管理器类和工厂类 87
2.1.5 仿真类 88
2.1.6 总结 89
2.1.7 参考文献 89
2.2 为MMP游戏制作仿真框架,第二部分:行为建模 Thor Alexander 90
2.2.1 把用户和行动者关联起来 90
2.2.2 动作请求 90
2.2.3 动作调度 92
2.2.4 事件广播和处理 92
2.2.5 服务端事件处理 93
2.2.6 客户端事件处理 94
2.2.7 客户端代理 94
2.2.8 仿真与表示分离 95
2.2.9 总结 96
2.3 为游戏脚本创建一个“安全沙盘” Matthew Walker 97
2.3.1 脚本语言与MMP开发 97
2.3.2 使用沙盘的理由 98
2.3.3 安全沙盘的设计 99
2.3.4 在安全沙盘中编写游戏代码 106
2.3.5 总结 108
2.3.6 参考文献 108
2.4 大型多人游戏中的单元测试 Matthew Walker 110
2.4.1 为什么MMP游戏需要单元测试 110
2.4.2 单元测试的定义 111
2.4.3 单元测试框架 114
2.4.4 测试先行的设计 117
2.4.5 实用因素 118
2.4.6 总结 121
2.4.7 参考文献 121
2.5 使用Twisted框架进行MMP服务整合 Glyph Lefkowitz 123
2.5.1 DIY(Do It Yourself)所带来的问题 124
2.5.2 付费找别人来做带来的问题 124
2.5.3 问题小结 125
2.5.4 构造一个解决方案 125
2.5.5 简介:通用的延迟执行机制 125
2.5.6 高层网络服务:全景代理 127
2.5.7 基于Web的工具 135
2.5.8 整合独立对象 137
2.5.9 底层整合:协议与网络 139
2.5.10 开发社区 141
2.5.11 总结 141
2.5.12 参考文献 142
2.6 Beyond 2:构建虚拟世界的开源平台 Jason Asbahr 143
2.6.1 纵览 143
2.6.2 服务端架构 144
2.6.3 客户端架构 146
2.6.4 仿真模型 146
2.6.5 总结 148
2.6.6 参考文献 149
2.7 使用并行状态机来创建可信的角色 Thor Alexander 150
2.7.1 状态模式(State Pattern) 151
2.7.2 并行(Parallel)状态层 152
2.7.3 状态管理器 158
2.7.4 跨层阻止(Cross-Layer Blocking) 159
2.7.5 总结 160
2.7.6 参考文献 160
2.8 在MMP服务中使用观察者/可观察者设计模式 Javier F. Otaegui 161
2.8.1 观察者/可观察者设计模式 161
2.8.2 基本架构 162
2.8.3 服务端架构 162
2.8.4 客户端架构 166
2.8.5 增强 170
2.8.6 总结 171
2.8.7 参考文献 171
第3章 服务端开发
3.1 无缝服务器:优点和缺点 Jason Beardsley 174
3.1.1 杀死怪物不止一个方法 174
3.1.2 无缝世界模式的原型 176
3.1.3 无缝世界模式的优点 178
3.1.4 无缝世界的缺点 179
3.1.5 总结 184
3.2 服务端对象的更新频率 John M. Olsen 186
3.2.1 视觉连贯性与精确度 186
3.2.2 需要发送哪些数据 187
3.2.3 带宽限制 187
3.2.4 每个用户在服务端需要的数据 188
3.2.5 管理数据大小 188
3.2.6 更新队列 189
3.2.7 缺省的更新频率 190
3.2.8 计算范围 190
3.2.9 调整优先级 190
3.2.10 调整队列 191
3.2.11 总结 192
3.3 MMP服务器开发和维护 William Dalton 193
3.3.1 基本问题 193
3.3.2 对复杂度进行管理 196
3.3.3 总结 199
3.4 小型入口:使用手持设备来接入MMP游戏世界 David Fox 200
3.4.1 无线设备和网络 200
3.4.2 J2ME 201
3.4.3 BREW(二进制的无线运行时环境) 202
3.4.4 无线界面和游戏设计总览 202
3.4.5 对象设计 203
3.4.6 网络设计:使用代理服务器 208
3.4.7 总结 208
3.4.8 参考文献 208
3.5 使用Python进行精确的游戏事件广播 Matthew Walker 209
3.5.1 事件驱动编程 209
3.5.2 延迟调用 211
3.5.3 事件广播 215
3.5.4 精确的事件广播 220
3.5.5 总结 226
3.5.6 参考文献 226
3.6 在MMP游戏中实现移动和物理模块的注意事项 Jay Lee 228
3.6.1 我们可以发布这个游戏了吗? 228
3.6.2 这是一场战争 229
3.6.3 服务端永远是对的 229
3.6.4 移动的代价 230
3.6.5 移动速度 232
3.6.6 玩家可以从这里到那里吗? 232
3.6.7 碰撞检测 234
3.6.8 物品放置 236
3.6.9 侵入检测(Hack Detection) 237
3.6.10 总结 238
3.6.11 参考文献 238
第4章 客户端开发
4.1 客户端移动预测 Mark Brockington 240
4.1.1 游戏的开发需要良好的移动预测 240
4.1.2 命令时间同步 241
4.1.3 合并路点 242
4.1.4 插值和推导 244
4.1.5 为瞄准延迟使用反向仿真 246
4.1.6 总结 247
4.1.7 参考文献 247
4.2 保持流畅:异步客户和时空穿梭 Jay Patterson 249
4.2.1 共享状态的基本问题 250
4.2.2 航位推测法:时空探索者会做得更好 251
4.2.3 仿真时间表示:为时空穿梭建立通道 252
4.2.4 直接操纵时间 253
4.2.5 总结 255
4.2.6 参考文献 256
4.3 使用程序生成游戏世界:避免数据激增 Sean O'Neil 257
4.3.1 运行时生成的优点 257
4.3.2 运行时生成的缺点 258
4.3.3 地形生成算法的分类 259
4.3.4 修改程序生成的地形 261
4.3.5 高效地渲染程序生成的地形 264
4.3.6 生成贴图 266
4.3.7 在程序生成的地形进行碰撞检测 267
4.3.8 大型游戏世界中的比例问题 267
4.3.9 总结 270
4.3.10 参考文献 270
4.4 为固定大小的对象编写一个高速有效的分配器 Tom Gambill 272
4.4.1 C++中的内存分配 272
4.4.2 一个简单的向量分配器 273
4.4.3 用户友好的分配器模板 275
4.4.4 降低分配器的内存开销 277
4.4.5 总结 279
4.5 使用贴图定制三维角色 Todd Hayes 280
4.5.1 角色定制的类型 280
4.5.2 贴图合成简介 282
4.5.3 分层 283
4.5.4 贴图定制模版和样本 284
4.5.5 样本集合 285
4.5.6 总体实现 286
4.5.7 对定制系统的进一步改进 288
4.5.8 系统的局限性 289
4.5.9 总结 289
4.6 游戏机平台上MMP游戏的独特挑战 John M. Olsen 290
4.6.1 环境 290
4.6.2 登录 291
4.6.3 分辨率 291
4.6.4 聊天频道 291
4.6.5 选择目标 293
4.6.6 菜单 293
4.6.7 背囊管理和交易 294
4.6.8 持久化存储空间的问题 295
4.6.9 补充界面 295
4.6.10 总结 296
第5章 数据库技术
5.1 关系数据库管理系统入门 Jay Lee 298
5.1.1 表 298
5.1.2 数据查询和关联 298
5.1.3 关系类型 300
5.1.4 属性 301
5.1.5 正规化 302
5.1.6 操纵数据 302
5.1.7 总结 303
5.1.8 参考文献 303
5.2 使用关系数据库管理系统来编写数据驱动的MMP游戏 Jay Lee 304
5.2.1 最明显的方法——为什么它不可行 304
5.2.2 可行的方法 305
5.2.3 获取数据 306
5.2.4 常量模块 306
5.2.5 查找表 308
5.2.6 字符串表 310
5.2.7 向客户发送数据 311
5.2.8 本地化 312
5.2.9 总结 313
5.2.10 参考文献 313
5.3 MMP游戏中的数据驱动系统 Sean Riley 314
5.3.1 在MMP游戏中使用数据驱动系统的优点 314
5.3.2 在MMP游戏中使用数据驱动系统 316
5.3.3 不同类型的数据源 316
5.3.4 由数据驱动的游戏架构的类型 319
5.3.5 总结 323
5.3.6 参考文献 323
5.4 使用数据库来管理游戏状态数据 Christian Lange 324
5.4.1 模型(schema)设计 324
5.4.2 数据 326
5.4.3 注意事项 328
5.4.4 其他方法 329
5.4.5 总结 331
5.4.6 参考文献 331
第6章 游戏系统
6.1 从原料到成品:社会经济中的职业生涯 Artie Rogers 334
6.1.1 原料获取和加工 335
6.1.2 社会经济中的合作制造 337
6.1.3 物品制造在社会经济中起到的作用 339
6.1.4 总结 342
6.2 玩家房屋供给:我的房屋就是你的房屋 Paul D. Sage 343
6.2.1 成长之路 344
6.2.2 商业方法 344
6.2.3 地段、地段、地段! 345
6.2.4 应该把戟放在哪里? 345
6.2.5 经验与教训 346
6.2.6 总结 347
6.3 社会游戏系统:促进玩家社会化及提供游戏回报的另一个途径 Patricia Pizer 348
6.3.1 什么是社会游戏系统? 348
6.3.2 为什么要让玩家社会化? 350
6.3.3 目前使用的社会系统 352
6.3.4 回报社会性游戏的创新方法 355
6.3.5 总结 358
6.3.6 参考文献 359
6.4 为创建和管理行会设计灵活的命令集 John M. Olsen 360
6.4.1 创建 361
6.4.2 领导 361
6.4.3 标识 362
6.4.4 行会维护 364
6.4.5 财产 365
6.4.6 专用区域 366
6.4.7 交流 366
6.4.8 总结 368
6.5 创建声望系统:《无冬城之夜》中的仇恨、宽恕和投降 Mark Brockington 369
6.5.1 友谊和仇恨的实现 369
6.5.2 宽恕 372
6.5.3 投降 375
6.5.4 玩家对战的设置 376
6.5.5 总结 377
6.5.6 参考文献 377
6.6 城邦政府在在线社区中的作用 Artie Rogers 378
6.6.1 公民生涯 379
6.6.2 参与城邦工作 381
6.6.3 定义政治过程 384
6.6.4 总结 386