[wizs] 新的 map 指令

楼主: laechan (挥泪斩马云)   2018-12-03 12:01:57
这东西我已经在 tmi2_v3_改 实装,不过 sanc 使用的版本我打算
重新写。新的 map 指令同样只适用在新型态区域,这是趋势。
这个指令的构想很简单,玩家从未到过的区域,刚从入口进去时,
按 map 指令只会显示比方如下
o-
|
假设该玩家向右移动了一格,按 map 指令时则会显示如下
x-o-
|
也就是说,随着玩家的不断探索,看到的地图才会越大,而且会不
断纪录玩家走过的点。
以一个有 2xx 个房间的地图来说就代表有 2xx 个点,我依稀记得
的印象是我将 2xx 先除以 n,它就会分成很多段: 1~n、n+1~..,
然后有走过的点以 1 替代,没走过的点以 0 替代。
然后去对像是这样的东西做运算:
(11111111) = 255
2 10
也就是说 255 这个数字就代表 11111111 = 玩家这八格有走过,
而 10110011 = 这八格玩家有走过的有五格,没走过的有三格。
这时候 10101110101010101111...........01010101
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 长度 2xx
就可以拆解为以下存起来
({201, 192, 303, ...... })
^^^^^^^^^^^^^^^^^^^^^^^^^^ 长度 < 2xx
因此重点是选取适当的 n 值。
还原的部份只要简单写个函数就能办到:
varargs string a_to_b(int n,string tmp)
{
if(!tmp) { tmp=""; }
n>0 ? return a_to_b(n/2,""+(n%2)+tmp) : tmp;
}
> call here;a_to_b;63
房间(/u/l/laechan/workroom)-> a_to_b( 63 ) = "111111"
call here;a_to_b;200
房间(/u/l/laechan/workroom)-> a_to_b( 200 ) = "11001000"
b_to_a 函数也类似的写法。
这个是 belldandy 提供的点子,下一次的月例大赛,会有跟这个
类似的东西出现。
LAechan

Links booklink

Contact Us: admin [ a t ] ucptt.com