Итак, я практиковался с ООП в Python и решил взять программу, которую написал ранее, и обновить ее с использованием методологии ООП. По сути, это игра, в которой вас спросят, со сколькими игроками вы играете, сгенерирует список, используя понимание, и отобразит его в виде табло. Сейчас я использую ООП для запуска всех команд поворота игрока и пытаюсь создать несколько объектов игрока, используя понимание списка.

Код, используемый для генерации игроков, выглядит следующим образом:

player_amount = int(input("How many players would you like to play with? "))
max_points = int(input("How many points would you like to play to? "))
scoreboard = [0 for _ in range(player_amount)]
players = [pg.Player for _ in range(player_amount)]

Код проблемы — это следующий блок, в котором я пытаюсь получить к ним доступ, чтобы запустить команду playerTurn:

while max(scoreboard) < max_points:
        for i in players:

            print(f"Player {players.index(i) + 1}'s turn!")

            if input("Would you like to roll? ") != 'y':
                players[i].updateTotal()
                scoreboard[i] = players[i].total_score
            else:
                players[i].playerTurn()

Используя этот код, я вижу, что список на самом деле генерирует и хранит несколько объектов из моего класса Player, но когда дело доходит до доступа к ним и управления ими, у меня возникают проблемы.

0
Charlie Jandura 16 Сен 2023 в 20:40
1
Какой у Вас вопрос? Какие проблемы у вас есть?
 – 
mkrieger1
16 Сен 2023 в 20:41
1
Будет ли более понятно, если вместо этого вы сделаете for player in players:?
 – 
Tim Roberts
16 Сен 2023 в 20:44

1 ответ

Проблема 1. Создание объектов Player В строке player = [pg.Player for _ in range(player_amount)] вы фактически не создаете новые экземпляры Player; вы сохраняете сам класс Player в списке несколько раз. Чтобы создать новые экземпляры, вам следует вызвать конструктор, например: player = [pg.Player() for _ in range(player_amount)].

Проблема 2. Доступ к объектам Player в цикле. В цикле вы используете i как сам объект, а не индекс. Это вызывает проблему в таких строках, как player[i].updateTotal() и Scoreboard[i] = player[i].total_score.

player_amount = int(input("How many players would you like to play with? "))

Max_points = int(input("Сколько очков вы хотели бы сыграть?")) Scoreboard = [0 for _ in range(player_amount)]

Создание экземпляров игрока

Игроки = [pg.Player() для _ в диапазоне (player_amount)]

While max(табло) < max_points: для i игрок в перечислении(игроки):

    print(f"Player {i + 1}'s turn!")

    if input("Would you like to roll? ") != 'y':
        player.updateTotal()
        scoreboard[i] = player.total_score
    else:
        player.playerTurn()

Вот ключевые изменения:

Экземпляры Player создаются с помощью pg.Player() в списке игроков. Функция enumerate используется в цикле for для получения индекса i и объекта Player.

0
Arasalan Shaikh 16 Сен 2023 в 20:51