如何根据2048游戏合并/上下移动行/列

2024-04-25 16:47:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些帮助来创建两个函数push_uppush_down(想想2048游戏),我已经成功地创建了函数,将值向左和向右推,然后如果它们的值相等,将它们相加。例如,[2,2,0,0]将返回为[4,0,0,0]。我有一个单独的函数,可以添加随机数

我需要做同样的上下,但我不知道如何去做。以下是我的起始阵列:

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

任何帮助都将不胜感激。 先谢谢你


Tags: key函数inrightnumberforifdef
1条回答
网友
1楼 · 发布于 2024-04-25 16:47:19

您的代码在语法方面看起来很好。您应该首先修复一些逻辑错误。向左和向右推还不起作用。就拿这个例子来说

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

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

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

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

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

相关问题 更多 >