我正在为学校编写游戏。到目前为止一切顺利,所以我现在试图在每个玩家转向后实施撤销选项。
到目前为止,我有一个方法实际上将状态保存到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轮流(再次)。
问题出在这里?每次每个玩家轮到我操纵棋盘的元素。为什么我不能用以前的电路板替换整个电路板?我不明白这里的区别。
感谢您的帮助或想法!
答案 0 :(得分:2)
这是一个疯狂的猜测:如果您的self.board
是" 7x7矩阵",它可能是列表列表,因此您应该使用copy.deepcopy
复制董事会。否则,内部列表仍然是相同的,并且当您修改当前板时,您还修改了所有"副本"。
def save_state(self):
copied_board = copy.deepcopy(self.board)
self.saved_states.append(copied_board)
或者,不是存储每个回合的棋盘布局,而是存储玩家执行的动作并相应地重放游戏。