我正在用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>
答案 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]]