1 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
問題是沒有什么可以阻止函數(shù)random.randint()
返回相同的選擇,所以在某些時(shí)候你可能會重復(fù)。
相反,我會創(chuàng)建一個(gè)包含所有 (row, col) 對的元組列表。這可以使用附加到列表的兩個(gè)嵌套 for 循環(huán)輕松創(chuàng)建。然后您可以使用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包含隨機(jī)單元格選擇的列表(cells完成后保留剩余的未選擇的單元格)。
為了更緊密地匹配您上面的內(nèi)容:
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)?
編輯:
我不會這樣做(因?yàn)樗粫V怪匦逻x擇,而是在它們發(fā)生時(shí)丟棄它們)。但是,我相信您可能會if像這樣修復(fù)您的當(dāng)前狀況,假設(shè)您只希望在Grid該位置為空時(shí)附加一個(gè)圖塊。:
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)
添加回答
舉報(bào)