2

我正在使用 Python 构建一个简单的游戏,将 2D 数组作为棋盘。我的用户可以输入数字来玩,但这些数字与棋盘上的位置并没有很好的相关性。

我可以将数组的位置存储在变量中,这样我每次检查条件时都不必写出 board[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 做的就是让我参考 board[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

4 回答 4

1

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

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
于 2013-04-04T17:29:59.140 回答
0

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

例如。

Class BoardWrapper {
   private int[][] board;

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

   public locationOf1() {
      if (board[3][5] == "Z") {
         ...
      }
   }
}
于 2013-04-04T17:27:30.233 回答
0

好吧,由于您已经有一个数组可供使用,因此您无法进行更快的查找,因为您已经有一个恒定的查找时间。我将使用键为 std::string 和值为 int* (c++) 的映射将“locationof1”形式的字符串映射到指向内存中实际地址的整数指针。

于 2013-04-04T17:29:09.703 回答
0

如果我理解正确,您想将棋盘坐标映射到单个值,我想这对游戏有一些意义,因为 x,y 坐标听起来很简单。

我会静态映射这些坐标以使用字典对板进行建模,并将另一个字典映射到当前板状态:

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。这里的断言是可选的,取决于您的代码,您可以在其他地方验证(用户输入等...)

于 2013-04-04T17:44:30.597 回答