You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:24:05