Помещение параметров в список и возврат их в определение с индексированием - PullRequest
0 голосов
/ 15 декабря 2018

Я делаю игру, в которую могут играть от 1 до 3 игроков. Перед началом игры у пользователя спросят, сколько человек играет.Часть, с которой я борюсь - это отображение нужного количества игроков на экране.Я создал def с именем draw_text_2, который печатает статистику игроков на правильной позиции поверхности с размером и цветом текста и позициями x и y.После этого я поместил параметры для рисования текста каждого игрока в список.

player_1 = [100,0,0,0], player_2 = [100,0,0,0], player_3 = [100,0,0,0]



draw_text_2(surface, text, size, color, x, y):
   Draw text to surface
   surface - Pygame surface to draw to
   text    - string text to draw
   size    - font size
   color   - color of text
   x       - x position of text on surface
   y       - y position of text on surface









 player_display = [
[win,'Player 1     '+'Health: ' + str(player_1[0])+'  Damage:  ' + str(player_1[1])+'    Armour:  '+str(player_1[2])+'   postition: '+str(player_1[3]),10,(0,0,0),10,20]
[win,'Player 2     '+'Health: ' + str(player_2[0])+'  Damage:  ' + str(player_2[1])+'    Armour:  '+str(player_2[2])+'   postition: '+str(player_2[3]),10,(0,0,0),10,120]
[win,'Player 3     '+'Health: ' + str(player_3[0])+'  Damage:  ' + str(player_3[1])+'    Armour:  '+str(player_3[2])+'   postition: '+str(player_3[3]),10,(0,0,0),10,220]
]

Таким образом, когда пользователь вводит 2 number of players for example, программа извлекает параметры игроков для draw_text_2 из player_display и помещает их в draw_text_2, и так какнаходится внутри цикла while, он будет отображаться, потому что после завершения цикла for num_players_playing will снова станет 2.Это не сработало, к сожалению, потому что это дало мне TypeError и list indices must be integers or slices, not tuple.Вопрос в том, как я могу предотвратить эту ошибку, чтобы сделать этот метод, и есть ли другой способ, если TypeError не может быть решена?

while True:
       num_players_playing = 2
       while num_players_playing > 0:
             for i in player_display:
                 draw_text_2(i[x])
             num_players_playing -= 1

1 Ответ

0 голосов
/ 15 декабря 2018

Я предполагаю, что ошибка, о которой вы говорите, произошла от draw_text_2(i[x]).Чтобы предотвратить ошибку, убедитесь, что вы исправили код в соответствии с предложенным повышенным исключением, и это означает, что x, независимо от того, x является целым числом или срезом.

Что касаетсяигровая логика, я думаю, я вижу там плохую картину.У вас есть метод draw_text_2, который для меня выглядит так, будто у вас есть метод для каждой вариации количества игроков, что по сути является плохой практикой.Вы хотите сделать draw_text как можно более универсальным, и я не уверен, что находится внутри этой функции, но я рекомендую вам передать количество игроков в функцию в качестве аргумента и принять некоторые решения в зависимости от функциина это число.

Я также вижу, что вы делаете num_players_playing = 2, хотя я предполагаю, что вы хотите позволить игрокам выбирать количество игроков в начале игры, и есть несколько способов сделатьэтот.Я не знаком с PyGame, но классический подход к играм из командной строки заключается в том, чтобы спросить пользователя о количестве игроков, например:

number_of_players = input("How many players?: ")
...