能否将pygame中的event.key与自定义随机变量做匹配判断?
问题原因
- 你构造的
key2是字符串和数字组成的元组,而pygame.KEYDOWN事件触发时返回的event.key是整数类型的按键常量,二者类型、值都不匹配,无法完成校验 - 获胜文本的渲染逻辑写在事件回调内,仅会在按键触发的那一帧显示,下一帧窗口重绘填充白色后就会被覆盖,用户看不到获胜提示
实现说明
event.key完全可以和自定义变量做匹配,只要保证变量存储的是对应按键的pygame常量值即可,你可以选择以下两种任意一种方案实现校验逻辑:
方案1:匹配pygame数字按键常量
pygame预定义的pygame.K_0到pygame.K_9常量是连续递增的整数,直接用随机数做偏移计算出目标按键值即可
方案2:匹配按键输入字符
直接用event.unicode获取按键对应的实际输入字符,转成整数后直接和随机数对比,写法更简单,不需要计算常量偏移
修改后的完整可运行代码
import pygame import sys import random pygame.init() key = random.randint(0,9) # 方案1:计算目标按键常量,也可以换成方案2的校验逻辑 target_key = pygame.K_0 + key # 增加获胜状态标记,保证获胜提示持续显示 won_flag = False window = pygame.display.set_mode((300, 300)) pygame.display.set_caption('数字匹配小游戏') font_color = (0, 150, 250) font_obj = pygame.font.SysFont('forte', 25) text_obj = font_obj.render(str(key), True, font_color) won = font_obj.render('you won', True, font_color) while True: window.fill((255,255,255)) window.blit(text_obj,(22,0)) # 获胜状态下渲染提示 if won_flag: window.blit(won,(22,50)) for event in pygame.event.get(): if event.type==pygame.QUIT: pygame.quit() sys.exit() if event.type==pygame.KEYDOWN and not won_flag: # 方案1校验逻辑,和常量匹配 if event.key == target_key: won_flag = True print('you won') # 方案2校验逻辑,二选一即可,注释掉上面的判断启用下面这段即可 # if event.unicode.isdigit() and int(event.unicode) == key: # won_flag = True # print('you won') pygame.display.update()
内容的提问来源于stack exchange,提问作者Loaphs
相关产品推荐
相关产品推荐

