分配随机变量随机值

时间:2019-04-12 18:10:37

标签: python python-3.x

我正在用python做游戏2048,作为我的“ Hello world” 游戏以4 * 4网格进行 我已经为每个“正方形”分配了自己的变量 sqr1 = 0 sqr2 = 0 sqr ...高达16 (我确定有更好的方法,但是我更担心自己当前的问题。)

在游戏开始时,随机选择2个正方形,将其随机分配为2或4。

我已经随机选择了2个“平方”,还选择了随机值,但我不知道如何为随机选择的“平方”分配所选择的随机值。

这就是我现在拥有的

sqr16 = 0

# Randomly selected 'squares'
Random_Number_1 = random.randint(1, 16)
Random_Number_2 = random.randint(1, 16)
while(Random_Number_1 == Random_Number_2):
    Random_Number_1 = random.number(1, 16)

# Assign the randomly selected 'squares' random values.
# I know this is 100% not going to work as i wish it to work
sqr[Random_number_1] = random.randint([2], [4])
sqr[Random_Number_2] = random.randint([2], [4])

(我没有将其放在python编辑器中,这是用Chromebook上的txt应用程序编写的。请简单点,这是我的世界,我所知道的最复杂的事情是定义函数。)< / p>

2 个答案:

答案 0 :(得分:1)

“我已为每个'square'分配了自己的变量,例如sqr1 = 0 sqr2 = 0 sqr ...最多16”

如果保留此格式,这将给您带来极大的痛苦。要继续您的方式,您需要类似以下代码:

if(Random_number_1 == 0):
    sqr1 = random.randint([2], [4])
if(Random_number_1 == 1):
    sqr2 = random.randint([2], [4])
if(Random_number_1 == 2):
    sqr3 = random.randint([2], [4])
.........

如果相反,您将正方形保留在以下列表中:

sqr = [0]*16

然后轻松访问它们!一行而不是32行:

sqr[Random_Number_1] = random.randint([2], [4])

答案 1 :(得分:0)

使用列表会使事情变得容易一些。由于您具有4x4网格,因此有16个插槽。初始化零或任何您想要的值的列表。然后随机选择一个插槽并为其分配一个值,直到至少有两个包含2或4的单元格。

import random

grid = [0 for i in range(16)]

while sum([i > 0 for i in grid]) < 2:      # Make sure we have 2 cells selected
    loc = random.choice(range(len(grid)))  # Pick a random spot
    grid[loc] = random.choice([2, 4])      # Give it a random value

print(grid)

运行5次后的输出如下

[0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0]
[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 0]

然后,如果您想将其转换为2D列表以使其足够简单以知道哪些单元格与其他单元对齐,则可以将其分块并准备好播放!

grid = [grid[n*4: n*4+4] for n in range(4)]
print(grid)
# [[0, 0, 0, 0], [0, 0, 0, 4], [0, 0, 0, 0], [0, 2, 0, 0]]

然后,如果您真的想找乐子,可以将其放入函数中,并设置一些变量以与不同尺寸的面板一起玩!

import random

def create_grid(size, starting_tiles):

    grid = [0 for i in range(size**2)]

    while sum([i > 0 for i in grid]) < starting_tiles:
        loc = random.choice(range(len(grid)))
        grid[loc] = random.choice([2, 4])

    return [grid[n*size: n*size+size] for n in range(size)]

pp.pprint(create_grid(4, 2))
#[[0, 0, 2, 0], 
# [0, 0, 0, 0], 
# [0, 0, 0, 0], 
# [0, 0, 4, 0]]

pp.pprint(create_grid(5, 3))
#[[0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0],
# [0, 2, 0, 0, 4],
# [0, 0, 0, 0, 2],
# [0, 0, 0, 0, 0]]