【问题标题】:Lights Out in Python- How to Get Adjacent Tiles in a one-dimensional array?在 Python 中熄灯 - 如何在一维数组中获取相邻的瓦片?
【发布时间】:2015-01-25 21:41:03
【问题描述】:

我的下一个 python 项目是使用 python 和 pygame 的 Lights Out。我需要一些帮助才能开始。我有一个系统可以创建一个空板,然后创建 25 个索引位置,并将它们全部设置为 false,除了少数几个,如下所示:

board = []
for x in range(0, 25):
    board.append(False)
for x in range(0, random.randint(3,8)):
    board[x] = True
random.shuffle(board)

然后程序可以使用列表来读取 5x5 网格中矩形的状态。但是如何找到相邻的图块?

Lights out 由可以打开或关闭的瓷砖网格组成,类似于许多蜂窝动画。一块板通常是 5x5,并且一定数量的瓷砖以“开”开始。当玩家点击一个棋子时,棋子的状态会翻转,所有正交相邻的棋子也会翻转。

要获取相邻的图块,我是否应该制作一个数字 0 到 24 的字典来对应它们旁边的图块?必须有更简单的方法。研究没有发现关于 1D 阵列,只有 2D 阵列。建模this.

【问题讨论】:

  • 从制作二维板而不是一维板开始可能是最简单的。
  • 投反对票的原因?

标签: python list pygame


【解决方案1】:

拥有一块 MXM 大小的板,我们可以编写这个简短的算法:

def getIndexOfNeighoringTiles(i):
    neighbors = []
    if (i % M != 0):
        neighbors.append(i-1)
    if (i % M != (M-1)):
        neighbors.append(i+1)
    if (i / M != 0):
        neighbors.append(i-M)
    if (i / M != (M-1)):
        neighbors.append(i+M)
    return neighbors

稍微解释一下,我们有 4 个边缘情况,我们想排除某些索引。

【讨论】:

  • 谢谢,很有意义。代码后的最后一句话非常有帮助。我对编程比较陌生,如果问题很明显,请原谅,我找不到任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2016-06-09
  • 2011-01-03
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多