【问题标题】:How can I flip around the coordinates inside a multidimensional array in Python?如何在 Python 中翻转多维数组内的坐标?
【发布时间】:2016-05-04 18:05:50
【问题描述】:

所以我正在制作一个非常类似于使用 10x10 棋盘的跳棋的游戏。每个玩家有 15 个棋子,一个玩家从左上角开始,另一个玩家从右下角开始。到目前为止,我对移动的想法是玩家将输入他想要移动的棋子的 x 和 y 坐标。但是,我想在玩家每次移动时“翻转”游戏板,这样玩家就不必在棋盘的不同面工作。除了电路板本身和电路板的印刷品之外,我没有太多代码。如果它有任何帮助,这是我到目前为止的代码,没什么太花哨的。

matrix = [[1,1,1,1,1,0,0,0,0,0], [1,1,1,1,0,0,0,0,0,0], [1,1,1,0,0,0,0,0,0,0], [1,1,0,0,0,0,0,0,0,0], [1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,2], [0,0,0,0,0,0,0,0,2,2], [0,0,0,0,0,0,0,2,2,2], [0,0,0,0,0,0,2,2,2,2], [0,0,0,0,0,2,2,2,2,2]]

print "\n".join(" ".join(str(el) for el in row) for row in matrix)


print matrix[0][0]

这是结果:

1 1 1 1 1 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0 2 2
0 0 0 0 0 0 0 2 2 2
0 0 0 0 0 0 2 2 2 2
0 0 0 0 0 2 2 2 2 2

所以从理论上讲,如果我想将检查器移到最低行,我会输入 x = 0 和 y = 4,其中包含一个“1”检查器。但是,如果第二个玩家想要移动相同的棋子,他们必须输入 x = 9 和 y = 5。

有什么方法可以翻转坐标,使两个人也输入 x = 0 和 y = 4 来移动最后一个棋子。我更喜欢这个系统,因为我觉得它不那么令人困惑。

【问题讨论】:

  • 想想切片。您可以使用 mylist[::-1] 反转列表。现在想想你的 X 轴是什么,你的 Y 轴是什么。现在你能解决这个问题了吗?
  • 使用负索引? matrix[-x-1][-y-1] 应该给你matrix[x][y] 在板中心的反射。如果您不介意硬编码列表的大小,我想您可以使用 9-x9-y 来获得正索引。

标签: python multidimensional-array


【解决方案1】:

如果我理解,您希望第二个用户看到以下矩阵

2 2 2 2 2 0 0 0 0 0
2 2 2 2 0 0 0 0 0 0
2 2 2 0 0 0 0 0 0 0
2 2 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1 1

如果正确,我认为最简单的方法是使用numpy

import numpy as np

new_matrix = np.fliplr(np.flipud(matrix)) # flip left-right and flip up-down
new_matrix = new_matrix.tolist() # If you want to use a list
                                 # instead a numpy array after the operation

【讨论】:

  • 这正是我想要做的,谢谢。现在我唯一的问题是,当我导入 numpy 时,它给了我这个错误:“没有名为 numpy 的模块”。如果有任何帮助,我正在使用 python 2.7.10。
  • 你必须安装 numpy.尝试在终端中写入pip install numpy
【解决方案2】:

如果你不想每次都翻转数组,你可以只转换第二个玩家输入

def transform_p2(x,y):
    p2_x = 9-x
    p2_y = 9-y
    return p2_x, p2_y

【讨论】:

    猜你喜欢
    • 2017-03-16
    • 2013-12-14
    • 2016-11-16
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2019-10-21
    相关资源
    最近更新 更多