Вопрос или проблема
Я получил код из интернета. Работаю с библиотекой 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")
для каждой отдельно обработанной клавиши, вам нужно добавить общий обработчик, который сработает при любом нажатии клавиш. В этом ответе я предоставлю вам полное объяснение и исправленный код.
Основные шаги для решения задачи:
-
Обработка событий клавиатуры: Используя события Pygame, мы можем отслеживать случаи нажатия клавиш.
-
Устранение дублирования кода: Вместо того чтобы повторять
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()
Объяснение изменений:
-
Обработка событий
KEYDOWN
: Мы добавили проверку на событиеKEYDOWN
, которое включает выполнениеprint("Hello")
. Это гарантирует, чтоHello
будет напечатано только один раз при каждом нажатии клавиши, а не при удерживании. -
Обработка движения: При этом код уже автоматически передвигает квадрат в зависимости от нажатых клавиш. Ваша логика остается, когда вы перемещаете объект, только теперь
print("Hello")
срабатывает отдельно.
Итоги:
Теперь ваша программа будет корректно отмечать любое нажатие клавиши и выводить "Hello" в консоль, когда клавиша будет нажата, независимо от направления, а также по-прежнему управлять движением квадрата. Эти изменения не только упростят ваш код, но и улучшат его эффективность, устраняя излишние вызовы print
.