我正在制作一个游戏,它生成一个项目并将其随机放置在显示的列表中。当我运行代码时,它偶尔会将随机项放置在一个单元格上,该单元格中已经放置了一个随机项。如何修复我的代码,使其不允许在单元格已经被修改的情况下进行修改?我使用显示列表和检查列表来跟踪修改单元格的位置。
这是我目前拥有的:
import os,random
row,col = 10,13
x,y = 0,0
item_grid = [[' 33[33m[%d,%d] 33[m' % (j,i) for i in range(row)] for j in range(col)]
item_placed = [['empty' for i in range(row)] for j in range(col)]
iron = [
[' 33[90m[ ] 33[m',' 33[90m[ ] 33[m'],[' 33[90m[ ] 33[m',' 33[90m[ ] 33[m']
]
test_sphere = [[' 33[92m[ ] 33[m' for i in range(2)] for j in range(2)]
g_sphere = [
[' 33[92m[T,L] 33[m',' 33[92m[T,R] 33[m'],
[' 33[92m[B,L] 33[m',' 33[32m[B,R] 33[m']
]
def item_placing():
item_number = random.randint(2,4)
print(item_number)
taken = []
for i in range(item_number):
placing_hidden_items = True
while placing_hidden_items:
item = test_sphere#g_sphere # random item to be placed
count = 0
a = random.randint(0,row-1)
b = random.randint(0,col-1)
ba = (b-1,a-1)
for i in range(len(item)):
for j in range(len(item)):
if count == len(item): placing_hidden_items = False
if (b-len(item) >= 0) and (a-len(item) >= 0):
if item_placed[(b-len(item))+i][(a-len(item)+j)] == 'full ':
print('error')
count = 0
break
elif (item_placed[(b-len(item))+i][(a-len(item)+j)] == 'empty'):
count += 1
taken.append(ba)
for i in range(len(item)):
for j in range(len(item)):
if ba in taken:
if (item_placed[(b-len(item))+i][(a-len(item))+j] == 'empty'):
item_grid[(b-len(item))+i][(a-len(item))+j] = item[i][j]
if (item_grid[(b-len(item))+i][(a-len(item))+j] == ' 33[33m[ ] 33[m'):
item_placed[(b-len(item))+i][(a-len(item))+j] = 'empty'
else:
item_placed[(b-len(item))+i][(a-len(item))+j] = 'full '
print(taken)
item_placing()
for i in range(col):
for j in range(row):
print(item_grid[i][j], end = ' ')
print()
for i in range(col):
for j in range(row):
print(item_placed[i][j], end = ' ')
print()
您要放置多少个项目?你可以构建一个网格中所有可能位置的迭代,然后使用找到n个不同但随机的位置
import itertools
import random
row = 10
col = 10
N = 5
positions = sorted(itertools.product(range(row), range(col)))
random.sample(positions, N)
有关itertools模块的更多信息:https://docs.python.org/3/library/itertools.html
有关random.sample函数的更多信息:https://docs.python.org/3/library/random.html#random.sample