#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. Хорошо, возможно, я допустил ошибку. Редактировать=[Да, я допустил ошибку]