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

CustomTkinter中create_rectangle绘制蛇身异常问题求助

解决贪吃蛇蛇身显示为细小白色像素的问题

核心问题分析

蛇身显示异常的根本原因有两个:

  • 新增蛇头尺寸错误:start函数中创建新蛇头时,误用BODY_PARTS(值为3)作为矩形宽高,而非定义好的SPACE_SIZE(值为50),导致新蛇头仅3x3像素,视觉上呈现为细小点。
  • 碰撞检测逻辑错误:hasCrashed函数中蛇撞墙时返回None,而非True,导致撞墙后无法触发游戏结束逻辑。

具体修复步骤

1. 修正蛇头尺寸计算

在Snake-Game.py的start函数中,找到创建蛇头的代码行:

snake.squares.insert(Head, canvas.create_rectangle(x, y, x+BODY_PARTS, y+BODY_PARTS, fill=SNAKE_COLOR))

将宽高参数替换为SPACE_SIZE,修改后:

snake.squares.insert(Head, canvas.create_rectangle(x, y, x+SPACE_SIZE, y+SPACE_SIZE, fill=SNAKE_COLOR))

确保新生成的蛇头和初始蛇身保持一致的50x50尺寸。

2. 修复碰撞检测逻辑

在Snake-Game.py的hasCrashed函数中,将撞墙时的返回值改为True:

def hasCrashed(snake: Snake):
    x, y = snake.coo[Head:=0]
    if (x < 0 or x >= WIDTH) or (y < 0 or y >= HEIGHT): 
        return True
    for part in snake.coo[Head+1:]:
        if x == part[0] and y == part[1]: 
            return True
    return False

保证蛇撞墙时能正确触发游戏结束流程。

3. 优化初始位置传递(可选)

restart函数中传递给Snake的location参数有误,原代码传递的是snake_position[0](单个数值),而Snake类预期接收坐标列表,修改为:

snake = Snake(board, current_size, SPACE_SIZE, SNAKE_COLOR, snake_position)

避免初始蛇身位置出现异常。

验证修复效果

修改后运行游戏,蛇身会呈现预期的绿色大尺寸方块,移动时新增蛇头保持一致大小,撞墙或撞自身都会正确触发游戏结束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:03:32