Как получить переменный ввод с клавиатуры в pygame?

#python #pygame

#python #pygame

Вопрос:

В моей игре, которую я придумал, я должен нажать клавишу, соответствующую выпадающей букве. Однако я не знаю функции, класса, оператора и т.д., Которые могли бы мне в этом помочь. Итак, Python выбирает случайную букву из списка, и я хочу знать, нажал ли игрок соответствующую ей клавишу. Если у игрока есть, это приведет к появлению другой буквы. Вот мой код:

 import pygame
import random
from pygame.locals import *

# Set the height and width of the screen
window_width = 700
window_height = 500
size = [window_width, window_height]
game_win = pygame.display.set_mode(size)

# Creating colors
white = (225, 225, 225)
black = (0, 0, 0)
gray = (100, 100, 100)

# Setting a font
pygame.font.init()
font = pygame.font.SysFont("consolas", 25)
large_font = pygame.font.SysFont("consolas", 80)

# Setting a window name
pygame.display.set_caption("Letters Game")


# Creating a messaging function
def message(sentence, color, x, y, font_type, display):
    sentence = font_type.render(sentence, True, color)
    display.blit(sentence, [x, y])


# Main function
def mainLoop():
    # Creating a letter list
    letters = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
    random_letter = random.choice(letters)

    # Initializing PyGame
    pygame.init()

    # variable to keep a loop going
    done = False

    y = 12
    y_moved = 0

    random_x = random.choice(list(range(50, 550)))

    # Starting a loop
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
            y_moved = 7

        y  = y_moved
        game_win.fill(black)

        message("Type the letter before it touches the line", white, 10, 10, font, game_win)

        pygame.draw.rect(game_win, white, [0, 450, 700, 5])

        message(random_letter, white, random_x, y, large_font, game_win)

        clock = pygame.time.Clock()
        clock.tick(25)
        pygame.display.flip()


if __name__ == "__main__":
    mainLoop()
  

Ответ №1:

Получите KEYDOWN событие и оцените .unicode атрибут события (см. Событие). Обратите внимание, поскольку ваши символы являются заглавными буквами, вы должны получить форму символа в нижнем регистре random_letter :

 def mainLoop():
    # [...]

    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
            y_moved = 7

            if event.type == pygame.KEYDOWN:
                if event.unicode == random_letter.lower():
                    print("correct")

    # [...]
  

Комментарии:

1. подождите, он делает это для каждой отдельной клавиши, поэтому, если буква «I» опускается и введите что-то еще, он все равно скажет «правильно»

2. Нет, я пробовал, это работает для каждой отдельной буквы.

3. Хорошо, возможно, я допустил ошибку. Редактировать=[Да, я допустил ошибку]