本次教程的内容有两个:
- 软件的基本运行模型
- RPG游戏的基本模型
1 软件的基本运行模型
这里先介绍一般编程的运行模型。
这个模型里,有三个事物:
- 一栋有无数房间(存储间)的大楼
- 这栋大楼有一个工作间,里面存储着一套唯一的指令集合,有一个精灵在执行这些指令
- 这个唯一的工作间里有一台万能电话,可以让外面世界的工作组去做一些事情。
这栋大楼中每个房间都有一个确定的地址,和可以修改的房间名字。比如你可以命名你的房间为“东坡草庐”,但是它公开的地址,仍然是*层**号。房间中可以存储数据。
数据有三类:
- 数字(整数/小数)
- 字符/字符串
- 布尔数(真/假)
精灵一次执行一条指令,当前的指令被运行后,会去做另外一条指令,这另外一条究竟是哪条,则于所执行的指令有关。
一共有四种类型的指令。
- 1 暂存指令,将某个数据暂时放到一个房间里去。完成之后,继续执行下一条指令。
- 2 分支判断指令,根据某个条件,决定下一条指令的走向。
- 3 循环指令,无条件地跳转到某条指令运行。
- 4 功能指令,打万能电话(call)让外部世界的工作组去做一件事情。完成之后,继续执行下一条指令。这种指令,可以统称为执行一个函数。
函数又可以分为两大类。
- 1 获取一个数据。这个数据可以先存放到某个房间中,或者立即在电话中作为参数使用,见下。
- 2 做一件事情。有时,一件事情有很多种做法,具体怎么做,通过一系列的参数来表示。精灵没有任何记忆力,这些参数或者是刚刚在电话中获得的;或者是写在指令中的;或者是存储在某个房间里,并且房间名字写在指令中。
工作组有很多,比如控制台工作组负责输入和输出,数学工作组负责数学计算,等等。我们会逐步认识它们。
2 RPG游戏的基本模型
一个RPG游戏的运行模型,是一个城市。
在城市的中心,有一栋稍有不同的精灵大楼,我们不妨换个名字,叫它事件大楼。他们的存储间差不多,但工作间的指令集不止一套。这里的万能电话有所不同,既能打出,也能打进,精灵只在接到打进的电话时才执行指令。它根据具体的通知打开相应的指令集,执行指令的方式是类似的,也会根据指针再次打出电话。
在大楼的外面,有两个精灵工作组最为忙碌:地图工作组、菜单工作组。地图工作组负责地图数据读取,地图显示,移动英雄,更换地图,显示NPC,显示对话,进度存取等等,在它之下,还会分几个下属工作组,后面会细讲。菜单工作组则负责菜单数据的读取,菜单显示。
此外它们还共同负责监视键盘。究竟谁当班,则根据具体情况决定。
当地图工作组的精灵们负责监视键盘的时候,当4个方向键被按下时,它们负责检查地图情况,决定是否移动主角,如果遇到地图事件,它们则打电话通知事件大楼去处理。当菜单键(ESC)被按下时,打开当前地图的主菜单,并把工作交给菜单工作组。
当菜单工作组上岗时,4个方向键中,只关注上下两个,它们负责显示当前选择的菜单项。当ESC被按下时,它们尝试关闭菜单并将工作交给地图组,当选择(Enter)键被按下时,它们打电话通知事件大楼。
当一个游戏开始的时候,首先地图工作组开始工作,它们打开游戏指定的第一张地图。在打开地图的同时,它们会给事件大楼通电话,指令精灵接到电话时,会看看有没有什么指令可执行,它往往会看到一条自动打开主菜单的指令。于是它给菜单工作工作组打电话,让菜单工作组上岗,并且显示主菜单(这个菜单不能通过ESC关闭,只能做选择):游戏就快开始了。
课程小结
其实啊,在RGP世界的事件大楼的地下,还有一个真正的精灵大楼。对精灵大楼来说,事件大楼也只不过是一个外部工作组。而RPG世界的外面则是控制台世界。我们的设计RPG游戏的过程就是通过程序语言在控制台世界中创造这个RPG世界的过程。