目 录
第1篇 脚本编程的基本原理
第1章 脚本编程概论 2
1.1 什么是脚本编程 2
1.2 结构化的游戏内容——一种简单的游戏设计方法 3
1.3 通过将逻辑和具体实现相互分离来改善这种方法 7
1.4 硬编码的危险性 9
1.5 将功能函数存放到外部文件 10
1.6 脚本是如何运行的 12
1.6.1 计算机程序设计概述 12
1.6.2 脚本编程概述 14
1.7 脚本系统的基本类型 16
1.7.1 面向过程的语言系统和面向对象的语言系统 16
1.7.2 基于命令的语言系统 17
1.7.3 动态链接的模块系统 18
1.7.4 编译型代码和解释型代码 19
1.7.5 现有的脚本设计方法 20
1.8 总结 21
第2章 脚本编程系统的应用 22
2.1 编写脚本的普遍目的 22
2.2 角色扮演游戏(Role Playing Games,RPGs) 24
2.2.1 复杂而又有深度的故事情节 24
2.2.2 非玩家角色(Non-Player Characters,NPCs) 25
2.2.3 物品和武器 31
2.2.4 敌人 34
2.3 第一人称射击游戏(First-Person Shooters,FPSs) 38
2.3.1 物品、迷题和开关 39
2.3.2 敌人智能(enemy AI) 44
2.4 总结 46
第2篇 基于命令的脚本
第3章 基于命令的脚本编程绪论 48
3.1 基于命令的脚本编程的基础知识 48
3.1.1 高级的引擎控制 49
3.1.2 命令 51
3.1.3 你这个领域中的大师 51
3.1.4 实际解决掉的一些问题 51
3.2 基于命令的脚本编程综述 52
3.2.1 游戏引擎的功能估计 52
3.2.2 载入和执行脚本 54
3.3 实现一种基于命令的语言 56
3.3.1 设计这种语言 56
3.3.2 编写脚本 56
3.3.3 实现 57
3.4 为一个游戏的介绍顺序编写脚本 67
3.4.1 语言 68
3.4.2 脚本 69
3.4.3 执行 69
3.5 为RPG游戏中某个角色的行为编写脚本 70
3.5.1 语言 71
3.5.2 改进语法 71
3.5.3 管理游戏中的角色 72
3.5.4 脚本 74
3.5.5 执行 75
3.5.6 游戏演示中的主循环 78
3.6 并发的脚本执行 80
3.7 总结 82
3.8 CD上的内容 82
3.9 挑战 82
第4章 基于命令的高级脚本 84
4.1 新的数据类型 85
4.1.1 布尔变量 85
4.1.2 支持浮点数 85
4.1.3 通用目的符号常量 86
4.2 简单迭代和条件逻辑 92
4.2.1 条件逻辑和游戏标记 93
4.2.2 将代码按块分组 94
4.2.3 块列表 96
4.2.4 迭代逻辑 97
4.2.5 嵌套 98
4.3 基于事件的脚本 100
4.4 将脚本编译成二进制格式 102
4.4.1 提高执行速度 102
4.4.2 检测编译时的错误 103
4.4.3 恶意的脚本攻击 103
4.4.4 商用编译器是如何工作的 104
4.5 基本的脚本预处理 108
4.6 总结 111
第3篇 结构化的脚本编程语言概述
第5章 结构化的脚本编程系统介绍 114
5.1 总体的脚本编写结构 114
5.1.1 高级代码 115
5.1.2 低级代码 115
5.1.3 虚拟机 116
5.2 深入分析XtremeScript 118
5.2.1 高级代码/编辑 119
5.2.2 低级代码/汇编 122
5.2.3 虚拟机 124
5.3 XtremeScript系统 125
5.3.1 高级部分 125
5.3.2 低级部分 125
5.3.3 运行时间 125
5.4 总结 126
第6章 对现有脚本编程系统的集成和使用 127
6.1 集成(Integration) 127
6.2 脚本系统的执行过程 131
6.3 跳动的外星人头像演示 132
6.4 Lua(以及基本的脚本编程概念) 135
6.4.1 Lua系统一瞥 136
6.4.2 Lua语言 137
6.4.3 将Lua语言与C语言相集成 153
6.4.4 高级的Lua话题 182
6.4.5 网络链接 183
6.5 Python 183
6.5.1 Python系统一览 183
6.5.2 Python语言 185
6.5.3 Python与C的集成 200
6.5.4 高级话题 219
6.5.5 网络链接 220
6.6 Tcl 220
6.6.1 ActiveStateTcl 221
6.6.2 Tcl语言 223
6.6.3 Tcl和C的集成 241
6.6.4 高级主题 255
6.6.5 网络链接 255
6.7 你到底该使用哪个脚本编程系统呢 256
6.8 编写一个实际的游戏 258
6.9 总结 258
6.10 CD上的内容 258
第7章 设计一个面向过程的脚本编程语言 259
7.1 语言的常见类型 259
7.1.1 汇编类型的语言(Assembly-Style Languages) 260
7.1.2 权衡利弊 263
7.2 函数 265
7.2.1 面向对象程序设计 268
7.2.2 XtremeScript语言概述 269
7.2.3 语法和特性 271
7.2.4 保留字列表 280
7.3 总结 281
第4篇 设计和实现一种底层语言
第8章 汇编语言入门 284
8.1 什么是汇编语言 284
8.2 为什么现在讲述汇编 285
8.3 汇编语言是怎样工作的 285
8.3.1 指令 285
8.3.2 助记符和操作码 294
8.3.3 RISC和CISC 296
8.3.4 正交指令集 298
8.3.5 寄存器 298
8.3.6 堆栈 299
8.4 XVM汇编简介 304
8.4.1 初始赋值 305
8.4.2 XVM指令集 306
8.4.3 XASM指示符 310
8.5 XVM汇编语言概要 312
8.6 小结 313
第9章 构造XASM汇编器 314
9.1 一个简单的汇编器是如何运作的 315
9.1.1 指令的汇编 315
9.1.2 变量的汇编 317
9.1.3 操作数的汇编 319
9.1.4 字符串型字面量的汇编 321
9.1.5 跳转指令和函数调用的汇编 322
9.2 XASM概述 326
9.2.1 内存管理 326
9.2.2 输入:一个XVM汇编脚本的结构 328
9.2.3 输出:一个XVM可执行文件的结构 338
9.3 汇编器的实现 345
9.3.1 基本的词法分析/语法分析理论 345
9.3.2 基本字符串处理 350
9.3.3 汇编器的框架 356
9.3.4 词法分析/属性字识别 376
9.3.5 错误处理 398
9.3.6 语法分析 400
9.3.7 构建.XSE可执行文件 418
9.3.8 汇编过程 423
9.4 小结 427
9.5 CD上的内容 428
9.6 挑战 428
第5篇 设计和实现虚拟机
第10章 汇编语言入门 430
10.1 虚拟机的灵魂 430
10.1.1 模拟硬件 430
10.1.2 虚拟机的主要组成部分 432
10.1.3 多线程 433
10.1.4 和主应用程序的集成 434
10.2 虚拟机生命周期的简单概述 434
10.2.1 装载脚本 435
10.2.2 从入口点开始执行 436
10.2.3 执行周期 436
10.2.4 函数调用 437
10.2.5 终止和关闭 439
10.3 XVM原型的结构概述 440
10.3.1 脚本头 440
10.3.2 运行时值 441
10.3.3 指令流 442
10.3.4 运行时堆栈 443
10.3.5 函数表 444
10.3.6 主应用程序API调用表 445
10.3.7 最终的脚本结构 445
10.4 建立XVM原型 446
10.4.1 装载.XSE可执行文件 446
10.4.2 结构接口 456
10.4.3 初始化虚拟机 471
10.4.4 执行周期 473
10.4.5 终止与关闭 488
10.5 概述 490
10.6 CD上的内容 490
10.7 挑战 490
第11章 高级虚拟机的概念和问题 492
11.1 新一代虚拟机 492
11.2 多线程 492
11.2.1 多线程的基本原理 493
11.2.2 装载和存储多个脚本 503
11.2.3 执行多线程 511
11.3 主应用程序集成 515
11.3.1 和主应用程序并行运行脚本 515
11.3.2 集成接口简介 517
11.3.3 XVM的公有接口(Public Interface) 524
11.3.4 实现集成接口 526
11.3.5 增加线程优先级 550
11.4 演示最终的XVM 557
11.5 小结 563
11.6 CD上的内容 563
11.7 挑战 563
第6篇 编译高级代码
第12章 编译理论概论 566
12.1 编译理论概述 566
12.1.1 编译的几个阶段 567
12.1.2 XtremeScript与XASM是如何工作的 578
12.1.3 高级编译理论 579
12.2 总结 587
第13章 词法分析器 588
13.1 基础知识 588
13.1.1 从字符到单词 589
13.1.2 属性标注 590
13.1.3 词法分析方法 590
13.2 词法分析器的工作 594
13.2.1 读入并保存文本文件 595
13.2.2 显示结果 596
13.2.3 错误处理 597
13.3 一个数值词法分析器 598
13.3.1 分词策略 598
13.3.2 完成这个演示程序 606
13.4 分析标识符和保留字 608
13.4.1 新的状态和属性符 609
13.4.2 测试文件 610
13.4.3 升级词法分析器 610
13.4.4 完成这个演示程序 613
13.5 最后的词法分析器:分隔符、运算符和字符串 616
13.5.1 分析分隔符 616
13.5.2 分析字符串 619
13.5.3 运算符 622
13.5.4 完成这个演示 636
13.6 总结 640
13.7 CD上的内容 641
13.8 挑战 641
第14章 构造XtremeStcript编译器框架 642
14.1 策略纵览 642
14.1.1 前端 643
14.1.2 中间代码模块 645
14.1.3 后端 645
14.1.4 主要结构 646
14.1.5 接口和封装 648
14.1.6 编译器的生命周期 649
14.2 命令行接口 651
14.2.1 Logo和使用信息 651
14.2.2 读入文件名称 652
14.2.3 读入选项 654
14.3 初始化数据结构 658
14.3.1 链表 658
14.3.2 堆栈 664
14.4 初始化和关闭 666
14.4.1 全局变量和数据结构 666
14.4.2 初始化 666
14.4.3 关闭 667
14.5 编译器的模块 667
14.6 装载模块 669
14.7 预处理模块 670
14.7.1 单行注释 671
14.7.2 块注释 672
14.7.3 预处理指令 674
14.8 编译器的表格 676
14.8.1 符号表 676
14.8.2 函数表 680
14.8.3 字符串表 683
14.9 集成词法分析器模块 684
14.9.1 回卷属性符流 684
14.9.2 一种新的源代码格式 687
14.9.3 其他新的函数 689
14.9.4 重置词法分析器 693
14.10 语法分析器模块 693
14.11 错误处理 693
14.11.1 普通错误 693
14.11.2 代码错误 694
14.11.3 错误层叠 695
14.12 中间代码模块 696
14.12.1 实现中间代码的方法 696
14.12.2 XtremeScript中间代码 699
14.12.3 接口 703
14.13 代码生成模块 708
14.13.1 代码生成基础 708
14.13.2 通用格式 709
14.14 生成最终的可执行体 722
14.15 整理 724
14.15.1 初始化编译进程 724
14.15.2 打印编译统计数据 724
14.15.3 编写测试脚本 726
14.16 总结 730
14.17 CD上的内容 731
14.18 挑战 731
第15章 语法分析和语义分析 732
15.1 什么是语法分析器 732
15.1.1 语法和语义分析 733
15.1.2 表达式语法 734
15.1.3 语法树 736
15.1.4 语法分析是如何工作的 739
15.2 XtremeScript语法分析器模块 741
15.2.1 基础 741
15.2.2 分析策略 745
15.3 分析语句和代码块 745
15.3.1 语法图 746
15.3.2 实现 747
15.4 分析声明语句 750
15.4.1 函数声明 750
15.4.2 变量和数组声明 756
15.4.3 主应用程序 API函数声明 759
15.4.4 测试代码生成模块 763
15.5 分析简单的表达式 765
15.5.1 表达式分析策略 765
15.5.2 理解表达式语法分析器 769
15.5.3 编码表达式分析 771
15.6 完整表达式分析 780
15.6.1 新因子类型 780
15.6.2 分析函数调用 782
15.6.3 新的单目运算符 783
15.6.4 新的双目运算符 784
15.6.5 逻辑和关系运算符 784
15.6.6 左值和右值 787
15.7 独立的运行时环境 787
15.7.1 本地应用程序 788
15.7.2 主应用程序API 790
15.8 分析高级语句和结构 792
15.8.1 赋值语句 792
15.8.2 函数调用 798
15.8.3 return 799
15.8.4 While循环 802
15.8.5 for循环 812
15.8.6 If分支 812
15.9 语法图总结 817
15.10 测试驱动 817
15.10.1 Hello,World! 818
15.10.2 绘制矩形 819
15.10.3 Bouncing Head示例 822
15.11 总结 843
15.12 CD上的内容 843
15.13 挑战 844
第7篇 完 成 培 训
第16章 应用这个系统开发的一个完整游戏 846
16.1 介绍LockDown 846
16.1.1 素材来源 846
16.1.2 最初的计划和设置 847
16.2 脚本策略 857
16.2.1 集成XtremeScript 857
16.2.2 主API 858
16.2.3 编写脚本 860
16.2.4 装载和运行脚本 867
16.2.5 速度问题 868
16.3 如何玩Lockdown 870
16.3.1 控制 870
16.3.2 与物体交互 870
16.3.3 区域地图 870
16.3.4 战斗 870
16.3.5 完成这个目标 871
16.4 总结 871
16.5 CD上的内容 871
16.6 挑战 872
第17章 从今往后,何去何从 873
17.1 现在究竟该干什么呢 873
17.2 扩展你的知识 874
17.2.1 编译器理论 874
17.2.2 运行时环境 876
17.3 高级话题和思想 878
17.4 总结 888