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
相关产品推荐
相关产品推荐

