在MxN阵列区域中找到随机WxH矩形拟合,其中array [x] [y] == number

时间:2010-08-27 20:43:01

标签: random

我正在编写一个游戏,每当新游戏开始时就会生成随机地图。游戏字段是MxN布尔数组(true = ground,false = air。)从该数组我计算每个连接的空闲(空气)区域,生成一个新的MxN int数组,如果有地,则int值为0,或者区域编号,如果它是自由空间(每个自由空间与相邻的自由空间具有相同的区域#。)现在,我的随机游戏区域已在编号的房间中分开。

例如为:
地面数据:
00000的 11 00 111 000
0000的 11 00000的 111 0
000的 111 00000 1111
00000的 111 000000 1
0000000的 11 0000 11

房间数据:
11111的 00 22 000 333
1111的 00 22222的 000 3
111的 000 22222 0000
11111的 000 222222 0
1111111的 00 2222 00

我需要用怪物,物体等填充这些房间。所以我需要一些方法来找到,给定一个矩形大小和一个房间#,一个随机的位置,在那个房间WxH矩形适合。

显然我可以盲目地尝试随机坐标,直到标准匹配,但我认为这不是真正的方法,因为随机数可能需要很长时间才能满足要求(或者不是,它是随机的。 )

我不在乎随机区域是否可以重复使用,我的意思是,我不在乎是否可以随机选择相同的随机区域两次(换句话说,如果对象在其他对象上生成),但是最好能够处理这种情况。

谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以列出对象的有效位置(使用类似于房间确定算法的逻辑),并随机选择该列表中的索引。

答案 1 :(得分:0)

我会制作第三个MxN数组,每个点都有0或1。 0表示WxH不适合那里,1表示它会。这应该在您创建第二个数组的同一时间(或实际上,正确时间)计算,