gpt4 book ai didi

dictionary - 六边形瓷砖并找到它们的相邻邻居

转载 作者:行者123 更新时间:2023-12-03 07:01:26 36 4
gpt4 key购买 nike

我正在使用六边形瓷砖 map 开发一个简单的 2D 棋盘游戏,我已经阅读了几篇关于如何在屏幕上绘制六边形以及如何管理运动(尽管我以前已经做过很多运动)。我的主要问题是根据给定的半径找到相邻的瓷砖。

这就是我的 map 系统的工作方式:

(0,0) (0,1) (0,2) (0,3) (0,4)
(1,0) (1,1) (1,2) (1,3) (1,4)
(2,0) (2,1) (2,2) (2,3) (2,4)
(3,0) (3,1) (3,2) (3,3) (3,4)

ETC...

我正在努力解决的问题是我不能使用 for(x-range;x+range;x++); for(y-range;y+range;y++); 来“选择”相邻的瓷砖。因为它选择了不需要的图 block (在我给出的示例中,选择(1,1)图 block 并给出范围 1 也会给我(3,0)图 block (我实际需要的是(0,1)( 0,2)(1,0)(1,2)(2,1)(2,2) ),它有点与瓷砖相邻(因为数组的结构方式),但这并不是我真正想要的选择。我可以强行使用它,但这不会很漂亮,并且可能不会涵盖“选择半径事物”的各个方面。

有人可以在这里指出我正确的方向吗?

最佳答案

我能想到的最简单的方法...

minX = x-range; maxX = x+range
select (minX,y) to (maxX, y), excluding (x,y) if that's what you want to do
for each i from 1 to range:
if y+i is odd then maxX -= 1, otherwise minX += 1
select (minX, y+i) to (maxX, y+i)
select (minX, y-i) to (maxX, y-i)
可能有点偏;我只是在脑海中解决了它。但至少,这是你需要做什么的一个想法。
在 C'ish 中:
void select(int x, int y) {
/* todo: implement this */
/* should ignore coordinates that are out of bounds */
}

void selectRange(int x, int y, int range) {
int minX = x - range, maxX = x + range;
for (int i = minX; i <= maxX; ++i) {
if (i != x) select(i, y);
}
for (int yOff = 1; yOff <= range; ++yOff) {
if ((y+yOff) % 2 == 1) --maxX; else ++minX;
for (int i=minX; i<=maxX; ++i) {
select(i, y+yOff);
select(i, y-yOff);
}
}
}

关于dictionary - 六边形瓷砖并找到它们的相邻邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4585135/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com