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

如何在Python中使用turtle库实现海龟受击闪烁特效

海龟对战模拟器受击闪烁效果实现方案

原有代码问题梳理

  • hideturtle()、showturtle()方法不支持传入时间参数,你原有代码里传的20、10属于无效参数,无法控制闪烁时长
  • 命令行input()会阻塞turtle窗口的渲染进程,就算闪烁逻辑写对了也看不到效果
  • 末尾调用trtl.Screen()和导入的turtle模块不匹配,会直接报错
  • 代码缩进存在错误,if userBlue == 0的缩进层级和上层while循环不匹配

实现逻辑

宝可梦的受击闪烁本质是目标快速交替显隐/变色,我们可以封装一个通用的闪烁函数,通过控制显隐的间隔和次数来还原这个效果,同时修复原有代码的错误。

完整可运行代码

import turtle
import time

# 绘制标题
pen = turtle.Turtle()
pen.hideturtle()
pen.penup()
pen.goto(-300,100)
pen.write("A Turtle Fight Simulator" , font=("Times New Roman", 40, "normal"))

# 创建蓝色玩家海龟
Blueturtle = turtle.Turtle()
Blueturtle.shape("turtle")
Blueturtle.color("blue")
Blueturtle.penup()
Blueturtle.goto(-200,0)
Blueturtle.speed(10)

# 创建红色玩家海龟
Redturtle = turtle.Turtle()
Redturtle.shape("turtle")
Redturtle.left(180)
Redturtle.color("red")
Redturtle.penup()
Redturtle.goto(100,0)
Redturtle.speed(100)

bluepoints = 300
redpoints = 300

# 受击闪烁函数
def blink_when_hit(target_turtle, blink_times=3, interval=0.15):
    for _ in range(blink_times):
        target_turtle.hideturtle()
        turtle.update()
        time.sleep(interval)
        target_turtle.showturtle()
        turtle.update()
        time.sleep(interval)
    # 额外闪白效果可选,取消注释即可启用,更接近宝可梦受击效果
    # original_color = target_turtle.color()[0]
    # target_turtle.color("white")
    # turtle.update()
    # time.sleep(0.1)
    # target_turtle.color(original_color)
    # turtle.update()

# 游戏主循环
keepPlaying = True
while keepPlaying:
    # 这里先用命令行输入测试,后续可以换成turtle.textinput避免阻塞界面
    userBlue = int(input("UserBlue - Pick a number between 0 and 9 to use a move:"))
    userRed = int(input("UserRed - Pick a number between 0 and 9 to use a move:"))

    if userBlue == 0:
        Blueturtle.forward(300)
        # 调用闪烁函数
        blink_when_hit(Redturtle, blink_times=4)
        Blueturtle.backward(300)
        print("It's not very effective...")
        print("The red turtle lost 30 hitpoints!")
        redpoints = redpoints - 30
        print("Red turtle now has", redpoints , "hitpoints")
    
    # 可自行补充红方攻击逻辑、血量清零结束游戏逻辑
    if redpoints <=0 or bluepoints <=0:
        keepPlaying = False
        winner = "Blue" if redpoints <=0 else "Red"
        print(f"Game Over! {winner} turtle win!")


wn = turtle.Screen()
wn.mainloop()

可调参数说明

  • 调整blink_when_hit函数的blink_times参数可以修改闪烁次数,调整interval参数可以修改每次闪烁的间隔时长,数值越大闪烁速度越慢
  • 后续如果要做全界面操作,把input替换为turtle.textinput("输入指令", "请输入0-9的数字")就不会阻塞turtle窗口的显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:15:05