简体   繁体   中英

Pygame - black screen display

I've just started learning python. I am making space invader game and I don't know why, but every time I run the code, the display is black until i close it. I've checked the code and have not seen any errors. Maybe it is an easy and common problem but I can't solve it :/ Please, tell me what's wrong, I'd be really gratefull. Here's my code:

import math
import random

import pygame

# Intialaze the pygame
pygame.init()

# create the screen
screen = pygame.display.set_mode((600, 800))

# Title and Icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('battleship (1).png')
pygame.display.set_icon(icon)

score = 0

# Player

playerImg = pygame.image.load('battleship (2).png')

playerX = 275
playerY = 700
playerX_change = 0

# Enemy
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 6

for i in range(num_of_enemies):
    enemyImg.append(pygame.image.load('invader.png'))
    enemyX.append(random.randint(1, 525))
    enemyY.append(random.randint(50, 150))
    enemyX_change.append(0.3)
    enemyY_change.append(115)

# Bullet
bulletImg = pygame.image.load('bullet (3).png')

bulletX = 0
bulletY = 700
bulletY_change = 0.87
bullet_state = "ready"


def enemy(x, y, i):
    screen.blit((enemyImg[i]), (int(x), int(y)))


def player(x, y):
    screen.blit((playerImg), (int(x), int(y)))


def fire_bullet(x, y):
    global bullet_state
    bullet_state = "fire"
    screen.blit((bulletImg), (int(x + 16.0), int(y - 18.5)))


def isCollision(enemyX, enemyY, bulletX, bulletY):
    distance = math.sqrt((math.pow(enemyX - bulletX, 2)) + (math.pow(enemyY - bulletY, 2)))
    if distance < 26.8:
        return True
    else:
        return False


# game loop
running = True
while running:

    # RGB - Red, Green, Blue
    screen.fill((255, 255, 255))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # Player Movement
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                playerX_change = 0.3
            if event.key == pygame.K_LEFT:
                playerX_change = -0.3
            if event.key == pygame.K_SPACE:
                if bullet_state == "ready":
                    BulletX = playerX
                fire_bullet(playerX, bulletY)
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                PlayerX_change = 0

    # Player boundaries
    playerX += playerX_change
    if playerX <= 0:
        playerX = 0
    elif playerX >= 536:
        playerX = 536

    # Enemy Movement
    for i in range(num_of_enemies):
        enemyX[i] += enemyX_change[i]
        if enemyX[i] <= 0:
            enemyX_change[i] = 0.3
            enemyY[i] += enemyY_change[i]
        elif enemyX[i] >= 536:
            enemyX_change[i] = -0.3
            enemyY[i] += enemyY_change[i]
        # Collision
        collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY)
        if collision:
            bulletY = 700
            bullet_state = "ready"
            score += 1
            print(score)
            enemyX[i] = random.randint(1, 525)
            enemyY[i] = random.randint(50, 150)

        enemy(enemyX[i], enemyY[i], i)

# Bullet Movement
if bulletY <= 0:
    bulletY = 700
    bullet_state = "ready"

if bullet_state == "fire":
    fire_bullet(bulletX, bulletY)
    bulletY -= bulletY_change

player(playerX, playerY)
pygame.display.update()

I think your

screen.fill((255, 255, 255))

at line 78 is filling your screen with black. Try replacing it with :

pygame.display.update()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM