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

如何优化Python Pygame鼠标取色函数的多分支if判断代码

# 提前定义颜色映射规则,后续新增颜色直接加这里即可
COLOUR_MAP = [
    ((255, 255, None), "Yellow"),  # R=255、G=255时无论B值是多少都判定为黄,和原逻辑优先级保持一致
    ((255, None, None), "Red"),
    ((None, 255, None), "Green"),
    ((None, None, 255), "Blue"),
]

def colour_check_under_mouse():
    # 左键未按下直接返回,减少无效执行逻辑
    if not pygame.mouse.get_pressed()[0]:
        return
    mouse_pos = pygame.mouse.get_pos()
    # 用Surface实例直接调用get_at更符合Pygame常规写法
    colour_under_mouse = screen.get_at(mouse_pos)
    r, g, b, _ = colour_under_mouse  # 解包取RGB分量,忽略alpha通道
    
    # 遍历映射表匹配颜色,匹配到直接处理
    for (r_rule, g_rule, b_rule), colour_name in COLOUR_MAP:
        if (r_rule is None or r == r_rule) and (g_rule is None or g == g_rule) and (b_rule is None or b == b_rule):
            print(colour_name)
            # 后续要替换业务逻辑直接改这里就行,不用动判断规则
            break
    else:
        # 兜底未匹配到颜色的场景,方便调试
        print("Unknown colour")
优化说明
  • 用规则映射表替代多层elif:后续要新增颜色判断规则,只需要在COLOUR_MAP里加一条配置就行,不用改动逻辑代码,避免了多层条件嵌套的冗余,维护成本极低。
  • 提前判断触发条件:函数开头先判断左键有没有按下,没按下直接返回,减少不必要的坐标获取、颜色读取操作。
  • 修正代码规范问题:修复了原代码的缩进错误,对返回的颜色值做解包处理,代码可读性更高。
  • 逻辑解耦:颜色判断和后续的结果处理拆分,之后要把print改成你Mastermind游戏里的业务逻辑,直接修改匹配到颜色后的代码块就行,不用调整判断规则部分。
  • 新增兜底处理:避免遇到不在你预设规则里的颜色时没有任何反馈,方便调试阶段定位问题。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:04