My pygame game has the problem of skipping lines

my code skips lines wenn i do the death screen

import random
import pygame
import time
boss=0
bosscolor=0,0,0
bossheigt=720
heart1=255,0,0
heart2=255,0,0
heart3=255,0,0
heart_lost_counter=0

# pygame setup
pygame.init()
screen = pygame.display.set_mode((1280, 720))
clock = pygame.time.Clock()
running = True
dt = 0
pygame.mouse.set_cursor(*pygame.cursors.broken_x)

#creating the positions
heart_pos1 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
heart_pos1.y = 10
heart_pos1.x = 10
heart_pos2 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
heart_pos2.y = 10
heart_pos2.x = 20
heart_pos3 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
heart_pos3.y = 10
heart_pos3.x = 30
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
projektile_pos1 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)


while running:
    # poll for event
    # pygame.QUIT event means the user clicked X to close your window
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # fill the screen with a color to wipe away anything from last frame
    screen.fill("black")

#drawing the stuff
    boss_zone = pygame.draw.rect(screen,bosscolor,(560,bossheigt,120,120))
    player_zone = pygame.draw.rect(screen,"red",(player_pos.x-20,player_pos.y-20 , 40, 40))
    pygame.draw.circle(screen, "black", player_pos, 5)
    pygame.draw.circle(screen, "white", player_pos, 1)
    
    pygame.draw.circle(screen,heart1,heart_pos1,5)
    pygame.draw.circle(screen,heart2,heart_pos2,5)
    pygame.draw.circle(screen,heart3,heart_pos3,5)
    

#developer code
    keys = pygame.key.get_pressed()
    if keys[pygame.K_p]:
        print(player_pos)
    if keys[pygame.K_b]:
        boss=20
    
    #player code
    if keys[pygame.K_w]:
        player_pos.y -= 100 * dt

    if keys[pygame.K_s]:
        player_pos.y += 100 * dt

    if keys[pygame.K_a]:
        player_pos.x -= 100 * dt

    if keys[pygame.K_d]:
        player_pos.x += 100 * dt


    

    #enemy code
   removed for post
    #boss code
    if boss==20:
        bosscolor=255,0,0
        if bossheigt>300:
            bossheigt=bossheigt-1
    if player_zone.colliderect(boss_zone):
        if heart_lost_counter==0:
            heart3=0,0,0
            heart_lost_counter=1
    if player_zone.colliderect(boss_zone):
        if heart_lost_counter==1:
            heart2=0,0,0
            heart_lost_counter=2
    if player_zone.colliderect(boss_zone):
        if heart_lost_counter==2:
            screen.fill("red")
            boss=0
            bosscolor=0,0,0
            bossheigt=720
            heart1=255,0,0
            heart2=255,0,0
            heart3=255,0,0
            heart_lost_counter=0
            time.sleep(10)

I briefly see some lines in the red screen, but they quickly get filled out. Is that just an artefact of pygame’s rendering, or my LCD screen?

Complete working example:

import random
import pygame
import time
boss=0
bosscolor=0,0,0
bossheigt=720
heart1=255,0,0
heart2=255,0,0
heart3=255,0,0
heart_lost_counter=0

# pygame setup
pygame.init()
screen = pygame.display.set_mode((1280, 720))
clock = pygame.time.Clock()
running = True
dt = 0
pygame.mouse.set_cursor(*pygame.cursors.broken_x)

#creating the positions
heart_pos1 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
heart_pos1.y = 10
heart_pos1.x = 10
heart_pos2 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
heart_pos2.y = 10
heart_pos2.x = 20
heart_pos3 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
heart_pos3.y = 10
heart_pos3.x = 30
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
projektile_pos1 = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)


while running:
    pygame.display.flip()
    # poll for event
    # pygame.QUIT event means the user clicked X to close your window
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # fill the screen with a color to wipe away anything from last frame
    screen.fill("black")

#drawing the stuff
    boss_zone = pygame.draw.rect(screen,bosscolor,(560,bossheigt,120,120))
    player_zone = pygame.draw.rect(screen,"red",(player_pos.x-20,player_pos.y-20 , 40, 40))
    pygame.draw.circle(screen, "black", player_pos, 5)
    pygame.draw.circle(screen, "white", player_pos, 1)
    
    pygame.draw.circle(screen,heart1,heart_pos1,5)
    pygame.draw.circle(screen,heart2,heart_pos2,5)
    pygame.draw.circle(screen,heart3,heart_pos3,5)
    

#developer code
    keys = pygame.key.get_pressed()
    if keys[pygame.K_p]:
        print(player_pos)
    if keys[pygame.K_b]:
        boss=20
    
    #player code
    if keys[pygame.K_w]:
        player_pos.y -= 100 * dt

    if keys[pygame.K_s]:
        player_pos.y += 100 * dt

    if keys[pygame.K_a]:
        player_pos.x -= 100 * dt

    if keys[pygame.K_d]:
        player_pos.x += 100 * dt


    

    #enemy code
    #removed for post
    #boss code
    if boss==20:
        bosscolor=255,0,0
        if bossheigt>300:
            bossheigt=bossheigt-1
    if player_zone.colliderect(boss_zone):
        if heart_lost_counter==0:
            heart3=0,0,0
            heart_lost_counter=1
    if player_zone.colliderect(boss_zone):
        if heart_lost_counter==1:
            heart2=0,0,0
            heart_lost_counter=2
    if player_zone.colliderect(boss_zone):
        if heart_lost_counter==2:
            screen.fill("red")
            boss=0
            bosscolor=0,0,0
            bossheigt=720
            heart1=255,0,0
            heart2=255,0,0
            heart3=255,0,0
            heart_lost_counter=0
            
            pygame.display.flip()  # Show red screen
            time.sleep(10)
            
    dt = clock.tick(60) / 1000  # Limits to 60 FPS and converts to seconds

Quite fun. Cheers:

Recording 2025-12-31 103946