善用efun事半功倍,看看你是否有重复造轮子?

我个人感觉FluffOS虽然是游戏驱动,但本身也是LPC语言的解释器,做为一门编程语言的解释器,要尽可能的轻,只提供核心功能和开发者不好模拟的功能函数,而能通过已有系统函数模拟的功能就不要再增加了,对非通用又不好模拟的方法,开发者自己实现并重新编译就行,不要把标准版驱动搞的太重了。毕竟到现在FluffOS中有近400个efun,这数量之巨大,也造成了很多efun并没有有效利用。

虽然吐槽驱动自带的efun太多,但是既然已经内置了,那还是尽量利用,不要重复造轮子,当然,这不怪大家没有用,只因驱动一直加。下面以炎黄MUD和自己看过的部分LIB的源码为例,看看我们重复造了多少轮子。

取数组随机元素

在游戏开发中,我们有太多情况需要取数组随机元素了,如:从奖励列表中随机获取一种奖励玩家,从敌人列表中随机选择一个发动攻击……,在大多数LIB中,对这个都是用以下方式实现的:

    string *ob1_list = ({
        "/clone/fam/etc/va1",
        "/clone/fam/etc/va2",
        "/clone/fam/etc/va3",
        "/clone/fam/etc/va4",
        "/clone/fam/etc/va5",
        "/clone/fam/etc/va6",
    });
    string gift = ob1_list[random(sizeof(ob1_list))];

关键代码“ob1_list[random(sizeof(ob1_list))]”,先取数组元素个数,再取随机下标值,最后取出这个元素。在FluffOS中已经内置了一个外部函数:element_of,用来取数组随机元素,以上代码直接改成string gift = element_of(ob1_list);就够了。

而且在游戏开发中我们也应该养成习惯,对这种常用的代码片断,如果驱动没提供相关efun,直接自己写个sefun实现代码复用,而不是一直写这么长的代码,如:

#ifndef FLUFFOS
mixed element_of(mixed *arr)
{
    return arr[random(sizeof(arr))];
}

#endif

字符串转数字

这也是在游戏开发中用的很多的需求,常用的方式是sscanf处理,或者自己写一个模拟外部函数atoi,如:

int atoi(string str)
{
    int v;

    if (!stringp(str) || !sscanf(str, "%d", v))
        return 0;

    return v;
}

实际上直接使用to_int这个外部函数就够了,这个函数除了可以把浮点数转为整数,也可以直接把字符转转为整数,如:to_int("123")to_int("123abc")都返回整型数字123。

更新中……

京ICP备13031296号-4