qianye 发表于 2017-6-22 13:48:49

关于462下GPS的实现

人比较懒,最近想搞搞GPS,看了下觉得还是可行的,
有没有高手指点下。

写了一个机器,在小山村运行了下,记录如下:

=======================================================

##南村口##;#va w_go south|south|south|south|south;这里是华山脚下,虽然远离县城,却没有什麽山贼草寇在附近出没。西面是一个小村庄,看来村子里人家不多,村民们过着日出而作,日落而息的宁静生活。穿过这个小村子,就是上华山的山路了。;north|southeast|southwest
##碎石路##;#va w_go south|south|south|south;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。一条碎石路,往北通向村子的中心,往南就是出村的路了。;south|north
##小土房##;#va w_go south|south|south|east;这是一间用土坯搭成的房屋,屋里只有几件残破的家俱。在靠门口的墙角有一只空空的笼子,大概曾经用来养过鸡、鸭之类的家禽。;west
##碎石路##;#va w_go south|south|south;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。这是一条南北向的碎石路,东面是一间小土房。;south|north|east
##中原马车行##;#va w_go south|south|east;这里是一家马车行,挂着一个招牌(paizi),店里的马车(che)停得满满当当的。    你可以看看(look):paiziche;west
##小巷尽头##;#va w_go south|south|west|northwest;这里是小巷的尽头,一只破木箱上摆着几样粗制的赌具,地上乱扔着些鸡骨头,空气中有一股鸡香、酒香和汗臭混杂在一起的味道。看来这里是村内地痞、流氓聚集的地方。;southeast
##小巷##;#va w_go south|south|west;这是一条黑暗、肮脏的小巷,空气中仿佛飘扬着一股罪恶的气息,西北边通向小巷深处,正人君子是不会往那边走去的。往东走就会回到村中大路了。;east|northwest
##碎石路##;#va w_go south|south;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。这是一条南北向的碎石路,西边有一条黑黑暗暗的小巷子。;south|north|east|west
##内室##;#va w_go south|east|east;这里是一间寝室,屋子中间有一张大床,床上的被褥居然是绸缎的,看来这个土财主对自己并不是十分刻薄。屋里摆着几只木箱子,墙角里有一只大柜子(cabinet)。;west
##前厅##;#va w_go south|east;这是一间很普通的青砖瓦房,但在这个小村子里已是首屈一指的“豪宅”了。这里是前厅,厅里的摆设很简单,乡下土财主都很财迷,就算有几个钱儿,也是舍不得花。东边是个小门通向内室。;east|west
##碎石路##;#va w_go south;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。这是一条南北向的碎石路,往北就是村子中心的打谷场了,东面是村里唯一的青砖瓦房。;south|north|east
##小房间##;#va w_go east|south|east;这是铁匠的住宅,屋子里十分简单,靠墙有一张木床,墙角摆着个小桌子,桌上胡乱的摆着几个酒杯、茶碗,桌上靠墙放着一把长剑(sword)。西边有个小门,门上挂著个破布帘,出去就是铁匠的铺子了。    你可以看看(look):sword;west
##铁匠铺##;#va w_go east|south;这是一间甚是简陋的铁匠铺,入门正中是个大铁砧,满地煤渣碎铁,墙上挂着几张犁头,屋子的角落里堆着几把破锄头、镰刀,靠墙放着几把新出炉的铁锤。东面有一个小门,门上挂著个破布帘。;north|east
##杂货店##;#va w_go east|north;这是一间小小的杂货店,经营些油、盐、酱、醋及日用百货,村子里的人多数是很穷,除了生活必需品,这里很少贩卖其它物品。;south
##民宅##;#va w_go east|east|north;这是一间很结实的房子,虽然也是间土坯房,但看的出建造的比村里其他的土坯房要好很多。墙上挂着、地下摆着一些农具。;south
##草棚##;#va w_go east|east|east|south;这是一个简单的草棚,地上摆著一堆堆的货物,上山的游客可以在这    买些上山用品。草棚的墙上贴着个牌子,是个价目表(sign)。    奇怪的是地上不知什么时候多了张草帘(caolian),小贩也不知什么地方去了。    你可以看看(look):caoliansign;north
##东村口##;#va w_go east|east|east|east;这里是华山脚下,虽然远离县城,却没有什麽山贼草寇在附近出没。往东就是上山的路了。西边是一个小村庄,村子里人家并不多,村民们过着日出而作,日落而息的宁静生活。;east|west
##碎石路##;#va w_go east|east|east;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。一条碎石路,往西通向村子的中心,往东就是出村的路了。南面是一间很简陋的草棚。;south|east|west
##碎石路##;#va w_go east|east;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。这是一条东西向的碎石路,北面是间结实的民宅。;north|east|west
##碎石路##;#va w_go east;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。这是一条东西向的碎石路,往西就是村子中心的打谷场了,南面是一间铁匠铺子,北面是家杂货店。;south|north|east|west
##民房##;#va w_go northwest|southwest;这是一个小房间,屋子里飘着一股大葱加香粉的味道。靠墙摆着张大床,床头有个小梳妆台。;northeast
##玄坛庙##;#va w_go northwest|northwest|northeast;这是一间十分破旧的小庙,庙里供的神像是赵玄坛,神像已经很残破了,神案上也积了很多尘土,看来已有很久没人来上香进供了。大概村民贫困的太久,已不再寄望於财神爷降福给他们了。神像後面的墙上有个半人多高的洞(hole)。    你可以看看(look):hole;southwest
##民宅##;#va w_go northwest|northwest|west|north;这是一间十分简陋,四壁漏风的小房子,屋子里连一张象样的床都没有,只有一面门板上面铺着些干草。这屋子的主人一定是贫困潦倒,穷的叮当响。;south
##石阶##;#va w_go northwest|northwest|west|northwest;你走在一条又窄又陡的石阶上,一边是悬崖,一边是峭壁,你不禁有些害怕。上面就是重阳宫。;southeast|northwest
##西村口##;#va w_go northwest|northwest|west;这里是华山脚下,虽然远离县城,却没有什麽山贼草寇在附近出没。东面是一个小村庄,看来村子里人家不多,村民们过着日出而作,日落而息的宁静生活。穿过这个小村子,就是上华山的山路了。北边有间破房子。;north|east|northwest
##碎石路##;#va w_go northwest|northwest;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。东北边有间小庙,庙匾上的字早已模糊不清,看不出是什麽庙了。;northeast|southeast|west
##碎石路##;#va w_go northwest;这是一个宁静的小村子,稀稀落落的分布着几十间土坯泥房,看来村中人家不多,而且大都生活很艰辛。东南边就是村子中心的打谷场了,西南是间民房。;southeast|southwest|northwest


