我需要一些帮助来创建两个函数push_up和push_down (想想2048年的游戏),我已经设法创建了一个函数,它可以将值左右推送,如果它们的值相等,则将它们相加。例如,[2,2,0,0]将作为[4,0,0,0]返回。我有一个单独的函数来添加随机数。
我需要对up和down做同样的事情,但是我不确定该怎么做。下面是我的起始数组:
grid = [
[2, 2, 0, 2],
[0, 2, 0, 0],
[0, 2, 0, 4],
[4, 0, 4, 0]
]下面是我的函数:
def push_right(grid):
for row in grid:
for i, number in reversed(list(enumerate(row))):
if number == row[i-1]:
row[i] = number + row[i-1]
row[i-1] = 0
row.sort(key=lambda v: v != 0)
return grid
def push_left(grid):
for row in grid:
for i, number in reversed(list(enumerate(row))):
if number == row[i-1]:
row[i] = number + row[i-1]
row[i-1] = 0
row.sort(key=lambda v: v != 0, reverse=True)
return grid
print(push_right(grid))
print(push_left(grid))以下哪项输出:
[
[0, 0, 4, 4],
[0, 0, 0, 2],
[0, 0, 2, 4],
[0, 0, 4, 4]
]和:
[
[8, 0, 0, 0],
[2, 0, 0, 0],
[2, 4, 0, 0],
[8, 0, 0, 0]]我有一个打印在网格上的函数,但我需要一些帮助来编码函数,这将移位和合并向上和向下。例如,对于数组:
[
[0, 0, 4, 4],
[0, 0, 0, 2],
[0, 0, 2, 4],
[0, 0, 4, 4]
]下一步是:
[
[0, 0, 0, 0],
[0, 0, 4, 4],
[0, 0, 2, 2],
[0, 0, 4, 8]
]而up将是:
[
[0, 0, 4, 4],
[0, 0, 2, 2],
[0, 0, 4, 8],
[0, 0, 0, 0]
]任何帮助都将不胜感激。提前谢谢你。
发布于 2020-07-01 16:34:23
您的代码在语法上看起来很好。有一些逻辑错误你应该首先修复。左推和右推还不起作用。以这个例子为例
[
[0, 4, 0, 4],
[0, 0, 0, 2],
[0, 0, 2, 4],
[4, 2, 2, 4]
]对于右侧,这将返回:
[
[0, 0, 4, 4],
[0, 0, 0, 2],
[0, 0, 2, 4],
[0, 0, 8, 4]
]对于left,返回相同的值,但将其反转。你能看到第一行和最后一行的错误吗?你应该重新考虑一下逻辑..
完成后,您可以使用循环创建列。(首先获取每列的所有第一个数字,然后获取所有第二个数字,...)
如果你有一个列的列表,你实际上可以使用相同的逻辑向左或向右推。
我会在需要的时候提供更多的代码,我只是想先给你一些建议:)
https://stackoverflow.com/questions/62658214
复制相似问题