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)
添加回答
舉報