Как обнаружить нажатие любой клавиши в pygame? [закрыто]

Вопрос или проблема

Я получил код из интернета. Работаю с библиотекой pygame… Нужно, чтобы при нажатии любой клавиши происходил вывод print(“Hello”) или print(“Hello Hello”). Но это не работает. Я пытался вносить изменения, но это не дало никаких результатов. Просто нужно, чтобы любые клавиши только обнаруживались, и затем print("Hello"). Например, если я нажимаю: adsdnkajsndkjanskcnjaks клавиши, то после всех этих нажатий Linux должен сказать: print(“Hello”).

import pygame
pygame.init()
win = pygame.display.set_mode((500,500))
pygame.display.set_caption("Первая игра")
x = 50
y = 50
width = 40
height = 60
vel = 5
run = True
while run:
    pygame.time.delay(100)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        x -= vel
        print("Hello")
    if keys[pygame.K_RIGHT]:
        x += vel
        print("Hello")
    if keys[pygame.K_UP]:
        y -= vel
        print("Hello")
    if keys[pygame.K_DOWN]:
        y += vel
        print("Hello")
    win.fill((0,0,0))  # Заливает экран черным
    pygame.draw.rect(win, (255,0,0), (x, y, width, height))   
    pygame.display.update() 
pygame.quit()

Как видно, это слишком много print("Hello") в моей программе. Поэтому нужно всего одно сообщение для ВВЕРХ, ВНИЗ, ВЛЕВО, ВПРАВО. Я, конечно, хорошо описал свою проблему, и теперь вы можете помочь мне полностью вместо множества минусов, делая как вам нравится.

.

Ответ или решение

Чтобы отслеживать нажатие любой клавиши на клавиатуре в Pygame и выводить сообщение, вы можете немного изменить ваш код. Вместо многократного вызова print("Hello") для каждой отдельно обработанной клавиши, вам нужно добавить общий обработчик, который сработает при любом нажатии клавиш. В этом ответе я предоставлю вам полное объяснение и исправленный код.

Основные шаги для решения задачи:

  1. Обработка событий клавиатуры: Используя события Pygame, мы можем отслеживать случаи нажатия клавиш.

  2. Устранение дублирования кода: Вместо того чтобы повторять print("Hello") для каждой клавиши, мы создадим отдельную проверку, которая будет активироваться при всех нажатиях клавиш.

Исправленный код:

import pygame

# Инициализация Pygame
pygame.init()

# Настройки окна
win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Первоначальная игра")

# Инициализация переменных
x, y = 50, 50
width, height = 40, 60
vel = 5
run = True

# Основной цикл программы
while run:
    pygame.time.delay(100)  # Задержка на 100 мс

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:  # Проверка нажатия клавиши
            print("Hello")  # Вывод сообщения при нажатии любой клавиши

    # Получение состояния клавиш
    keys = pygame.key.get_pressed()

    # Обработка движения, если нажаты соответствующие клавиши
    if keys[pygame.K_LEFT]:  # Влево
        x -= vel
    if keys[pygame.K_RIGHT]:  # Вправо
        x += vel
    if keys[pygame.K_UP]:  # Вверх
        y -= vel
    if keys[pygame.K_DOWN]:  # Вниз
        y += vel

    # Обновление экрана
    win.fill((0, 0, 0))  # Заливка черным цветом
    pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))  # Отрисовка прямоугольника
    pygame.display.update()  # Обновление дисплея

# Завершение работы Pygame
pygame.quit()

Объяснение изменений:

  1. Обработка событий KEYDOWN: Мы добавили проверку на событие KEYDOWN, которое включает выполнение print("Hello"). Это гарантирует, что Hello будет напечатано только один раз при каждом нажатии клавиши, а не при удерживании.

  2. Обработка движения: При этом код уже автоматически передвигает квадрат в зависимости от нажатых клавиш. Ваша логика остается, когда вы перемещаете объект, только теперь print("Hello") срабатывает отдельно.

Итоги:

Теперь ваша программа будет корректно отмечать любое нажатие клавиши и выводить "Hello" в консоль, когда клавиша будет нажата, независимо от направления, а также по-прежнему управлять движением квадрата. Эти изменения не только упростят ваш код, но и улучшат его эффективность, устраняя излишние вызовы print.

Оцените материал
Добавить комментарий

Капча загружается...