控制台RPG开发教程2: 编程模型与PRG模型


本次教程的内容有两个:

 

  1. 软件的基本运行模型
  2. RPG游戏的基本模型

1 软件的基本运行模型

这里先介绍一般编程的运行模型。
这个模型里,有三个事物:

  1. 一栋有无数房间(存储间)的大楼
  2. 这栋大楼有一个工作间,里面存储着一套唯一的指令集合,有一个精灵在执行这些指令
  3. 这个唯一的工作间里有一台万能电话,可以让外面世界的工作组去做一些事情。

这栋大楼中每个房间都有一个确定的地址,和可以修改的房间名字。比如你可以命名你的房间为“东坡草庐”,但是它公开的地址,仍然是*层**号。房间中可以存储数据。
数据有三类:

  1. 数字(整数/小数)
  2. 字符/字符串
  3. 布尔数(真/假)

精灵一次执行一条指令,当前的指令被运行后,会去做另外一条指令,这另外一条究竟是哪条,则于所执行的指令有关。
一共有四种类型的指令

  • 1 暂存指令,将某个数据暂时放到一个房间里去。完成之后,继续执行下一条指令。
  • 2 分支判断指令,根据某个条件,决定下一条指令的走向。
  • 3 循环指令,无条件地跳转到某条指令运行。
  • 4 功能指令,打万能电话(call)让外部世界的工作组去做一件事情。完成之后,继续执行下一条指令。这种指令,可以统称为执行一个函数。

函数又可以分为两大类。

  • 1 获取一个数据。这个数据可以先存放到某个房间中,或者立即在电话中作为参数使用,见下。
  • 2 做一件事情。有时,一件事情有很多种做法,具体怎么做,通过一系列的参数来表示。精灵没有任何记忆力,这些参数或者是刚刚在电话中获得的;或者是写在指令中的;或者是存储在某个房间里,并且房间名字写在指令中。

工作组有很多,比如控制台工作组负责输入和输出,数学工作组负责数学计算,等等。我们会逐步认识它们。

2 RPG游戏的基本模型

一个RPG游戏的运行模型,是一个城市。
在城市的中心,有一栋稍有不同的精灵大楼,我们不妨换个名字,叫它事件大楼。他们的存储间差不多,但工作间的指令集不止一套。这里的万能电话有所不同,既能打出,也能打进,精灵只在接到打进的电话时才执行指令。它根据具体的通知打开相应的指令集,执行指令的方式是类似的,也会根据指针再次打出电话。
在大楼的外面,有两个精灵工作组最为忙碌:地图工作组、菜单工作组。地图工作组负责地图数据读取,地图显示,移动英雄,更换地图,显示NPC,显示对话,进度存取等等,在它之下,还会分几个下属工作组,后面会细讲。菜单工作组则负责菜单数据的读取,菜单显示。

此外它们还共同负责监视键盘。究竟谁当班,则根据具体情况决定。
当地图工作组的精灵们负责监视键盘的时候,当4个方向键被按下时,它们负责检查地图情况,决定是否移动主角,如果遇到地图事件,它们则打电话通知事件大楼去处理。当菜单键(ESC)被按下时,打开当前地图的主菜单,并把工作交给菜单工作组。
当菜单工作组上岗时,4个方向键中,只关注上下两个,它们负责显示当前选择的菜单项。当ESC被按下时,它们尝试关闭菜单并将工作交给地图组,当选择(Enter)键被按下时,它们打电话通知事件大楼。

当一个游戏开始的时候,首先地图工作组开始工作,它们打开游戏指定的第一张地图。在打开地图的同时,它们会给事件大楼通电话,指令精灵接到电话时,会看看有没有什么指令可执行,它往往会看到一条自动打开主菜单的指令。于是它给菜单工作工作组打电话,让菜单工作组上岗,并且显示主菜单(这个菜单不能通过ESC关闭,只能做选择):游戏就快开始了。

课程小结

其实啊,在RGP世界的事件大楼的地下,还有一个真正的精灵大楼。对精灵大楼来说,事件大楼也只不过是一个外部工作组。而RPG世界的外面则是控制台世界。我们的设计RPG游戏的过程就是通过程序语言在控制台世界中创造这个RPG世界的过程。
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【实例教程1】怎样编写一个插件? 1. 插件的注释与定义参数 2. 读取插件参数 3. 插件指令的实现 【实例教程2】制作一个启动画面 1. 从哪里开始? 2. 创建启动画面的场景类 【实例教程3】玩转菜单初级篇 1. 给各个菜单界面添加背景 2. 让背景滚动起来 3. 在主菜单界面增加自定义菜单:改名 4. 在主菜单界面移除菜单命令 5. 在主菜单界面增加一个自定义窗口 【实例教程4】玩转标题画面 1. 美化游戏标题 2. 让背景动起来 3. 自定义标题菜单 4. 美化菜单 【实例教程5】制作小游戏:坦克大战(上) 1. 游戏结构及流程介绍 2. 相关素材资源的下载和使用 3. 基础知识:音效的播放 4. 基础知识:精灵表的切帧 5. 基础知识:使用MV中的动画 6. Scene_TankWarTitle类解析 7. Sprite_Bullet类解析 8. Sprite_Explode类解析 9. Sprite_Tank类解析 10. Sprite_Enemy类解析 11. Scene_TankWar类解析 12. Scene_TankWarGameOver类解析 【实例教程6】存档的加密解密与保护 1. 找出MV存档和读档的方式 2. 制作MV存档的修改器 3. 如何保护存档? 4. 制作一个存档保护插件 【实例教程7】制作一个传送插件 1. 传送插件的主要功能 2. 将自定义数据保存到存档中 3. meta数据的使用 4. 使用地图备注登记传送点 5. 在插件中解析并记录传送点 6. 使用地图备注登记多个传送点并在插件中记录 7. 制作传送点选取窗口显示传送点数据 8. 将物品或技能标记为传送物品、传送技能 9. 显示传送动画实现传送功能 10. 禁止使用传送道具或传送技能 11. 实现插件命令

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣手书生肖让

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值