hangert
@hangert
Prg L

Что не так в моём коде Python?

Я сделал всё, и форсил интернет и у ии спрашивал как исправить и перемещал код ...
Вот мой код полностью:

import pygame

# Initialize pygame
pygame.init()

# Set window size and title
screen_width, screen_height = 640, 480
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('Flappy Triangle')

# Set colors
red = pygame.Color(255, 0, 0)
blue = pygame.Color(0, 0, 255)
white = pygame.Color(255, 255, 255)

# Set font
font = pygame.font.Font(None, 36)

# Set main character size
character_size = 50

# Set gravity
gravity = 0.25

# Set main character initial position
character_x, character_y = screen_width / 2, screen_height / 2

# Set main character speed
character_speed = 0

# Set game over flag
game_over = False

# Set points
points = 0

# Set clock to control frame rate
clock = pygame.time.Clock()

while not game_over:
    # Handle events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                character_speed = -5
                points += 1  # Increase points by 1 for each jump

    # Update main character position
    character_y += character_speed
    character_speed += gravity

    # Check if main character has reached the bottom or top of the screen
    if character_y > screen_height or character_y < 0:
        points = 0  # Reset points to 0 when main character dies
        game_over = True

    # Draw the screen
    screen.fill((0, 0, 0))
    pygame.draw.polygon(screen, blue, [[character_x, character_y], [character_x + character_size, character_y + character_size / 2], [character_x, character_y + character_size]]) # n.m.
    pygame.draw.line(screen, red, (0, 0), (screen_width, 0), 5)
    pygame.draw.line(screen, red, (0, screen_height), (screen_width, screen_height), 5)
    points_text = font.render(f'Points: {points}', True, white)
    screen.blit(points_text, (10, 10))


    # Limit frame rate to 60 FPS
    clock.tick(60)
        
    # Update the screen
    pygame.display.flip()

    # Quit pygame
    pygame.quit()

_________
У меня везде правильно, кроме:
Выдаёт ошибку:
Скриншот удалён модератором.
- line 42, in
for event in pygame.event.get():
pygame.error: video system not initialized

Примечания:
У меня уже написано
# Initialize pygame
pygame.init()
Так что не прокатит.
И if event.type == pygame.QUIT: У меня правильный
Версия Python и Pygame подходящие.
Даже не смотрите на "while not game_over"
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
Denkuwus
@Denkuwus
15 y.o
Похоже, ошибка, с которой вы столкнулись, вызвана тем, что функция pygame.display.flip() вызывается до того, как режим отображения был установлен с помощью pygame.display.set_mode().

Чтобы решить эту проблему, вам нужно переместить вызов pygame.display.set_mode() перед вызовом pygame.display.flip(). Это гарантирует, что режим отображения будет установлен до обновления экрана, и устранит ошибку «видеосистема не инициализирована».

Вот пример того, как вы можете изменить код, чтобы исправить ошибку:

import pygame

# Initialize pygame
pygame.init()

# Set window size and title
screen_width, screen_height = 640, 480
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('Flappy Triangle')

# Set colors
red = pygame.Color(255, 0, 0)
blue = pygame.Color(0, 0, 255)
white = pygame.Color(255, 255, 255)

# Set font
font = pygame.font.Font(None, 36)

# Set main character size
character_size = 50

# Set gravity
gravity = 0.25

# Set main character initial position
character_x, character_y = screen_width / 2, screen_height / 2

# Set main character speed
character_speed = 0

# Set game over flag
game_over = False

# Set points
points = 0

# Set clock to control frame rate
clock = pygame.time.Clock()

while not game_over:
    # Handle events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                character_speed = -5
                points += 1 # Increase points by 1 for each jump

    # Update main character position
    character_y += character_speed
    character_speed += gravity

    # Check if main character has reached the bottom or top of the screen
    if character_y > screen_height or character_y < 0:
        points = 0 # Reset points to 0 when main character dies
        game_over = True

    # Draw the screen
    screen.fill((0, 0, 0))
    pygame.draw.polygon(screen, blue, [[character_x, character_y], [character_x + character_size, character_y + character_size / 2], [character_x, character_y + character_size]]) # n.m.
    pygame.draw.line(screen, red, (0, 0), (screen_width, 0), 5)
    pygame.draw.line(screen, red, (0, screen_height), (screen_width, screen_height), 5)
    points_text = font.render(f'Points: {points}', True, white)
    screen.blit(points_text, (10, 10))

    # Limit frame rate to 60 FPS
    clock.tick(60)

    # Update the screen
    pygame.display.flip()

# Quit pygame
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы