Python 在网格上随机生成平铺而不重复?

Python 在网格上随机生成平铺而不重复?,python,pygame,Python,Pygame,我不知道如何使这段代码不在网格中使用相同的磁贴 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)
    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)

问题是没有任何东西可以阻止
random.randint()
函数返回相同的选择,因此在某个时候,您可能会得到重复

相反,我将创建一个包含所有(行、列)对的元组列表。使用附加到列表的两个嵌套for循环,可以轻松创建该循环。然后,您可以使用从列表中选择,然后删除所选条目。这将确保您无法重新选择单元格

它看起来像这样:

随机导入
最大选择数=60
行=10
列=15
单元格=[]
对于范围内的i(行):
对于范围内的j(列):
单元格。附加((i,j))
随机_单元=[]
对于范围内的(最大选择):
选择=随机。选择(单元格)
随机_单元格。追加(选择)
单元格。删除(选择)
包含随机单元格选择列表的
random_cells
cells
完成后保留剩余未选择的单元格)

要更紧密地匹配上述内容,请执行以下操作:

随机导入
最大选择数=60
行=MazeSize
列=MazeSize
单元格=[]
对于范围内的i(行):
对于范围内的j(列):
单元格。附加((i,j))
对于范围内的(最大选择):
选择=随机。选择(单元格)
单元格。删除(选择)
RandomRow=选择[0]
随机列=选择[1]
TENTILE=MapTile('walls',RandomColumn,RandomRow)
网格[RandomColumn][RandomRow]。追加(文件)
编辑:
我不会这样做(因为它不会停止重新选择,而是在它们发生时丢弃它们)。但是,我相信您可以修复当前的
if
条件,假设您只希望在
网格
中添加一个磁贴(如果该位置为空):

范围(60)内的i的
:
RandomRow=random.randint(0,MazeSize-1)
RandomColumn=random.randint(0,MazeSize-1)
如果不是网格[RandomColumn][RandomRow]:
TENTILE=MapTile('walls',RandomColumn,RandomRow)
网格[RandomColumn][RandomRow]。追加(文件)

尝试为您的随机生成器库添加种子。为了获得帮助,我不得不移动一些其他代码行,但它现在可以完美地工作:)