Pygame应用无法按预期高亮光标下方的棋盘格子
问题原因
- 核心错误出在棋盘格颜色切换和高亮逻辑的耦合:你通过持续翻转
COLOR变量实现棋盘格交替着色,但当判定到光标所在格子时,你修改了全局的LIGHT、DARK变量值,会破坏后续所有格子的颜色翻转规则,导致非目标格子的着色也出现错乱。 - 冗余的嵌套事件循环:代码外层多写了一层无意义的
while True循环,虽不直接导致高亮异常,但属于代码结构错误。
修复思路
- 放弃用变量翻转判断棋盘格颜色,改用
(x + y) % 2的计算结果判断当前格子应该用浅色还是深色,逻辑更稳定不会出错。 - 高亮逻辑针对单个格子生效,不修改全局配色变量:对每个格子先判断是否为光标所在坐标,再选择对应的普通/高亮配色即可。
- 删掉冗余的外层循环,保留内层的游戏主循环即可。
修复后完整可运行代码
# 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
相关产品推荐
相关产品推荐

