使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个"海龟"(Turtle)对象在屏幕上移动和绘制图形,支持诸如前进、后退、左转、右转等操作。此外,Turtle还支持设置颜色等功能。

现在,使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制时,小海龟并沿路径移动。

源码如下:

python 复制代码
# 鼠标左键绘制路径,用鼠标右键结束绘制时,小海龟并沿路径移动。
import turtle
import math

# 全局变量
screen = None
draw_turtle = None
move_turtle = None
path = []

def setup_screen():
    global screen, draw_turtle, move_turtle
    # 设置屏幕
    screen = turtle.Screen()
    screen.title("海龟跟随鼠标绘制路径")
    screen.setup(width=800, height=600)

    # 创建绘图海龟
    draw_turtle = turtle.Turtle()
    draw_turtle.hideturtle()
    draw_turtle.speed(0)

    # 创建移动海龟
    move_turtle = turtle.Turtle()
    move_turtle.shape('turtle')
    move_turtle.color('red')
    #move_turtle.penup()
    #move_turtle.hideturtle()

def start_drawing(x, y):
    global  path
    # 开始绘制路径
    path = [(x, y)]

    # 准备绘图海龟
    draw_turtle.penup()
    draw_turtle.goto(x, y)
    draw_turtle.pendown()

def continue_drawing(x, y):
    global path
    # 继续绘制路径
    draw_turtle.goto(x, y)
    path.append((x, y))

def calculate_angle(index):
    # 计算海龟前进角度
    if index + 1 < len(path):
        current = path[index]
        next_point = path[index + 1]
        dx = next_point[0] - current[0]
        dy = next_point[1] - current[1]
        return math.degrees(math.atan2(dy, dx))
    return 0

def move_along_path(index=0):
    # 沿路径移动
    if index < len(path) - 1:
        current = path[index]
        next_point = path[index + 1]

        # 计算距离和角度
        distance = math.sqrt(
            (next_point[0] - current[0])**2 + 
            (next_point[1] - current[1])**2
        )

        # 设置海龟朝向
        angle = calculate_angle(index)
        move_turtle.setheading(angle)

        # 移动
        move_turtle.goto(next_point[0], next_point[1])

        # 递归移动到下一个点
        screen.ontimer(
            lambda: move_along_path(index + 1), 
            50  # 移动间隔时间
        )
    else:
        # 路径结束
        move_turtle.penup()

def finish_drawing(x, y):    
    # 显示并移动海龟
    if len(path) > 1:
        move_turtle.showturtle()
        start_x, start_y = path[0]
        move_turtle.goto(start_x, start_y)
        move_turtle.pendown()
        move_turtle.setheading(calculate_angle(0))

        # 开始沿路径移动
        move_along_path()

def main():
    # 初始化屏幕和海龟
    setup_screen()

    # 绑定鼠标事件
    screen.onscreenclick(start_drawing, 1)  # 左键开始绘制
    screen.onscreenclick(continue_drawing, 1)  # 左键继续绘制
    screen.onscreenclick(finish_drawing, 3)  # 右键结束绘制

    screen.listen()

    # 启动主循环
    turtle.done()

# 运行程序
if __name__ == "__main__":
    main()
相关推荐
benben04412 小时前
Unity3D仿星露谷物语开发44之收集农作物
前端·游戏·unity·游戏引擎
Unity官方开发者社区2 天前
《Cryptical Path》开发诀窍:像玩游戏一样开发一款类Rogue游戏
java·游戏·玩游戏
二狗哈3 天前
制作一款打飞机游戏49:敌人抖动
游戏
Time Famine3 天前
射击游戏demo11
python·游戏·pygame
染指11103 天前
25.第二阶段x64游戏实战-分析物品相关数据
汇编·游戏·游戏逆向·x64dbg·x64游戏
web150854159353 天前
使用Python开发经典俄罗斯方块游戏
python·游戏·pygame
白露秋483 天前
C——五子棋小游戏
c语言·游戏
wgc2k4 天前
Java游戏服务器开发流水账(5)Spring 在游戏开发中的使用简介
java·服务器·游戏
passionSnail4 天前
《用MATLAB玩转游戏开发》推箱子游戏的MATLAB趣味实现
开发语言·游戏·matlab
海拥✘5 天前
CodeBuddy终极测评:中国版Cursor的开发革命(含安装指南+HTML游戏实战)
前端·游戏·html