Python OOP游戏开发问题:列表中生成的Player对象无法访问
问题分析与修复方案
1. 生成Player实例的错误
你当前生成玩家列表的代码没有创建Player类的实例,只是把类本身重复添加到了列表中:
# 错误写法:仅存储类,未创建实例 players = [pg.Player for _ in range(player_amount)]
正确做法是调用类的构造函数(加括号)来创建实例:
# 正确写法:创建Player类的实例 players = [pg.Player() for _ in range(player_amount)]
2. 循环中访问对象的错误
在后续循环里,for i in players中的i是Player对象,不是列表索引。你用players[i]去访问元素会触发类型错误,因为列表索引必须是整数。另外players.index(i)的写法不够规范,建议用enumerate同时获取索引和对象:
修正后的循环代码:
while max(scoreboard) < max_points: # enumerate同时获取索引和对应Player对象 for player_idx, current_player in enumerate(players): print(f"Player {player_idx + 1}'s turn!") if input("Would you like to roll? ") != 'y': current_player.updateTotal() scoreboard[player_idx] = current_player.total_score else: current_player.playerTurn()
修正说明
- 用
pg.Player()替代pg.Player,确保列表中存储的是可调用方法的类实例 - 用
enumerate遍历,直接拿到每个玩家的索引和实例,避免索引和对象混淆的问题 - 直接通过
current_player调用方法,逻辑更直观,也避免了索引错误
内容的提问来源于stack exchange,提问作者Charlie Jandura
相关产品推荐
相关产品推荐

