找回密码
 注册
搜索
查看: 3881|回复: 9

code

  [复制链接]
门派:古墓派
发表于 2017-1-8 10:22:13 | 显示全部楼层 |阅读模式
等了好久都没人来发帖,只有自己来问问大家了,一些小问题,希望各位大神给我正确答案!!!
等大家都答完了,我在来说我的吧










// senlin.c
#include <ansi.h>
#include <room.h>
inherit ROOM;

void create()
{
       set("short","针叶林");
       set("long", @LONG
这是极西天山脚下的一片针叶林,林中鸟兽成群,满地铺盖着厚厚一层松
针。北方的一座高耸的山脉便是天山了,山上终年积雪,山下却是绿树成荫。
往东南走便是大草原,有辛勤的哈萨克族人在那里放牧。你走着走着,竟然迷
失了道路。
LONG);
        set("exits", ([
             "east"  : __DIR__"senlin"+(1+random(4)),
             "west"  : __DIR__"senlin"+(1+random(4)),
             "south" : __DIR__"senlin"+(1+random(4)),
             "north" : __DIR__"senlin"+(1+random(4)),               
        ]));
        
        set("objects", ([
                         __DIR__"npc/toulang" : 1,
        ]));

        set("outdoors", "天山");
        set("coor/x",-310);
  set("coor/y",120);
   set("coor/z",0);
   set("coor/x",-310);
set("coor/y",120);
   set("coor/z",0);
   setup();
           
}
int valid_leave(object me, string dir)
{
        if( dir != me->query_temp("correct_dir"))
                me->set_temp("ts_sl", 0);
        else    me->add_temp("ts_sl", 1);

        if( me->query_temp("ts_sl") > 5 + random(5) ) {
                me->move(__DIR__"senlin");
                me->delete_temp("ts_sl");
                me->delete_temp("correct_dir");
                return notify_fail("你累得半死,终於找到了正确的方向。\n");
        }
        return ::valid_leave(me,dir);
}

请各位大神给我个准确答案~谢谢!解释解释这个room的意图和定义。
门派:天龙寺
发表于 2017-1-8 16:59:10 来自手机 | 显示全部楼层
我没正式学过,只能七分猜三分蒙了。           这是一个迷宫,因为有+(1+random(4)),所以走不出去。          然后,每走一步就会检查方向是否正确,对,ts_sl (应该是天山森林的意思) 就会+1,否则变0。 当ts_sl大约5+random(5),就出迷宫。              如果说错请不要打我,以上内容,纯属猜测,如果蒙对,请给掌声。。。
门派:古墓派
 楼主| 发表于 2017-1-12 20:54:40 | 显示全部楼层
全部都蒙错了,每一样是错的,能好好的蒙不?
门派:天龙寺
发表于 2017-1-12 22:20:05 来自手机 | 显示全部楼层
kickall@tj 发表于 2017-1-12 20:54
全部都蒙错了,每一样是错的,能好好的蒙不?

蒙的能对吗。。。蒙错了请解答吧,我就是来学习的。我今年初三,要选课啦,没意外我就是要读电脑的,基础打不好估计以后就得狂补了。。。
门派:天龙寺
发表于 2017-1-12 22:27:07 来自手机 | 显示全部楼层
让大家见笑了            
门派:古墓派
 楼主| 发表于 2017-1-15 20:08:39 | 显示全部楼层
先给你解释一下"east"  : __DIR__"senlin"+(1+random(4)),吧
这个不管你方向哈,是这样的_DIR_是同目录下,"senlin"+(1+random(4)),是同名文件senlin加后缀名1+随机后缀名4以内的,也就是可以是senlin3 or senlin2等等。
这里写法有两种,一个是跨区域的room,一个是同目录的room.现在这个就是同目录,跨区的就是"east":"d/xxx/xxx"
你明白了吗?
门派:不明
发表于 2017-1-16 08:20:42 来自手机 | 显示全部楼层
没明白                     
门派:古墓派
发表于 2017-1-16 08:26:36 | 显示全部楼层
// senlin.c
#include <ansi.h>     加载颜色.h 定义文件
#include <room.h>   加载房间.h 定义文件
inherit ROOM;  加载房间类型的特殊定义,比如变量,全局变量  函数定义等等

void create()
{
       set("short","针叶林");
       set("long", @LONG
这是极西天山脚下的一片针叶林,林中鸟兽成群,满地铺盖着厚厚一层松
针。北方的一座高耸的山脉便是天山了,山上终年积雪,山下却是绿树成荫。
往东南走便是大草原,有辛勤的哈萨克族人在那里放牧。你走着走着,竟然迷
失了道路。
LONG);
        set("exits", ([
             "east"  : __DIR__"senlin"+(1+random(4)),   // __DIR__是当前目录的全局变量   后面表示  文件名为senlin+ (1+(0~3的随机数)),
             "west"  : __DIR__"senlin"+(1+random(4)),
             "south" : __DIR__"senlin"+(1+random(4)),
             "north" : __DIR__"senlin"+(1+random(4)),               
        ]));
        
        set("objects", ([
                         __DIR__"npc/toulang" : 1,
        ]));

        set("outdoors", "天山");
        set("coor/x",-310);
  set("coor/y",120);
   set("coor/z",0);
   set("coor/x",-310);
set("coor/y",120);
   set("coor/z",0);
   setup();
           
}
int valid_leave(object me, string dir)   //离开房间执行的函数,在room文件里有定义
{
        if( dir != me->query_temp("correct_dir"))   如果从来没进过这个房间  correct_dir 是个标识符 默认是空无或者0
                me->set_temp("ts_sl", 0);    如果没有标示,ts_sl 临时状态设为0
        else    me->add_temp("ts_sl", 1); 如果有标示,临时变量+1

        if( me->query_temp("ts_sl") > 5 + random(5) ) {   如果临时变量ts_sl大于5~9的随机数执行下面的命令,也就是说这个迷宫最多走9步最少走5步就能离开
                me->move(__DIR__"senlin");  移动到senlin 这个房间
                me->delete_temp("ts_sl");   删除目标身上的临时标志
                me->delete_temp("correct_dir"); 删除目标身上的临时标志
                return notify_fail("你累得半死,终於找到了正确的方向。\n");   告诉给目标一个信息。
        }
        return ::valid_leave(me,dir);
}



这个是以前的老code,大概是一个5房间的迷宫,如果为了节约内存,可以创建成华山菜地那样的一个房间的迷宫,也能达到这种效果。
改这样
             "east"  : __DIR__"senlin1",   
             "west"  : __DIR__"senlin1",
             "south" : __DIR__"senlin1",
             "north" : __DIR__"senlin1",
就行了

评分

1

查看全部评分

门派:古墓派
 楼主| 发表于 2017-1-16 10:42:21 | 显示全部楼层
fqyy@tj 你早就应该站出来了哈~多教教哪些不会的。
门派:天龙寺
发表于 2017-1-16 16:06:37 来自手机 | 显示全部楼层
好吧,了解。。。         
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-5-1 02:21 , Processed in 0.031124 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表