将位置映射到数组索引

时间:2014-03-05 00:40:09

标签: c++ arrays

背景故事: 我正在制作一个简单的迷宫游戏,其中迷宫是程序生成的。我把迷宫描绘成一个二维的房间阵列,有4个布尔值存储房间的每个角落是否有墙。 (如果Room.south_wall == false,则房间连接到南面的房间。)每个房间都可以有任意长度和宽度。为简单起见,我将其设置为在生成开始时确定长度和宽度并应用于所有房间。使用2个浮点数存储玩家的位置,一个是他们的x坐标,一个是他们的y坐标。迷宫看起来像这样(粗黑线是可见墙,细红线代表2d阵列):

enter image description here

正如你所看到的,每个房间的长度和宽度都是3.我想要做的是确定玩家所处的位置,给定他们的位置。例如,在这个例子中:

enter image description here

玩家在房间(1,0)(我已经标记了房间的原点和中心(1,0)以帮助看到这个)

我知道这应该是一个简单的问题,但我几天都无法想出任何东西。任何建议将不胜感激。如果这还不够,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果您有玩家位置pxpy并且您的房间已对齐,以便房间(0,0)居中于(0.0,0.0),那么房间的索引将为< / p>

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

此外,作为一般规则,最好将room_widthroom_height设为常数,而不是使用'裸'(又称魔术)数字,以防您以后想要更改它。