目前我正在研究一个小型太空入侵者'使用pygame的风格游戏,我想根据分数/健康水平创建各种结果。我想这样做,如果敌人的船只已经通过了玩家并且玩家尚未达到70的分数限制以通过该等级,我想显示一条消息,说明目标分数未得到满足。
到目前为止,我有这个代码,我认为应该允许这种情况发生:
if block.rect.y == random.randrange(600) and health >=25 and score < 70:
font = pygame.font.Font("freesansbold.ttf", 30)
label = font.render("Score target not met", 1, (0,255,0))
labelRect = label.get_rect()
labelRect.center = (400, 250)
break
这里有更详细的说明:
for bullet in bullet_list:
block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True)
for block in block_hit_list:
explosion.play()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
score += 10
if health >= 25 and score == 70:
win.play()
font = pygame.font.Font("freesansbold.ttf", 30)
label = font.render("LEVEL COMPLETE!", 1, (0,255,0))
labelRect = label.get_rect()
labelRect.center = (400, 250)
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
break
if block.rect.y == random.randrange(600) and health >=25 and score < 70 and score > 0:
font = pygame.font.Font("freesansbold.ttf", 30)
label = font.render("Score target not met", 1, (0,255,0))
labelRect = label.get_rect()
labelRect.center = (400, 250)
break
if score >= 70:
collision.stop()
laser.stop()
explosion.stop()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
block_list.remove(block)
all_sprites_list.remove(block)
player_list.remove(player)
all_sprites_list.remove(player)
if health == 0:
laser.stop()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
if bullet.rect.y < -10:
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
然而,一旦我执行此代码,一旦敌人的船只通过,实际上没有任何文本粘贴到窗口上。
继续我的完整代码,任何人都知道为什么会发生这种情况:
答案 0 :(得分:1)
我可以看到一些问题。首先,你不应该检查
内屏幕上的敌人for bullet in bullet_list:
for block in block_hit_list:
你应该在主循环上创建一个新行。
其次,每次打电话
random.randrange(600)
你会在0到600之间得到一个新的随机数。因此,如果阻止在屏幕上,则以下代码的运行几率为百分之六。如果块出现在屏幕上,则有0%的几率。相反,写
if block.rect.y >= 600:
所以整个事情应该是这样的:
for bullet in bullet_list:
block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True)
for block in block_hit_list:
explosion.play()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
score += 10
if health >= 25 and score == 70:
win.play()
font = pygame.font.Font("freesansbold.ttf", 30)
label = font.render("LEVEL COMPLETE!", 1, (0,255,0))
labelRect = label.get_rect()
labelRect.center = (400, 250)
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
break
if score >= 70:
collision.stop()
laser.stop()
explosion.stop()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
block_list.remove(block)
all_sprites_list.remove(block)
player_list.remove(player)
all_sprites_list.remove(player)
if health == 0:
laser.stop()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
if bullet.rect.y < -10:
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
if block.rect.y >= 600 and health >=25 and score < 70 and score > 0:
font = pygame.font.Font("freesansbold.ttf", 30)
label = font.render("Score target not met", 1, (0,255,0))
labelRect = label.get_rect()
labelRect.center = (400, 250)
希望有所帮助!