Gdg90
Gdg90

Reputation: 21

Why wont this blit on my screen?

I know this is going to be (hopefully) an easy fix, but I cannot get the gameover screen to blit on my screen. I have thought through this for the past two hours, and none of my tweaks are working. Any help would be greatly appreciated!

This file contains the main file loop as while as sprite group updates and general updates/renders for the program

import pygame, sys
import player
import random
import math 
from constants import * 
from bullet import *
from block import *


pygame.init()

screen = pygame.display.set_mode((800,600))

pygame.display.set_caption("Open")

clock = pygame.time.Clock()

def main():

  moveX = 0
  moveY = 0

  sprite_list = pygame.sprite.Group()
  bullet_list = pygame.sprite.Group()
  block_list = pygame.sprite.Group()

main_player = player.Player()
sprite_list.add(main_player)
main_player.rect.x = 400
main_player.rect.y = 550

for i in range(1,10):
        blocks = Block()
        blocks.center_x = random.randrange(760)
        blocks.center_y = random.randrange(400)
        blocks.radius = random.randrange(10,200)
        blocks.angle = random.random() * 4 * math.pi
        blocks.speed = 0.04
        block_list.add(blocks)
        sprite_list.add(blocks) 

font = pygame.font.Font(None, 36)
game_over = False
score = 0
level = 1

gameLoop = True
while gameLoop:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                moveX = 5
            if event.key == pygame.K_LEFT:
                moveX = -5
            if event.key == pygame.K_DOWN:
                moveY = 5
            if event.key == pygame.K_UP:
                moveY = -5
            if event.key == pygame.K_SPACE:
                bullets = Bullet()
                bullets.rect.x = main_player.rect.x + 16
                bullets.rect.y = main_player.rect.y + 16
                sprite_list.add(bullets)
                bullet_list.add(bullets)

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT and moveX >= 0:
                moveX = 0
            if event.key == pygame.K_LEFT and moveX <= 0:
                moveX = 0
            if event.key == pygame.K_DOWN and moveY >= 0:
                moveY = 0
            if event.key == pygame.K_UP and moveY <= 0:
                moveY = 0

    for bullets in bullet_list:
        block_hit_list = pygame.sprite.spritecollide(bullets, block_list, True)

        for block in block_hit_list:

            score += 1

            bullet_list.remove(bullets)
            sprite_list.remove(bullets)

            if bullets.rect.y < 0:
                bullet_list.remove(bullets)
                sprite_list.remove(bullets) 

    if pygame.sprite.spritecollide(main_player, block_list, True):
        gameLoop = False
        game_over = True

    sprite_list.update()
    screen.fill(BLACK)
    sprite_list.draw(screen)

    main_player.rect.x += moveX
    main_player.rect.y += moveY

    score_text = font.render("Score: "+str(score), True, WHITE)
    screen.blit(score_text,[10,10])

    level_text = font.render("Level: "+str(level), True, WHITE)
    screen.blit(level_text,[115,10])

    if game_over == True:
        you_lose_text = font.render("YOU SUCK", True, RED)
        screen.blit(you_lose_text, [300,300])
        pygame.time.wait(1000)
        break

    clock.tick(60)

    pygame.display.update()

pygame.quit()

if __name__ == "__main__":
main()

HERE IS MY ISSUE:

if game_over == True:

    you_lose_text = font.render("YOU SUCK", True, RED)
    screen.blit(you_lose_text, [300,300])
    pygame.time.wait(1000)
    break

I am getting no error, and the pygame.time.wait function is working correctly? Why is it just skipping over displaying the text?

Upvotes: 0

Views: 51

Answers (1)

furas
furas

Reputation: 142641

Maybe it is not the best solution but your code doesn't need better.

blit draws in buffer. You have to use update before wait to send data from buffer to screen.

    if game_over == True:
        you_lose_text = font.render("YOU SUCK", True, RED)
        screen.blit(you_lose_text, [300,300])

        pygame.display.update() # send on screen

        pygame.time.wait(1000)
        break

    clock.tick(60)

    pygame.display.update()

pygame.quit()

Upvotes: 1

Related Questions