小能豆

为什么当我的 Python 尝试运行 turtle 模块中的 turtle.tracer() 方法时它一直崩溃?

py

我正在使用海龟模块编写一个贪吃蛇游戏,但是当我将这一行添加到我的代码中时,海龟屏幕和 Python 崩溃了:

turtle.tracer(0)

有人能帮我完成游戏吗?非常感谢

我的代码:

from turtle import Turtle, Screen, colormode


screen = Screen()
screen.bgcolor("black")
screen.setup(width=600, height=600)
screen.title("My Snake Game")
screen.tracer(0)
x = 0

segments = []

for turtle in range(3):
    turtle = Turtle("square")
    turtle.color("white")
    turtle.penup()
    turtle.goto(0-x, 0)
    x += 20

    segments.append(turtle)


game_is_on = True
screen.update()
while game_is_on:
    for segment in segments:
        segment.forward(20)


screen.exitonclick()

阅读 18

收藏
2024-12-11

共1个答案

小能豆

在你的代码中,screen.tracer(0) 用于关闭海龟的自动更新,并允许你手动控制屏幕更新。然而,调用 screen.update() 后,你并没有重新开启屏幕更新,导致图形没有正确显示。此外,你创建的海龟对象名为 turtle,这和模块 turtle 的名称冲突,可能也导致问题。

你可以做如下修改来解决问题:

  1. 修改变量名,以避免和 turtle 模块冲突。
  2. 使用 screen.update() 适当地更新屏幕。
  3. 在游戏循环中添加 screen.update(),每次渲染后手动更新屏幕。

修改后的代码如下:

from turtle import Turtle, Screen

screen = Screen()
screen.bgcolor("black")
screen.setup(width=600, height=600)
screen.title("My Snake Game")
screen.tracer(0)  # 关闭自动更新

x = 0
segments = []

# 创建蛇的初始段
for _ in range(3):
    segment = Turtle("square")
    segment.color("white")
    segment.penup()
    segment.goto(0 - x, 0)
    x += 20
    segments.append(segment)

game_is_on = True

while game_is_on:
    for segment in segments:
        segment.forward(20)

    screen.update()  # 手动更新屏幕

screen.exitonclick()

关键修改点:

  • turtle 改成了 segment,避免与模块名称冲突。
  • 在每次循环结束后调用 screen.update() 来更新屏幕。
  • 保留了 screen.tracer(0),并且确保在屏幕更新时使用 screen.update() 来显示变动。

这样应该可以正常运行你的贪吃蛇游戏了。如果你有其他问题或进一步的修改需求,随时告诉我!

2024-12-11