Python游戏类初始玩家分配与回合切换功能报错求解
报错原因
- 初始化阶段玩家编号赋值错误:你在
__init__中判断if self.getCurrentPlayer == 0存在两个问题:一是getCurrentPlayer是类方法,没有加()调用,实际比较的是方法对象和数字0,该判断永远不成立;二是getCurrentPlayer返回的是玩家对象,不可能等于数字0。这就导致初始的CurrentPlayerNumber被错误赋值为1,触发了player 0 should start!的断言错误。 nextPlayer切换玩家逻辑错误:当前的nextPlayer方法只返回了布尔比较结果,没有用赋值语句修改self.CurrentPlayer属性,也没有同步更新对手玩家、当前玩家编号的关联属性,切换玩家功能完全无法正常运行。- 补充:你的代码还缺失了测试要求的风力相关属性和方法,修复完初始报错后后续测试也会触发相关错误。
修复方案
修复初始化逻辑,直接指定初始玩家属性,重写切换玩家方法同步更新所有关联字段,同时补上测试要求的风力相关属性和方法即可,修复后完整代码如下:
import random """ This is the model of the game""" class Game: def __init__(self, cannonSize, ballSize): p1 = Player("blue", -90) p2 = Player("red", 90) self.players = [p1,p2] # 初始化直接指定玩家0为当前玩家,无需多余判断 self.CurrentPlayer = self.players[0] self.OtherPlayer = self.players[1] self.CurrentPlayerNumber = 0 # 补充测试要求的初始风力属性 self.currentWind = random.randint(-10, 10) self.cannonSize = cannonSize self.ballSize = ballSize """ A list containing both players """ def getPlayers(self): return self.players """ The current player, i.e. the player whose turn it is """ def getCurrentPlayer(self): return self.CurrentPlayer """ The opponent of the current player """ def getOtherPlayer(self): return self.OtherPlayer """ The number (0 or 1) of the current player. This should be the position of the current player in getPlayers(). """ def getCurrentPlayerNumber(self): return self.CurrentPlayerNumber """ Switch active player """ def nextPlayer(self): # 实际修改实例属性,同步更新所有关联字段 if self.CurrentPlayer == self.players[0]: self.CurrentPlayer = self.players[1] self.OtherPlayer = self.players[0] self.CurrentPlayerNumber = 1 else: self.CurrentPlayer = self.players[0] self.OtherPlayer = self.players[1] self.CurrentPlayerNumber = 0 """ 补充测试要求的风力相关方法 """ def getCurrentWind(self): return self.currentWind def setCurrentWind(self, wind): self.currentWind = wind def newRound(self): self.currentWind = random.randint(-10, 10)
内容的提问来源于stack exchange,提问作者Andreas Philipson
相关产品推荐
相关产品推荐

