不重复地在网格上随机生成图块?

我不知道如何让这段代码不在网格中使用相同的图块


for i in range(60):

    RandomRow = random.randint(0, MazeSize - 1)

    RandomColumn = random.randint(0, MazeSize - 1)

    TempTile = MapTile('walls', RandomColumn, RandomRow)

    Grid[RandomColumn][RandomRow].append(TempTile) 

我试过这样做,但结果是一样的


for i in range(60):

    RandomRow = random.randint(0, MazeSize - 1)

    RandomColumn = random.randint(0, MazeSize - 1)

    TempTile = MapTile('walls', RandomColumn, RandomRow)

    if TempTile not in Grid: Grid[RandomColumn][RandomRow].append(TempTile)


富国沪深
浏览 217回答 1
1回答

江户川乱折腾

问题是没有什么可以阻止函数random.randint()返回相同的选择,所以在某些时候你可能会重复。相反,我会创建一个包含所有 (row, col) 对的元组列表。这可以使用附加到列表的两个嵌套 for 循环轻松创建。然后您可以使用random.choice()从列表中选择,然后删除所选条目。这将确保您不能重新选择单元格。它看起来像这样:import randomMAX_SELECTIONS = 60ROWS = 10COLUMNS = 15cells = []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 randomMAX_SELECTIONS = 60ROWS = MazeSizeCOLUMNS = MazeSizecells = []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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python