Python 为什么我的代码不能在列表之间来回切换?
我在游戏中有两个列表,我想在我的方法中切换 我正在做一个游戏,在某一点上,如果一个盒子坏了,屏幕上会打印出一种颜色——这些颜色以特定的顺序显示,并且在列表中。有3个级别:A、B和C。我设置了这个级别,以便在玩家的健康达到某一点时,级别切换为1。我希望列表在每次新关卡开始时切换。所以如果A层从A层开始,我希望B层切换到B层,C层切换回A层 我不知道为什么我的代码不起作用。我有if语句,这取决于玩家的健康状况,但切换没有发生 在这种情况下,代码框被“碎片”打破。BoxA和BoxB是列表。我认为会发生的是,当球员的健康低于20时,将使用BoxA。当玩家的健康状况高于20时,应使用方框B。当健康度超过40时,应再次使用BoxAPython 为什么我的代码不能在列表之间来回切换?,python,list,if-statement,methods,pygame,Python,List,If Statement,Methods,Pygame,我在游戏中有两个列表,我想在我的方法中切换 我正在做一个游戏,在某一点上,如果一个盒子坏了,屏幕上会打印出一种颜色——这些颜色以特定的顺序显示,并且在列表中。有3个级别:A、B和C。我设置了这个级别,以便在玩家的健康达到某一点时,级别切换为1。我希望列表在每次新关卡开始时切换。所以如果A层从A层开始,我希望B层切换到B层,C层切换回A层 我不知道为什么我的代码不起作用。我有if语句,这取决于玩家的健康状况,但切换没有发生 在这种情况下,代码框被“碎片”打破。BoxA和BoxB是列表。我认为会发生
hits = pg.sprite.groupcollide(self.boxs, self.shards, False, True)
hit_count = 0
for hit in hits:
font1 = pg.font.SysFont('comicsans', 100)
if BOXA[hit_count] == GRE:
text = font1.render('green', 1, (GREEN))
#self.effects_sounds['lose_sound'].play()
elif BOXA[hit_count] == BLU:
text = font1.render('blue', 1, (CYAN))
elif BOXB[hit_count] == YEL:
text = font1.render('yellow', 1, (YELLOW))
elif BOXB[hit_count] == RE:
text = font1.render('red', 1, (RED))
#self.effects_sounds['jackpot_sound'].play()
self.screen.blit(text, (250 -(text.get_width()/2),200))
pg.display.update()
i = 0
while i < 100:
pg.time.delay(10)
i += 1
for event in pg.event.get():
if event.type == pg.QUIT:
i = 301
pg.quit()
hit.health -= SHARD_DAMAGE
if self.player.health < 20:
self.player.health += 0
hit.health += BOXA.popleft()
hit_count += 1
print('lvl_A')
if self.player.health > 20 and self.player.health < 40:
hit.health += BOXB.popleft()
self.player.health += 0
print('lvl_B')
elif self.player.health > 40:
self.player.health += 0
hit.health += BOXA.popleft()
print('lvl_C')
我真的不知道为什么它没有切换,所以任何洞察都将不胜感激 我不知道是否理解您的问题,但我在代码中看到了一个问题 您应该设置变量
level = "A"
并改变它
if self.player.health < 20:
level = "A"
if self.player.health > 20 and self.player.health < 40:
level = "B"
elif self.player.health > 40:
level = "C"
if self.player.health < 20:
box = BOXA
if self.player.health > 20 and self.player.health < 40:
box = BOXB
elif self.player.health > 40:
box = BOXA
如果没有这个选项,它总是选中第一个列表BOXA,它总是找到它用来显示文本的颜色,它从不选中BOXB
或者你应该使用
box = BOXA
并改变它
if self.player.health < 20:
level = "A"
if self.player.health > 20 and self.player.health < 40:
level = "B"
elif self.player.health > 40:
level = "C"
if self.player.health < 20:
box = BOXA
if self.player.health > 20 and self.player.health < 40:
box = BOXB
elif self.player.health > 40:
box = BOXA
顺便说一句:你可以用颜色创建列表或字典
all_colors = {
GRE: (GREEN, "green")
BLU: (CYAN, "blue")
...
}
并使用此字典而不是if/elif选择颜色
使用printmessage查看使用了代码的哪一部分,并在变量中显示值。也许有不同的值,然后你期望或你有错误的缩进和一些代码从来没有使用。诡辩:当self.player.health等于20时会发生什么?当它达到B级时会发生什么?它应该以不同的颜色显示文本吗?当您显示文本时,您不检查级别,因此它总是从第一个在if/elif-if-BoxA[hit_count]==GRE:。也许最好使用变量level='B',并在显示文本时检查它。或者使用变量box=BOXA,当您更改级别时,设置box=BOXB,然后使用if-box[hit_count]==GRE:@Kingsley我尝试了一下-它只是忽略了其他级别-当它大于或等于20时,没有任何更改;使它只等于20,就不会切换级别。是的,这是我的观点-代码只检查>20和<20。其中一个检查可能在某个地方有a=。
all_colors = {
GRE: (GREEN, "green")
BLU: (CYAN, "blue")
...
}
color, name = all_colors[ box[hit_count] ]
text = font1.render(name, 1, color)