pygame просто отображает черный экран - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь заставить эту игру работать, но она просто показывает черный экран. это простая игра, в которой вы просто избегаете падающих блоков. Я просмотрел связанные вопросы, но ни один из ответов у меня не сработал. Он говорит, что мне нужно добавить больше деталей, поэтому, надеюсь, этой строки будет достаточно, потому что idk, что еще написать в этой строке, чтобы добавить детали к моему сообщению. мой код:

import pygame
import random
import sys
pygame.init()
WIDTH = 800
HEIGHT = 600

PLAYER_COLOR = (200,0,0)
ENEMY_COLOR = (0,200,0)
BACKGROUND_COLOR = (0,120,150)

player_size = 50

player_pos = [WIDTH/2, HEIGHT-2*player_size]

enemy_size = 50
enemy_pos = [random.randint(0,WIDTH-enemy_size),0]
enemy_list = [enemy_pos]

SPEED = 5
screen = pygame.display.set_mode((WIDTH,HEIGHT))

game_over = False

score = 0

clock = pygame.time.Clock

def drop_enemies(enemy_list):
    if len(enemy_list) < 10:
        x_pos = random.randint(0,WIDTH-enemy_size)
        y_pos = 0
        enemy_list.append([x_pos, y_pos])

def draw_enemies(enemy_list):
    for enemy_pos in enemy_list:
        pygame.draw.rect(screen, ENEMY_COLOR, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))

def update_enemy_position(enemy_list, score):
    for idx, enemy_pos in enumerate(enemy_list):
        if enemy_pos[1] >= 0 and enemy_pos[1] < HEIGHT:
            enemy_pos[1] += SPEED
        else:
            enemy_list.pop(idx)
            score += 1
    return score

def collision_check(enemy_list, player_pos):
    for enemy_pos in enemy_list:
        return True
    return False




def detect_collision(player_pos, enemy_pos):
    p_x = player_pos[0]
    p_y = player_pos[1]

    e_x = enemy_pos[0]
    e_y = enemy_pos[1]

    if e_x >= p_x and e_x < (p_x + player_size) or p_x >= e_x and p_x < (e_x+enemy_size):
        if e_y >= p_y and e_y < (p_y + player_size) or p_y >= e_y and e_y < (e_y+enemy_size):
            return True
    return False

while not game_over:
    screen.fill(BACKGROUND_COLOR)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == pygame.KEYDOWN:
            x = player_pos[0]
            y = player_pos[1]

            if event.key == pygame.K_LEFT:
                x -= player_size
            elif event.key == pygame.K_RIGHT:
                x += player_size

            player_pos = [x,y]

    drop_enemies(enemy_list)
    update_enemy_position(enemy_list, score)
    if collision_check(enemy_list, player_pos):
        game_over = True
        break

    draw_enemies(enemy_list)
    pygame.draw.rect(screen, ENEMY_COLOR, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))
    pygame.draw.rect(screen, PLAYER_COLOR, (player_pos[0], player_pos[1], player_size, player_size))
    clock.tick(30)
    pygame.display.update()

1 Ответ

2 голосов
/ 17 июня 2020
• 1000 Вероятно, это должно выглядеть так:
def collision_check(enemy_list, player_pos):
    for enemy_pos in enemy_list:
        if detect_collision(player_pos, enemy_pos):
            return True
    return False

Прямо сейчас он всегда возвращает True, и поэтому ваша игра завершается, прежде чем что-либо рисовать, отсюда черный экран.

Edit:

Я заметил, что в коде есть еще две довольно простые опечатки. Я тоже собирался указать на них. Однако кое-что меня поразило в природе ошибок. Это похоже на задание: «Найдите три ошибки в этом коде и заставьте его работать». Если это действительно ваш код, мы будем рады помочь, но если это домашнее задание, мы не помогаем вам, выполняя его за вас, вместо того, чтобы вы учились, выполняя его.

Предыдущую ошибку было довольно легко найти, как и две оставшиеся. Остальное попробуйте отладить. Я рекомендую использовать IDE для отладки, а не только для запуска сценария. Есть много хороших бесплатных IDE, которые могут значительно облегчить вам программирование и, в частности, отладку.

...