===================================================================================================

机器如下:

#ALIAS bb {#t+ check_busy;#al busy_next {%-1};checkbusy}
#ALIAS getroom {#TRIGGER {^(*)%s-%s$} {#va room_name %%1;#va room_long "";#t+ room-long;#say 抓取房间描述;} {room} 519;#TRIGGER {「初冬」} {#t- room-long;} {room-long} 518;#tri {一片浓雾中,什么也看不清。} {#t- room-long;} {room-long} 518;#TRIGGER {^%s这里{唯一的|明显的}出口是(*)。} {#t- room-long;#va room_long %trim(%delitem(@room -,@room_long));#va room_exit "%%1";#va room_exit %replace(@room_exit,、,|);#va room_exit %replace(@room_exit,和,|);#va room_exit %concat(@room_exit,|,★);#forall @room_exit {#if %ismember(★,%i) {} {#va room_exit %concat(@room_exit,|,%trim(%i))}};#va room_exit %right(@room_exit,%eval(%pos(★,@room_exit)+2))} {} 519;#TRIGGER {^抓取房间描述*$(*)} {#if %pos(的出口,%%1) {#t- room-long} {#va room_long %trim(%concat(@room_long,%%1));#say 抓取房间描述;}} {room-long} 548;look;bb {#va room @room_name/@room_long/@room_exit;#untri {^(*)%s-%s$} {room};#untri {「初冬」} {room-long};#untri {一片浓雾中,什么也看不清。} {room-long};#untri {^抓取房间描述*$(*)} {room-long};#untri {^%s这里{唯一的|明显的}出口是(*)。};#say 房间信息抓取完毕;}}
#ALIAS busy_next {go}
#ALIAS start_go {#va bianli_list "";#va route_list "";#va go ""}
#ALIAS add_bianli_list {#va room_exit_notdo "";#if %ismember(@room_name,@bianli_end) {} {#if %null(@go) {#va room_exit_notdo @room_exit} {#forall @room_exit {#if %ismember(%i,%word(@fangxiangb,@ismember(@go,@fangxiang),|)) {} {#if %null(@room_exit_notdo) {#va room_exit_notdo %i} {#va room_exit_notdo %concat(@room_exit_notdo,|,%i)}}}}};#if %ismember(@room,@bianli_list) {#say 这是一个重复描述房间或者走回了已经走过了的房间;#say 请手动处理} {#if %null(@bianli_list) {#va bianli_list %concat(@room,/,@room_exit_notdo)} {#va bianli_list %concat(@bianli_list,\,@room,/,@room_exit_notdo)};#say 可以开始走了} }
#ALIAS gogo {#va go %word(%word(%word(@bianli_list,%numwords(@bianli_list,\),\),4,/),1,|);#va room_exit_notdo %word(%word(@bianli_list,%numwords(@bianli_list,\),\),4,/);#va room_exit_notdo %right(@room_exit_notdo,%eval(1+%len(@go)));#va room %word(@bianli_list,%numwords(@bianli_list,\),\);#va room %leftback(@room,%eval(%len(%word(@room,4,/))+1));#va room %concat(@room,/,@room_exit_notdo);#if (%numwords(@bianli_list,\)=1) {#va bianli_list @room} {#va bianli_list %leftback(@bianli_list,%eval(%len(%word(@bianli_list,%numwords(@bianli_list,\),\))+1));#va bianli_list %concat(@bianli_list,\,@room)};bb {go}}
#ALIAS go {#if %null(@go) {#say 走完了,该回了} {#exec @go;#if %null(@route_list) {#va route_list @go} {#va route_list %concat(@route_list,|,@go)};bb {#say 第%numwords(@route_list,|)步执行完毕}}}
#ALIAS backback {#va room %word(@bianli_list,%numwords(@bianli_list,\),\);#if %null(@route_list) {#say 回到原点,记录完毕;} {#file 1 小山村.txt;#write 1 {##%word(@room,1,/)##;#va w_go @route_list;%word(@room,2,/);%word(@room,3,/)};#close 1;#va bianli_list %leftback(@bianli_list,%eval(%len(%word(@bianli_list,%numwords(@bianli_list,\),\))+1));#va go %word(@fangxiangb,@ismember(%word(@route_list,%numwords(@route_list,|),|),@fangxiang),|);#va route_list %leftback(@route_list,%eval(%len(%word(@route_list,%numwords(@route_list,|),|))+1));bb {#exec @go;#say 第%eval(%numwords(@route_list,|)+1)步记录完毕}}}
#FUNC room_name {}
#FUNC room_long {}
#FUNC room_exit {}
#FUNC room {}
#FUNC fangxiang {southdown|southup|northdown|northup|westdown|westup|eastdown|eastup|enter|out|up|down|east|south|west|north|northeast|northwest|southeast|southwest}
#FUNC fangxiangb {northup|northdown|southup|southdown|eastup|eastdown|westup|westdown|out|enter|down|up|west|north|east|south|southwest|southeast|northwest|northeast}
#FUNC bianli_list {}
#FUNC route_list {""}
#FUNC go {""}
#FUNC room_exit_notdo {""}
#FUNC ismember {%eval(%ismember(%1,%2)*(%numwords(%word(%concat("|")%replace(%2,"|","||")%concat("|"),1,%concat("|")%1%concat("|")),"||")+1))}
#FUNC bianli_end {南村口|石阶|东村口}
#TRIGGER {^??你不忙} {#wa 100;#t- check_busy;busy_next;} {check_busy} 548
#TRIGGER {^??你正忙} {#wa 500;checkbusy} {check_busy} 548
#TRIGGER {^??房间信息抓取完毕} {add_bianli_list} {getbianli} 519
#TRIGGER {^??可以开始走了} {gogo} {getbianli} 519
#TRIGGER {^??第(%d)步执行完毕} {#wa 1000;getroom} {getbianli} 519
#TRIGGER {^??走完了,该回了} {backback} {getbianli} 519
#TRIGGER {^??第(%d)步记录完毕} {gogo} {getbianli} 519



