在变量中存储阵列位置

时间:2013-04-04 17:15:28

标签: python arrays

我正在构建一个简单的游戏,使用Python,2D阵列作为棋盘。我可以输入要播放的数字,但这些数字与主板上的位置无关。

我可以在变量中存储数组的位置,这样每次检查条件时我都不必写出[x] [y]板吗?

所以而不是:

if num == 1:
    if board[3][5] == "Z":
        print "Not empty!"
    else 
        board[3][5] = "Z"

我可以使用:

if num == 1:
    if locationOf1 == "Z":
        print "Not Empty!"
    else
        locationOf1 == "Z"

我想要locationOf1做的就是把我带到董事会[3] [5]所在的地方。如何才能做到这一点?

[编辑]甚至更好(这可能吗?):

locations = *[location of board[5][1],location of board[5][3]]*

if locations[num] == "Z":
        print "Not empty!"
    else
        locations[num]  == "Z"

4 个答案:

答案 0 :(得分:1)

基于键存储信息的最简单方法是dict。您可以将值保存为元组:

locations = {1: (3, 5), 2: (4,3)}

def get_location(num):
    x, y = locations.get(num, (-1, -1, ))
    if coords != (-1,-1): 
       return board[x,y]
    else:
       return None

答案 1 :(得分:0)

一种简单的方法是为2D数组创建一个包装类。封装将为您的游戏板赋予意义,并且更易于使用。

例如

Class BoardWrapper {
   private int[][] board;

   public BoardWrapper(int w, int l) {
      board = new int[w][l];
   }

   public locationOf1() {
      if (board[3][5] == "Z") {
         ...
      }
   }
}

答案 2 :(得分:0)

好吧,既然你已经拥有了一个阵列,那么你就无法进行更快速的查找,因为你已经有了一个恒定的查找时间。我将使用带有键的映射作为std :: string,将值作为int *(c ++),将“locationof1”形式的字符串映射到指向内存中实际地址的整数指针。

答案 3 :(得分:0)

如果我理解正确你想要将单板值映射到单个值,我猜这对于游戏有一些意义,因为x,y coords听起来很简单。

我会静态地将这些坐标映射到用dict模拟电路板,以及另一个对当前电路板状态的字典:

from collections import defaultdict

board = {
    1: (1, 2),
    3: (3, 4)
}

board_state = defaultdict(str)

然后只需使用位置[x]来获取或设置状态(“Z”)。

<强>更新

def set_value(val, pos):
    assert pos in board
    board_state[pos] = val

def get_value(pos):
    assert pos in board
    return board_state[pos]

为了说明一个用例,您当然可以使用board_state。这里的断言是可选的,取决于你的代码,你可以在其他地方验证(用户输入等......)