0

我需要一些帮助来创建 2 个函数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]
]

向上将是:

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

任何帮助将非常感激。先感谢您。

4

1 回答 1

0

您的代码在语法上看起来不错。您应该首先修复一些逻辑错误。左右推还不行。举这个例子

[
  [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]
]

对于左侧,返回相同但反转。你能看到第一行和最后一行的错误吗?你应该重新考虑逻辑..

完成后,您可以创建带有循环的列。(首先取每列的所有第一个数字,然后取所有第二个数字,...)

如果您有一个列列表,您实际上可以使用相同的向左或向右推逻辑。

我会在需要时提供更多代码,我只是想先给你一些建议:)

于 2020-07-01T08:34:22.717 回答