算是抛砖引玉吧,感觉还有很多问题要处理,比如说拦路的,还有一些会busy的路段,迷宫等等等。。。。。。

但是还是有希望能解决的。

那么这个机器能解决什么问题,我觉得最重要的:

一、当然是自动遍历,然后抓房间信息,储存,为了全面GPS服务,当然这个只是伪GPS,不能实现点对点走路,但是可以实现点到节点,节点到点走路;


二、实现自动到点,然后实现几步的深度遍历。举例来说,比如:慕容任务的家贼在小山村草棚,自动定点到草棚,然后实现草棚周边N个房间的深度遍历;


三、区域遍历的遍历路径的记录,当然这个手动走一遍也很快。

北大侠客行MUD,中国最好的MUD

qianye 发表于 2017-6-22 13:53:40

虽然这个机器还是有很多问题待解决,但是写完了,还是有点小激动。{:7_279:}

其实想想这个机器也是很简单的,但是不明白为什么还是要写了很久。

有时间在搞了,休息一下。

seagull 发表于 2017-6-22 13:55:30

是个人才啊,来我这领福利吧

qianye 发表于 2017-6-22 13:59:10

回复 3# seagull


    这个侠客行太容易入迷了,大把的时间都没了,哎!

我倒是想好好玩玩。{:7_275:}

wfoxp 发表于 2017-6-22 14:54:12

ttk_00 厉害咯

migod 发表于 2017-6-22 16:44:10

有木有设计思路或者伪代码辅助讲解下

creat 发表于 2017-6-23 00:07:42

回复 1# qianye


    房间信息超过10个涉嫌违规{:7_278:}

oolong 发表于 2017-6-23 13:37:52

回复 1# qianye

idea不错,但是可以考虑精简,用txt 然后grep的方法并不好。

建议可以设置成这样,写到变量里
#func {草棚|east;south} {e;s;w}
抓取name 和出口作为 定位要数,@name=草棚 @exit=east;south 结果就是房间号

@{%concat(@name,"|",@exit} 就能得到出口,多个房间的话就删除这个数据也就是说得到空值,
就走走再定位呗。
描述意义不大。
#file + grep貌似长时间挂机会有bug

newflyaaaa 发表于 2020-5-24 11:57:18

有些房间描述完全一样,比较烦
页: [1]
查看完整版本: 关于462下GPS的实现