Python 2.7 根据限制条件,重复在战列舰中随机放置舰船
我正在创建一个战舰战场,我已经创建了一种基于随机参数创建点的方法。这些点类似于“1a”、“2a”设置 这是你叫它的时候的样子Python 2.7 根据限制条件,重复在战列舰中随机放置舰船,python-2.7,random,Python 2.7,Random,我正在创建一个战舰战场,我已经创建了一种基于随机参数创建点的方法。这些点类似于“1a”、“2a”设置 这是你叫它的时候的样子 ships.append(place_ship(ships, randint(2,3), letter, str(randint(1,4)), random.choice([True,False]))) randint(2,3)是指船舶的长度,随机选择参数是指船舶是否垂直,字母是指以下任意字母: letter = '' while letter != "a" and l
ships.append(place_ship(ships, randint(2,3), letter, str(randint(1,4)), random.choice([True,False])))
randint(2,3)是指船舶的长度,随机选择参数是指船舶是否垂直,字母是指以下任意字母:
letter = ''
while letter != "a" and letter != "b" and letter != "c":
letter = random.choice(string.ascii_lowercase)
创建它的方法是place\u ships:
def place_ship(ships, length, x, y, vert):
idk = {}
for i in range(length):
square = y+x
if vert:
x = chr(ord(x) + 1)
else:
y = str(int(y) + 1)
idk[i] = square
return idk
我的问题是如何放置船只,而不让任何斑点穿过船只
以下是列表中位置的示例:
['2c', '2d', '3c', '4c', '2c', '2d']
所以2c,2d是一艘飞船3c,4c,然后是2c,2d
我试着做了以下工作,但它只检查第一艘船
for i in all_ship_loc:
occurence = all_ship_loc.count(i)
while occurence > 1:
place_ship(ships, randint(2,3), letter, str(randint(1,4)),random.choice([True,False]))
谢谢 您可能需要为每个可能的位置创建一个字典,因此您需要检查生成的位置是否已被占用
dict = { "a1" : True } # True is occuped
或者你可以使用一个列表,但只列出被占用的位置 您可以存储占用位置矩阵(值
0
,1
)。放置船舶占用了一些要素(船舶所在位置、相邻位置等)。对于给定的船舶尺寸和给定的行/列,您可以轻松找到可用的位置数量。因此,您的算法可能如下所示:
- 从最大的船开始
- 随机选择一个方向(水平/垂直)
- 列举该方向的可用位置
- 如果没有可用的,重新定位一些最后的船只
- 在可用集合内随机选择一个位置,标记相应的点
,而不是{“a”、“b”、“c”中的字母