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

