本帖最后由 crispnut 于 2014-6-4 20:55 编辑
第七章太阁的数据结构二 第四章讲解了太阁的数据结构,在此基础上,这章节来讲解容器的概念。所谓容器,实际上是对复数个变量的选定和操作,也就是在现有的数据结构上划定想要处理的复数个对象。关于容器的讲解比较复杂,本章讲解不涉及指针的容器操作,可以参考: two001 *************************************************** 【光荣工作组】銀鳥的容器的初階教程: 技术讲解: http://game.ali213.net/thread-2634241-1-1.html *************************************************** 这里可以补充说明的是,繁中编辑器自带日文剧本翻译功能,在工具选项下。如果在看官方说明书或者日文剧本教程的时候,可以用这个功能帮助学习,也可以将日文剧本转化为繁中代码。然而,加菲猫插件的语句不能直接转化,需要查表后手动输入。容器功能被总结在繁中编辑器的容器选项下: 首先是容器设定,使用了容器设定,也就是选定了一组特定的数据: 顺次点击之后就能生成一个容器,下面是一些例子: 需要注意的是,上述例子的最后一个语句是无效的,而倒数第二个语句却是有效的。 这种情况可能和容器的底层结构有关,由于不了解编译器的细节,只能在不断的实践中总结可能的错误和形式。 在选定了容器之后,还需要对容器进行进一步筛选和定位,其实这一切操作都可以用容器指针来操作,然而剧本编辑器为开发者提供了更加便捷的操作语句。 然而,无论指针还是容器操作语句,都只能对容器进行减法的操作,如果要对容器进行加法的操作,需要有全局变量的知识,这一点将在以后的章节里讲解。 容器筛选,就是将选定的容器进一步缩小为筛选的范围之内,比如选出泛用对手中的几位女子(鹤,枫这几位大众情人): 容器排除,也就是讲设定容器中不符合条件的变量排除,比如选出武士阶层里部将以上的人物: 容器检所是一个主要和指针配合使用的命令,本章暂不涉及。 容器清理是一个很常用的命令: 其中的指针方式本章不讲,消去和保留的意思是,按照现有的容器排序(这点非常重要,也就是说容器不是一个无序的集合),从第一个数据开始顺次保留或者去除一定数目的变量,最后一个是按照奇偶性去除容器内的变量,不太常用。例如,使用容器命令选中所有的合战卡片,可以写成: 这样就选中了所有的合战卡,至于代码中的数字,那是查询官方说明书的表格而来(参见数据一览)。 既然谈到了容器的有序性,那就来说一说容器排序命令,一个是容器排序,一个是特殊容器排序: 按照提示,可以按照容器内变量的某一属性值升序,降序排列,也可以将容器内变量的数据打乱次序。 最后就是从容器中选出想要的变量了,这里就要用到容器选择的命令: 最后四种选择方式,是将容器内的变量展示在玩家面前,由玩家选择变量, 这时候需要考虑到玩家点击右键退出的情况,加入真伪判断,下面将会给出一个规范的例子。 而前面四种,则是直接选择先头,末尾,或者指针所指向的变量,不需经过玩家选择。 除了这些命令之外,伴随着容器指令的有两个变量,分别是容器指针(指向容器中的某一个变量的位置数值,犹如门牌号码) 和容器记录数(记录容器中有多少个变量),当容器为空时,指针指向无穷大(-1) 例1:选出现存人物中,武力最高的那位,在道场提供高等武具赠送的额外服务 现存人物是指人物已经出现,如果人物没有出现而且没有死亡,那就是没有元服的未成年人; 如果一个人死亡,按照正常的情况,应该是同时具备死亡和未出现的性质。 高级物品和一般物品的所有情况,有着不同的表达方式, 低等物品是看所有个数而高等物品是看所有者(因为高等物品只有一个,其数据结构也有不同)源代码可见附件, 但是进行容器选择的时候请注意真伪的判别: 代码编译调试之后的效果: 例1是通过玩家点击实现的一个容器的遍历,更加一般的写法是: 通过一个一个地容器清理,可以实现容器的遍历,但是我们发现,这样遍历容器的结果将会导致容器变成一个空容器,也就是说这样的遍历是不可逆的破坏性的遍历。若要实现容器的无损遍历,则需要指针或者全局变量的知识,这点我们以后再讲。现在来谈最后一个问题,容器存取: 这个命令的意思是将现有的容器冻结起来,允许剧本作者在保留前一个容器的同时,运用另外一个容器。换句话说,最多可以同时使用两个容器。三国立志传有一个城市判断的源代码,就是利用容器存取实现的,还有五彩麒麟的包围网等功能,可以参考这个帖子: 五彩麒麟 *************************************************** 剧本编辑讲座: http://game.ali213.net/thread-2728754-1-1.html *************************************************** 限于章节,请直接看三楼的容器存取部分,这里我也举一个简单例子,查询一个地方町的人物信息: 例2.在座打听本地方的町的人物情报 先载入町所在的地方,外层容器遍历国内町,内层容器遍历町的人物 代码编译调试之后的效果: 这样不涉及指针的容器操作就介绍完了,下一章将介绍容器指针的用法,如果读者看到这里还没晕,说明你的水准还是很高的,如果觉得简单,那么下面一章的内容绝对不会让你觉得无聊。反之,如果读者觉得不知所云,请回第四章甚至第一章重新看起。 源代码:
|