python3:init中的自变量不能更改吗?

2024-04-25 11:41:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为学校设计一个游戏。到目前为止进展很顺利,所以我现在尝试在每个玩家回合后实现一个撤销选项。你知道吗

  1. 我的电路板是一个7x7矩阵,在init中定义为自板. 你知道吗
  2. 棋盘将由每一个玩家操作。你知道吗
  3. 而且我有自我保存的状态=[]定义在uuuuuuuuu初始化中。这个列表应该存储每个玩家回合后游戏的每个状态的副本。你知道吗

到目前为止,我有一个方法可以将状态保存到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(再次)轮到他们。你知道吗

这里有什么问题?每次轮到每个玩家时,我也在操纵棋盘上的元素。为什么我不能把整个电路板换成以前的呢?我看不出有什么区别。你知道吗

谢谢你的帮助和建议!你知道吗


Tags: selfboard游戏列表棋盘定义状态选项
1条回答
网友
1楼 · 发布于 2024-04-25 11:41:47

这是一种疯狂的猜测:如果你的self.board是“一个7x7矩阵”,那么它可能是一个列表列表,所以你应该使用copy.deepcopy来复制电路板。否则,内部的列表仍然是相同的,当您修改当前板时,您也修改了所有的“副本”。你知道吗

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

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

相关问题 更多 >