1 回答

TA贡献1851条经验 获得超5个赞
问题是没有什么可以阻止函数random.randint()
返回相同的选择,所以在某些时候你可能会重复。
相反,我会创建一个包含所有 (row, col) 对的元组列表。这可以使用附加到列表的两个嵌套 for 循环轻松创建。然后您可以使用random.choice()
从列表中选择,然后删除所选条目。这将确保您不能重新选择单元格。
它看起来像这样:
import random
MAX_SELECTIONS = 60
ROWS = 10
COLUMNS = 15
cells = []
for i in range(ROWS):
for j in range(COLUMNS):
cells.append((i, j))
random_cells = []
for _ in range(MAX_SELECTIONS):
selection = random.choice(cells)
random_cells.append(selection)
cells.remove(selection)
Withrandom_cells包含随机单元格选择的列表(cells完成后保留剩余的未选择的单元格)。
为了更紧密地匹配您上面的内容:
import random
MAX_SELECTIONS = 60
ROWS = MazeSize
COLUMNS = MazeSize
cells = []
for i in range(ROWS):
for j in range(COLUMNS):
cells.append((i, j))
for _ in range(MAX_SELECTIONS):
selection = random.choice(cells)
cells.remove(selection)
RandomRow = selection[0]
RandomColumn = selection[1]
TempTile = MapTile('walls', RandomColumn, RandomRow)
Grid[RandomColumn][RandomRow].append(TempTile)
编辑:
我不会这样做(因为它不会停止重新选择,而是在它们发生时丢弃它们)。但是,我相信您可能会if像这样修复您的当前状况,假设您只希望在Grid该位置为空时附加一个图块。:
for i in range(60):
RandomRow = random.randint(0, MazeSize - 1)
RandomColumn = random.randint(0, MazeSize - 1)
if not Grid[RandomColumn][RandomRow]:
TempTile = MapTile('walls', RandomColumn, RandomRow)
Grid[RandomColumn][RandomRow].append(TempTile)
添加回答
举报