在扫雷游戏中随机摆放地雷的方法需要帮助

时间:2011-01-10 17:27:21

标签: java

所以我的Java扫雷游戏被表示为int [] [],其中-1表示我的。当我初始化我的游戏时,我需要随机放置x个数量的地雷。

这样做的优雅方式是什么?我正在考虑使用ArrayList和每个单元格的坐标,随机选择它,更改int [] []的状态,然后删除该Point。这样可以确保两次都没有选择任何一个点。

有更优雅的方式吗?

4 个答案:

答案 0 :(得分:4)

我会这样做,但略有不同。使用发卡算法。

按顺序创建网格中所有坐标的数组。 ([0,0], [0,1] .. [0,max], [1,0] .. [max, max])。然后通过按顺序迭代列表并使用随机元素交换每个元素来“洗牌”。然后选择列表中的前x个元素,并将地雷放在这些位置。

答案 1 :(得分:1)

我会生成随机坐标并检查现有矿井的板。如果它存在则跳过它并生成新坐标,如果它没有放置我的坐标。

答案 2 :(得分:0)

我认为矿井宽度是固定的?

如果是这样,那么你可以这样做:

说你有4x4矿井网。

将小数转换为二进制,因此对于4位,范围将为:

2 ^ 4 = 16 =>范围是0 ... 15

然后只需为每个网格“行”调用此函数:

1,16,0,3

将转换为:

0001
1111
0000
0011

答案 3 :(得分:0)

这是在python中。但它打印了地雷的(x,y)坐标。结果已排序,但无关紧要。

from random import sample
import sys

def randomSquares(n, m, mines):
  return sorted([ (mine % m, mine // n) for mine in sample(xrange(n * m), mines)])

if __name__ == '__main__':

  print randomSquares(int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3]))