【发布时间】:2011-12-15 06:28:56
【问题描述】:
SHIPS = (('AirCraftCarrier', 5), ('Battleship', 4),
('Submarine', 3), ('Destroyer', 3), ('PatrolBoat', 2))
position = ('v', 'h')
def setShip(self, board, graphics):
maxval = board.getSize() - 1
coords = []
sizes = [(v) for k, v in SHIPS]
for i in sizes:
legal = False
while not legal:
pos = choice(position)
if pos == 'v':
x = randint(0, maxval-1)
y = some kind of code to change y while keeping x same
if pos == 'h':
x = some kind of code to change x while keeping y same
y = randint(0, maxval-1)
if not board.isOccupied(x, y):
legal = True
coords.append((pos, x, y))
#return grid.displayShip(x, y)
return coords
现在,如果选择 v=vertical,则 y 值必须更改,而 x 值保持不变。这将导致我的船垂直放置。我不知道有什么方法可以完成这项工作。我需要随机选择第一个值,然后再选择后面的值,以达到船的长度,但是最后一个值不能大于 9,因为我的网格只能到 9。
【问题讨论】:
-
你只改变y的值而不对x做任何事情,这不是你需要的吗?就像
if pos == 'v': y = newy,没有提到x。 -
不,但我仍然需要 x 的随机值,但这会随着值的变化保持不变。就像你要在图表上画一条垂直线一样,x 值将保持不变当 y 值改变时
-
@yosukesabai 的意思是
x和y可以相互独立计算。选择你的随机x,然后(假设你的船长度为4),在1到6之间随机选择一个起始y。然后让你的船从y开始,所以它占据位置y,@987654330 @,y+2,y+3。按照设计,这不会超过 9,因为您在 1 和 6 之间选择了起始y。