一楼直接放内容:
看到大家都对树鼠种植(白嫖)感兴趣,特别是在种植逻辑上。因为内容比较庞杂,再三思索之后还是想开一个新帖,这样子可以让大家看得清楚一点。
P.S. 原测试帖在这里:https://tieba.baidu.com/p/6179529837?pn=1;
在文件解码之后我找到了树鼠种植相关的代码:
private int plantDetectionRadius = 6; //植物检查半径为6
private int maxPlantsInRadius = 2; //在半径内最大的植物数量为2
代码内容比较长,总之其中包含了两个比较重要的function:
- bool CheckValidPlotCell(PlantableSeed seed, int plant_cell) //检查可以种植的格子
- int CountNearbyPlants(int cell, int radius) //检索范围内植物数量
也就是说树鼠种植的逻辑是(1)先定位种子;(2)在树鼠的路径上寻找可以种植用的格子;(3)检查格子周围的植物数量,以格子所在的土块为原点的坐标系上,与原点距离上只能出现2株其他的植物,如果出现3株或者以上,则不被纳入树鼠可种植范围内。(而在在原测试里,是以植物被种下之后会随机对周围格子施加“不可种植DEBUFF”作为前提来思考是错误的。)
※ 坐标系的代码:
int x = 0;
int y = 0;
Grid.PosToXY(Grid.CellToPos(cell), out x, out y);
int num1 = radius * 2;
int x_bottomLeft = x - radius;
int y_bottomLeft = y - radius;
可以看出是曼哈顿距离。
接下来一步一步用图示解析:
图一:判定范围图示
图二:第二株植物
图三:第三株植物
图四:第四株植物
图五:第五株植物
图六:第六株植物
图七:第七株植物
图八:第八株植物
图九:第九株植物(图9截图比较晚,所以其实和图10是同一张)
图十:第十株植物
在在图9的时候种植范围内出现了三个植物,但是树鼠还是种下去了,原因是树鼠是根据行走的路径(选中树鼠单位是会出现一条白线)来检查格子是否可以种植,图8的树鼠还没在金格子种下植物时,图9的树鼠已经确定好了种植的路线,这种意外情况基本上发生在两个树鼠行动时间相差特别短而且选中的种植格子又特别靠近的时候。类似的情况比如说图10。图10的金格子上已经有了一株植物,但是另外一只树鼠还是叼着种子来这个格子种子,结果就是种植重复,种子掉落。这个严格意义上是代码的问题,这也是为什么之前我测试推断种植逻辑的时候会如此困难。
小结:用树鼠白嫖真的是一件很心累的事情,大家还是乖乖地听Klei的话好好做自然保护区吧,四株植物横向种植岂不是随随便便www
如果有遗漏或者有错误的地方希望能补充或者指正,谢谢
特别感谢@烁蓝 和@十里天X 的建议~~
看到大家都对树鼠种植(白嫖)感兴趣,特别是在种植逻辑上。因为内容比较庞杂,再三思索之后还是想开一个新帖,这样子可以让大家看得清楚一点。
P.S. 原测试帖在这里:https://tieba.baidu.com/p/6179529837?pn=1;
在文件解码之后我找到了树鼠种植相关的代码:
private int plantDetectionRadius = 6; //植物检查半径为6
private int maxPlantsInRadius = 2; //在半径内最大的植物数量为2
代码内容比较长,总之其中包含了两个比较重要的function:
- bool CheckValidPlotCell(PlantableSeed seed, int plant_cell) //检查可以种植的格子
- int CountNearbyPlants(int cell, int radius) //检索范围内植物数量
也就是说树鼠种植的逻辑是(1)先定位种子;(2)在树鼠的路径上寻找可以种植用的格子;(3)检查格子周围的植物数量,以格子所在的土块为原点的坐标系上,与原点距离上只能出现2株其他的植物,如果出现3株或者以上,则不被纳入树鼠可种植范围内。(而在在原测试里,是以植物被种下之后会随机对周围格子施加“不可种植DEBUFF”作为前提来思考是错误的。)
※ 坐标系的代码:
int x = 0;
int y = 0;
Grid.PosToXY(Grid.CellToPos(cell), out x, out y);
int num1 = radius * 2;
int x_bottomLeft = x - radius;
int y_bottomLeft = y - radius;
可以看出是曼哈顿距离。
接下来一步一步用图示解析:
图一:判定范围图示
图二:第二株植物
图三:第三株植物
图四:第四株植物
图五:第五株植物
图六:第六株植物
图七:第七株植物
图八:第八株植物
图九:第九株植物(图9截图比较晚,所以其实和图10是同一张)
图十:第十株植物
在在图9的时候种植范围内出现了三个植物,但是树鼠还是种下去了,原因是树鼠是根据行走的路径(选中树鼠单位是会出现一条白线)来检查格子是否可以种植,图8的树鼠还没在金格子种下植物时,图9的树鼠已经确定好了种植的路线,这种意外情况基本上发生在两个树鼠行动时间相差特别短而且选中的种植格子又特别靠近的时候。类似的情况比如说图10。图10的金格子上已经有了一株植物,但是另外一只树鼠还是叼着种子来这个格子种子,结果就是种植重复,种子掉落。这个严格意义上是代码的问题,这也是为什么之前我测试推断种植逻辑的时候会如此困难。
小结:用树鼠白嫖真的是一件很心累的事情,大家还是乖乖地听Klei的话好好做自然保护区吧,四株植物横向种植岂不是随随便便www
如果有遗漏或者有错误的地方希望能补充或者指正,谢谢
特别感谢@烁蓝 和@十里天X 的建议~~