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

Pygame应用无法按预期高亮光标下方的棋盘格子

问题原因
  • 核心错误出在棋盘格颜色切换和高亮逻辑的耦合:你通过持续翻转COLOR变量实现棋盘格交替着色,但当判定到光标所在格子时,你修改了全局的LIGHT、DARK变量值,会破坏后续所有格子的颜色翻转规则,导致非目标格子的着色也出现错乱。
  • 冗余的嵌套事件循环:代码外层多写了一层无意义的while True循环,虽不直接导致高亮异常,但属于代码结构错误。
修复思路
  1. 放弃用变量翻转判断棋盘格颜色,改用(x + y) % 2的计算结果判断当前格子应该用浅色还是深色,逻辑更稳定不会出错。
  2. 高亮逻辑针对单个格子生效,不修改全局配色变量:对每个格子先判断是否为光标所在坐标,再选择对应的普通/高亮配色即可。
  3. 删掉冗余的外层循环,保留内层的游戏主循环即可。
修复后完整可运行代码
# Setup
import pygame,sys
pygame.init()
WIDTH = 500
HEIGHT = 500
cell_size = 50
screen=pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption('HELP')
FPS=pygame.time.Clock()

DARK_GREEN = (76,175,79)
LIGHT_DARK_GREEN = (126,225,129)
LIGHT_GREEN = (139,195,74)
LIGHT_LIGHT_GREEN = (189,245,124)

def mouse_pos():
    mx,my = pygame.mouse.get_pos()
    mx = int(mx / cell_size)
    my = int(my / cell_size)
    return mx,my

# 删掉外层多余的while True循环,直接保留主循环
gameOver=False
while not gameOver:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    mx,my = mouse_pos()
    for x in range(0,10):
        for y in range(0,10):
            # 用x+y和的奇偶性判断基础色类型,逻辑固定不会出错
            is_light = (x + y) % 2 == 0
            # 仅针对当前格子判断是否需要高亮,不影响其他格子配色
            if mx == x and my == y:
                color = LIGHT_LIGHT_GREEN if is_light else LIGHT_DARK_GREEN
            else:
                color = LIGHT_GREEN if is_light else DARK_GREEN
            pygame.draw.rect(screen,color,(x*cell_size,y*cell_size,cell_size,cell_size))

    pygame.display.update()
    FPS.tick(60)

内容的提问来源于stack exchange,提问作者Léo Lepage

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:08