我正在创建战舰领域,我创建了一种基于随机参数创建斑点的方法。这些点就像“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 letter != "b" and letter != "c":
letter = random.choice(string.ascii_lowercase)
创建它的方法是place_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]))
谢谢!
答案 0 :(得分:1)
您可能希望为每个可能的位置创建字典,因此您可以检查生成的位置是否已被占用。
dict = { "a1" : True } # True is occuped
或者您可以使用列表,但只使用已占用的位置。
答案 1 :(得分:1)
您可以存储占用地点的矩阵(值0
,1
)。放置船舶占据一些元素(船舶所在的位置,相邻的位置等)。对于给定的船舶尺寸和给定的行/列,您可以轻松找到可用的仓位数量。所以你的算法可能如下: