我正在制作一个可以由1到3个玩家玩的游戏,在游戏开始之前,系统将询问用户有多少人在玩。我正在努力的部分是在屏幕上显示正确的玩家数量。我想到的想法如下。我创建了一个名为def
的{{1}},它会在文字的大小和颜色以及x和y位置的正确位置上打印球员的状态。之后,我将用于绘制每个玩家的文本的参数放在列表中。
draw_text_2
因此,当用户输入2 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]
]
时,程序将从number of players for example
中取出draw_text_2
的播放器参数,并将其放在player_display
内,然后由于它位于while循环中,因此将继续显示,因为在完成for循环之后draw_text_2
再次变为2。不幸的是,这没有用,因为它给了我num_players_playing will
和TypeError
。问题是,如何解决这个错误,才能解决此问题?如果无法解决list indices must be integers or slices, not tuple
,还有另一种方法吗?
TypeError
答案 0 :(得分:0)
我假设您正在谈论的错误来自draw_text_2(i[x])
。为防止发生错误,请确保按照引发的异常所建议的那样更正代码,并确保x
(无论x
是什么)都是整数或切片。
关于游戏逻辑,我认为我在那里看到了一个糟糕的模式。您拥有draw_text_2
方法,对我来说,您似乎拥有一种针对每个玩家数量变化的方法,这实际上是一种不好的做法。您想使draw_text
尽可能通用,但我不确定该函数内部有什么,但是我建议您应该将播放器的数量作为参数传递给该函数,并在函数内部做出一些决定。该号码的功能。
我还看到您正在做num_players_playing = 2
,尽管我假设您想让玩家在游戏开始时选择玩家人数,并且有很多方法可以做到这一点。我对PyGame不熟悉,但是经典的命令行游戏方法是向用户询问像这样的玩家数量:
number_of_players = input("How many players?: ")