为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

富国沪深 2023-03-22 16:31:23
我不知道如何让这段代码不在网格中使用相同的图块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)
查看完整描述

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)


查看完整回答
反对 回复 2023-03-22
  • 1 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号