因此,我正在开发一个简单的基于文本的游戏,类似于pacman,其中字母'c‘是玩家使用用户输入控制的字符。在5x10网格中,由o代表的10枚“硬币”应该是随机生成的。另一方面,网格是由符号“-”组成的。
玩家的图标,以及硬币应该随机生成。
我为单行编写了一个简单的解决方案,在其中,我从列表中随机弹出一个元素,取出相同的索引,插入一个硬币。下面是代码:
array=['-','-','-','-','-','-','-','-','-','-',]
separator = ' '
def pop():
pos = random.randint(0,9)
return pos
array.pop(pop())
array.insert(pop(), 'o')
print (separator.join(array))现在我只需要把它变成一个5x10网格。问题是,我不知道如何在5行数组中随机插入11个元素(10个硬币和播放器图标)。帮助!
发布于 2022-01-10 15:20:17
与其使用自定义的pop()函数,不如使用两次:
array.pop(pop())
array.insert(pop(), 'o')您可以使用:
index = pop()
array.pop(index)
array.insert(index, 'o')或者更好的解决办法是:
index = pop()
array[index] = 'o'用random.sample()
import numpy as np
from random import sample
indexes = list(range(50))
chosen = sample(indexes, k=11)
grid = np.array(["-"] * 50)
grid[chosen[0]] = "c"
for i in range(10):
grid[chosen[i+1]] = "o"
grid = grid.reshape((5, 10))
print(grid)k=11指的是一个字符(c)和10个硬币(o)
发布于 2022-01-10 15:31:29
因此,首先我们将使用宽度为5和高度为10的列表生成一个2d数组:
import random
w, h = 5, 10
two_d_array = [['-' for x in range(w)] for y in range(h)]接下来,由于您希望在不选择相同位置的情况下随机放置这些项两次,因此我们希望生成一个不具有重复值的随机示例:
samples = random.sample(range(w * h), 10)然后,对于每一个样本值,我们将取样本值除以宽度的整数值,然后通过将样本的其余部分除以宽度来得到列值。用你想要的值来代替。
for s in samples:
row = int(s/w)
column = s % w
two_d_array[row][column] = 'o'https://stackoverflow.com/questions/70654643
复制相似问题