我正在构建一个简单的游戏,使用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"
答案 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。这里的断言是可选的,取决于你的代码,你可以在其他地方验证(用户输入等......)