2014-03-05 146 views
0

背景故事的位置: 我正在做一个简单的迷宫游戏,其中程序产生的迷宫。我将迷宫描述为一个二维数组的房间,4个布尔值存储一个房间的每个角落是否有墙。 (如果Room.south_wall == false,则比室内被连接到房间南)。每个房间,并且可以具有任意的长度和宽度。为了简单起见,我将它设置为使得长度和宽度在生成开始时确定并应用于所有房间。玩家的位置使用2个浮点数存储,一个是他们的x坐标,一个是他们的y坐标。迷宫看起来是这样的(粗黑线是可见的墙壁,红色的细线代表了二维数组)的东西:映射到一个数组索引

enter image description here

正如你所看到的,每个房间有3长度和宽度我希望能够做的就是确定球员的位置。因此,例如,在这种情况下:

enter image description here

玩家在房间(1,0),(我已标记的来源和室(1,0中心),以帮助看到这个)

我知道这应该是一个简单的问题,但我一直无法拿出任何东西了几天了。任何建议将不胜感激。让我知道这是不是足够的信息。

+0

你的球员的位置是错误的,它应该根据它关闭的坐标在房间(1,1)。 – Cramer

+0

正如室(1,0)的位置,你混你的房间排列。 – Cramer

回答

1

如果有球员位置pxpy和你的房间对齐,使得房(0,0)在(0.0,0.0),则居中房间的指数将

#include<cmath> 
ix = int(std::round(px/room_width)); 
iy = int(std::round(py/room_height)); 

而且,作为一般规则,最好使room_widthroom_height恒定的,而不是用以防万一“裸装”(又名魔法)号以后要改变它。

+0

一直不工作。想象一下,我的房间宽度为4.正如你所看到的,每个房间的原点都在确切的中心,所以从原点到墙的距离是2.假设position =(3,0)。 ix = int(px/room_width)= int(3/4)= 0,当我的位置实际上在房间里时(1,0) – redsoxfantom

+0

@redsoxfantom对不起,我没有意识到你没有把你的房间与并且正在推动消极因素。我修改了上述内容以适用于您的特定情况。 – Cramer

+0

宾果!完美的作品!非常感谢 – redsoxfantom