Python Turtle赛跑游戏结束判定功能失效问题求助
问题根因
- 判定逻辑仅在程序初始化阶段执行了1次,后续玩家操控海龟移动时不会再重新触发判定,所以只有初始位置符合条件时才会有输出。
- 判定的数值逻辑存在错误:你写的
ycor()>= (-160) and ycor()<= (-240)是不可能成立的,-160大于-240,不存在数值同时满足这两个条件。
修复步骤
- 把游戏结束判定封装为独立函数,每次玩家操作海龟移动后,自动调用该函数检查是否到达终点
- 修正Y轴判定的区间逻辑,把大小关系反过来
- 可在判定成功后添加游戏结束的提示逻辑,取消按键监听避免后续无效操作
关键修改代码示例
# 新增游戏结束判定函数 def check_game_over(): # 修正后的判定逻辑,Y轴区间是-240到-160,X轴是0到11 if (-240 <= turtle.ycor() <= -160) and (0 <= turtle.xcor() <= 11): print("玩家1获胜") # 后续可以加胜利弹窗、停止监听等逻辑 return True if (-240 <= t1.ycor() <= -160) and (0 <= t1.xcor() <= 11): print("玩家2获胜") return True return False # 修改所有移动函数,移动后调用判定 def f(): fd(10) check_game_over() def b(): bk(10) check_game_over() def l(): left(10) check_game_over() def r(): right(10) check_game_over() def fo(): t1.fd(10) check_game_over() def ba(): t1.bk(10) check_game_over() def le(): t1.left(10) check_game_over() def ri(): t1.right(10) check_game_over()
额外优化建议
- 可以把原代码里重复定义的Screen实例删掉,你已经定义了wn和window两个重复的屏幕实例,保留一个就行
- 终点的坐标范围可以根据你实际画的赛道位置调整,避免出现判定区域和实际显示不符的情况
内容的提问来源于stack exchange,提问作者Nyconx
相关产品推荐
相关产品推荐

