You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 21:09:02