gpt4 book ai didi

python - 最Pythonic 的Tic-Tac-Toe 游戏板表示?

转载 作者:行者123 更新时间:2023-11-30 23:22:24 25 4
gpt4 key购买 nike

哪种方式是用 Python 表示井字游戏的游戏板和获胜组合的最 Pythonic 方式?

我从第一个解决方案开始,认为让游戏图 block 作为单独的对象在二维数组中维护自己的状态会更加面向对象:

class GameTile:
def __init__(self, x, y):
self.x = x
self.y = y
self.value = None # value is either "x", "o", or None

class GameBoard:
_board_size = 3
_player = "o"
_computer = "x"

def __init__(self):
# generate the tile set
self.tiles = [[GameTile(x, y) for y in range(GameBoard._board_size)] for x in range(GameBoard._board_size)]

# generate winning combos
self.winning_combos = [col for col in self.tiles] + \ #vertical
[[col[i] for col in self.tiles] for i in range(GameBoard._board_size)] + \ # horizontal
[[self.tiles[i][i] for i in range(GameBoard._board_size)]] + \ #diagonal
[[self.tiles[i][GameBoard._board_size - i - 1] for i in range(GameBoard._board_size)]] #diagonal

但是,现在我越看越觉得,棋盘似乎可以更简单地表示为表示移动的单个值列表,以及不需要定义的获胜组合列表动态:

class GameBoard:
_board_size = 3
_player = "o"
_computer = "x"
_winning_combos = [[0, 1, 2], [3, 4, 5], [6, 7, 8], etc...]

def __init__(self):
self.board = [None] * 9

第二种方法要简单得多,但它是最Pythonic的方法吗?或者我是否问了正确的问题?

此外,在第二个示例中,获胜组合作为元组列表会更好吗,因为它是不可变的?或者在计算获胜者时会导致效率低下,因为它会与列表进行比较?

最佳答案

我认为您的解决方案设计过度了。

我不知道这是否是最Pythonic的方式,但最合理的方式是使用整数或字符串的二维矩阵,但肯定不是 GameTile 对象。为什么?当整数或字符串可以容纳您需要的所有信息时,为什么还需要一个额外的类?位置是隐含在矩阵中的,图 block 的值使用整数(0 为空、1 为第一玩家、2 为第二玩家)或字符串来存储。

matrix = [[0 for y in range(3)] for x in range(3)]

没有比这更容易的了。

关于python - 最Pythonic 的Tic-Tac-Toe 游戏板表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com