首页 > 解决方案 > 将参数放在列表中并在定义中返回它们并带有索引

问题描述

我正在制作一个可以与 1 到 3 名玩家一起玩的游戏,在游戏开始之前,将询问用户有多少人在玩。我正在努力的部分是在屏幕上显示正确数量的玩家。我想出的想法如下。我创建了一个defcalled 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]
]

因此,当用户输入 2number of players for example时,程序将取出播放器的参数 for draw_text_2fromplayer_display并将它们放入其中,draw_text_2并且由于它在 while 循环内,它将继续显示,因为在 for 循环完成后num_players_playing will再次变为 2。不幸的是,这没有用,因为它给了我一个TypeErrorand 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

标签: python-3.xparameterspygametypeerror

解决方案


我假设您正在谈论的错误来自draw_text_2(i[x]). 为防止错误,请确保按照引发的异常的建议更正代码,并且确保x无论x是整数还是切片。

至于游戏逻辑,我认为我在那里看到了一个糟糕的模式。你有draw_text_2一种方法,对我来说,你有一种方法来处理玩家数量的每一种变化,这本质上是一种不好的做法。您希望draw_text尽可能通用,我不确定该函数内部是什么,但我建议您应该将玩家数量作为参数传递给函数,并根据该数字在函数内部做出一些决定.

我也看到你在做num_players_playing = 2,虽然我假设你想让玩家在游戏开始时选择玩家数量,并且有很多方法可以做到这一点。我不熟悉 PyGame,但命令行游戏的经典方法是询问用户的玩家数量,例如:

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

推荐阅读