gpt4 book ai didi

python 3 : self variable in init can't be changed?

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:24 24 4
gpt4 key购买 nike

我现在正在为学校编写游戏。到目前为止一切顺利,所以我现在尝试在每位玩家轮到之后实现撤消选项。

  1. 我的板是一个 7x7 矩阵,在 __ init __ 中定义为 self.board。
  2. 棋盘将由每个玩家轮流操纵。
  3. 此外,我在 __ init __ 中定义了 self.saved_states = []。此列表应该存储每个玩家回合后游戏每个状态的副本。

到目前为止,我有一个方法可以将状态实际保存到 3 中提到的列表中。

def save_state(self):
copied_board = copy.copy(self.board)
self.saved_states.append(copied_board)

我对此进行了测试,这似乎有效。问题出在其他地方。

所以我将从用户那里获得输入,如果他输入“u”而不是实际有效的游戏输入,我想执行以下操作:

if input == 'u':
print('Undoing last turn!')
self.board = self.saved_states.pop()
self.player_2()

我只想将游戏的当前状态更改为之前的状态,让玩家 2(再次)轮到他们。

这里有什么问题?每次轮到每个玩家时,我也在操纵棋盘的元素。为什么我不能用以前的一 block 替换整个板?我看不出这里有什么区别。

感谢任何帮助或想法!

最佳答案

这是一个大胆的猜测:如果您的 self.board 是“一个 7x7 矩阵”,它可能是一个列表列表,所以您应该使用 copy.deepcopy 复制电路板。否则,内部列表仍将相同,并且当您修改当前板时,您也会修改所有“副本”。

def save_state(self):
copied_board = copy.deepcopy(self.board)
self.saved_states.append(copied_board)

或者,不是存储每个回合的棋盘布局,而是存储玩家执行的移动并相应地重玩游戏。

关于 python 3 : self variable in init can't be changed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47796896/

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