turtle模块还能这样玩?(一条条金龙鱼、雨景)

article/2025/8/24 9:01:50

文章目录

      • 一条条金龙鱼
      • 雨景

Python的turtle模块不仅可以用来绘制一些基本的图形,还有与图片结合,做出一些特殊的效果,还可以用来做二维小游戏。本篇是介绍用turtle模块做出的一幅动态的鱼儿游过的画面和动态的雨景图

一条条金龙鱼

1、先看一下效果图
金龙鱼效果图
2、创建屏幕对象
首先是导入实例化一个turtle屏幕对象,用setup()建立屏幕,并设置好屏幕的宽、高;然后注册我们需要用到的3张图片

#设置场景幕布(宽高,背景色, 飞船, 帧数)
s = Screen()
s.title('一条条金龙鱼@栀子')  #设置标题
w, h = 1200, 700  #设置屏幕大小
s.setup(w, h)   #建立屏幕
s.bgcolor('black')  #设置颜色为黑色
s.register_shape('s0.gif')
s.register_shape('s1.gif')
s.register_shape('s2.gif')
#第一个参数为作图过程时长,第二个参数为刷新间隔时长(即帧数,单位毫秒)
s.tracer(0, 5)  #为0表示禁用动画

注意,这里的register_shape()只能注册gif格式的图片。

3、画星空
我们的背景可以自定义一张图片,用对象名.bgpic(‘filename’)加入图片,也可以自己画一个,比如我画一个星空:

#创建星空
star = Turtle()
star.shape('circle')  #新建一个画笔,设置为圆形
star.shapesize(0.05, 0.05)  #改变圆形大小
star.color('white')
star.penup()
star.speed(0)
for i in range(100):x = randint(-w/2, w/2)  #w为开始定义的屏幕宽度,h为高度y = randint(-h/2, h/2)star.goto(x, y)star.stamp()  #使画笔留下痕迹

4、然后我们需要创建鱼群,并克隆鱼到鱼群里

#创建鱼群,用空列表来装鱼
mother_fishs = [Turtle(shape='s0.gif', visible=False),  #初始设置为不可见Turtle(shape='s1.gif', visible=False),Turtle(shape='s2.gif', visible=False)]#克隆鱼到鱼群里
space_fishs = []
for i in range(60):     #60条鱼idx = i % 3   #0,1,2space_fish = mother_fishs[idx].clone()   #克隆space_fish._speed = random() * (idx+1)  #1,2,3space_fishs.append(space_fish)  #把鱼加入到鱼群中

5、无限循环
我们最后一步就是通过无限循环来控制鱼群的移动,也就是改变一条条鱼的生成地点和它们的位置
在循环里,我们需要先遍历每一条鱼,设置它们的位置

for space_fish in space_fishs:space_fish.setx(space_fish.xcor() - space_fish._speed)

然后我们需要判断一下这些鱼是否超出了边界,如果超出了,这条鱼就先隐藏,然后重新回到出发地,继续前进

if space_fish.xcor() < -w/2:space_fish.hideturtle()space_shuttle.goto(w/2+randint(0,w/2),randint(-h/2,h/2))space_fish.showturtle()

这样,一条条金龙鱼游动的画面就做出来了,逻辑都很简单,操作也不难,都是turtle的基本操作,希望大家也能轻松做出来

6、完整代码

#导入库
from turtle import *
from random import *#设置场景幕布(宽高,背景色, 飞船, 帧数)
s = Screen()
s.title('一条条金龙鱼@栀子')  #设置标题
w, h = 1200, 700  #设置屏幕大小
s.setup(w, h)   #建立屏幕
s.bgcolor('black')  #设置颜色为黑色
s.register_shape('s0.gif')
s.register_shape('s1.gif')
s.register_shape('s2.gif')
#第一个参数为作图过程时长,第二个参数为刷新间隔时长(即帧数,单位毫秒)
s.tracer(0, 5)  #为0表示禁用动画#创建星空
star = Turtle()
star.shape('circle')  #新建一个画笔,设置为圆形
star.shapesize(0.05, 0.05)  #改变圆形大小
star.color('white')
star.penup()
star.speed(0)
for i in range(100):x = randint(-w/2, w/2)  #w为开始定义的屏幕宽度,h为高度y = randint(-h/2, h/2)star.goto(x, y)star.stamp()  #使画笔留下痕迹#创建鱼群
mother_fishs = [Turtle(shape='s0.gif', visible=False),  #初始设置为不可见Turtle(shape='s1.gif', visible=False),Turtle(shape='s2.gif', visible=False)]
#克隆鱼到鱼群里
space_fishs = []
for i in range(60):     #60条鱼idx = i % 3   #0,1,2space_fish = mother_fishs[idx].clone()   #克隆space_fish._speed = random() * (idx+1)  #1,2,3space_fishs.append(space_fish)  #把鱼加入到鱼群中#设置舰队的初始状态
for space_fish in space_fishs:space_fish.hideturtle()   #让飞船先隐藏起来space_fish.penup()  #把画笔也隐藏space_fish.goto(w/2+randint(0,w/2),randint(-h/2,h/2))  #设置出生位置,从最右边开始,高度随机space_fish.showturtle() #让飞船显示出来#无限循环,控制舰队的移动
while True:for space_fish in space_fishs:space_fish.setx(space_fish.xcor() - space_fish._speed)if space_fish.xcor() < -w/2:space_fish.hideturtle()space_shuttle.goto(w/2+randint(0,w/2),randint(-h/2,h/2))space_fish.showturtle()s.update()  #刷新屏幕 

雨景

对应上面的游动金龙鱼案例,其实就是用turtle做了一个动态的处理,把我们加入的图片用一定的规则去改变位置,而且是简单的一维变化位置,就是从右到左,所以说逻辑并不复杂。

而且我们随便改一改,就可以实现另外一番效果,比如我想让它从上到下,并且换一张图片,就用雨滴图片;然后我不想用星空做背景,想用一张图片做背景,那就用turtle的bgpic()方法来设置背景。

这样,一幅雨景效果就实现了:
雨景
练习代码:

#导入库
from turtle import *
from random import *#设置场景幕布
s = Screen()
s.title('雨景@栀子')  #设置标题
w, h = 1200, 700  #设置屏幕大小
s.setup(w, h)   #建立屏幕
s.bgcolor('black')  #设置颜色为黑色
s.register_shape('s0.gif')
s.register_shape('s01.gif')
s.bgpic('s01.gif')
s.tracer(0, 5)  #为0表示禁用动画#创建雨滴群
mother_raindrops = [Turtle(shape='s0.gif', visible=False),  #设置为不可见Turtle(shape='s0.gif', visible=False),Turtle(shape='s0.gif', visible=False)]#克隆舰队
space_raindrops = []
for i in range(60): idx = i % 3   #0,1,2space_raindrop = mother_raindrops[idx].clone()   #克隆space_raindrop._speed = random() * (idx+1)  #1,2,3space_raindrops.append(space_raindrop)#设置初始状态
for space_raindrop in space_raindrops:space_raindrop.hideturtle()space_raindrop.penup()  #把画笔也隐藏space_raindrop.goto(randint(-w/2,w/2),h/2)  #设置出生位置,从最右边开始,高度随机space_raindrop.showturtle()#无限循环
while True:for space_raindrop in space_raindrops:space_raindrop.sety(space_raindrop.ycor() - space_raindrop._speed)  #不断移动if space_raindrop.ycor() < -h/2:  #判断撞墙没有,撞墙就消失space_raindrop.hideturtle()space_raindrop.goto(randint(-w/2,w/2),h/2)space_raindrop.showturtle()s.update()  #刷新屏幕 

Python中的turtle真的非常有趣,有各种各样的玩法,只要我们去尝试就能切实体会到学Python的快感了


http://chatgpt.dhexx.cn/article/p6kGX3b1.shtml

相关文章

2.Python # 代码注释

2. # 代码注释 文章目录 2. # 代码注释1. 什么是代码注释2. 注释语法3. 注释位置1. 注释在代码的上一行2. 注释在代码的末端 4. 课堂练习 1. 什么是代码注释 代码注释即对代码进行批注说明。 相当于给一个英文单词批注中文释义。 【温馨提示】注释是给程序员自己看的&#xf…

python:导入第三方库greenlet,gevent方法

greenlet&#xff0c;gevent greenlet&#xff0c;gevent是python支持的第三方库&#xff0c;它们可以帮助我们完成协程的使用&#xff0c;其中greenlet是手动调换方式&#xff08;switch方法&#xff09;&#xff0c;gevent是自动调换方式&#xff08;遇到IO操作&#xff09;…

python gevent使用

对大部分语言来说&#xff0c;经常用到并发来处理一些情况。比如必须要多次查询数据库&#xff0c;多次请求API&#xff0c;python内置的gevent就很简单好用。传参&#xff0c;获取返回值&#xff0c;捕获协程的错误都很方便。 直接上例子&#xff1a; import gevent as gevent…

指定Geany使用的Python版本

本文介绍&#xff1a; 在win7下配置Geany,使其使用 Python 3 因为电脑上安装了不同版本的Python&#xff0c;需要根据实际情况来进行版本切换。 第一步&#xff1a;首先点击"生成"按钮的三角箭头&#xff0c;再点击"设置生成命令" 第二步&#xff1a;在弹出…

ModuleNotFountError:No module named ‘gensim‘(在python代码中导入gensim模块)

运行窗口&#xff1a; conda install 模块 pip install 模块 第一个命令应该由于网速太慢没有下载完全&#xff0c;第二个命令我手动输入n退出了。 网速慢&#xff0c;可以使用如下命令&#xff1a; pip install -i https://pypi.douban.com/simple gensim pip install -i…

Python学习笔记--图例 legend

Python学习笔记--图例 legend 参靠视频:《Python数据可视化分析 matplotlib教程》链接&#xff1a;https://www.bilibili.com/video/av6989413/?p6 所用的库及环境: IDE:Pycharm Python环境&#xff1a;python3.7 Matplotlib: Matplotlib 1.11 Numpy&#xff1a; Numpy1.1…

【pybind11笔记】eigen与numpy数据交互

系列文章 【pybind11笔记】eigen与numpy数据交互 【pybind11笔记】python调用c函数 【pybind11笔记】python调用c结构体 【pybind11笔记】python调用c类 文件结构 为了方便演示&#xff0c;我们使用cmake构建该样例&#xff0c;文件结构如下&#xff1a; pybind11与eigen…

python学习笔记:问题一,Geany编辑器无法使用中文注释

python学习笔记&#xff1a; 问题一&#xff1a; Geany编辑器无法使用中文注释 Geany编译python时运行弹出SyntaxError: (unicode error) ‘utf-8’ codec can’t提升&#xff0c;文本编辑器Geany无法使用中文注释&#xff0c;可以设置一下文本编码格式就好了设置方法为&…

Python--注释

Python--注释 <font size4, colorblue> 一、Python中注释的形式<font size4, colorblue> 1、单行注释&#xff1a;使用“#”符号注释<font size4, colorblue> 2、多行注释&#xff1a;使用一对三个英文单引号注释<font size4, colorblue> 3、多行注释&…

python中generate什么意思_python generate怎么用

generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复。这些语句可以包括模块实例引用的语句、连续赋值语句、always语句、initial语句和门级实例引用语句等。细化时间是指仿真开始前的一个阶段&#xff0c;此时所有的设计模块已经被链接到一起&#xff0c;并完…

Python Gevent

参考资料 http://www.gevent.org/contents.htmlhttps://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Gevent.html Python脚本的执行效率一直来说并不是很高&#xff0c;特别是Python下的多线程机制&#xff0c;长久以来一直被人们诟病。很多人都在思考如何让Python执行的更快…

符号回归工具之 geppy: Python中的基因表达编程框架

符号回归工具之 geppy&#xff1a; Python中的基因表达编程框架 geppy是一个专门用于基因表达编程&#xff08;GEP&#xff09;的计算框架&#xff0c;由 C. Ferreira 在 2001 年提出 [1]。 geppy是在 Python 3 中开发的。这个框架个人认为稍微了解下遗传算法和遗传规划即可入…

如何在Geany中添加python的中文注释

在Geany中编译Python中直接添加中文注释会出现如下错误 只需要在程序的开始位置添加一句&#xff1a;# coding:utf-8

python中安装gensim包

安装gensim扩展包需要先安装numpy和scipy 先下载这三个文件的安装包。 注意安装包版本问题&#xff0c;可以进入python查看&#xff1a; 这里注意图中划线的两个地方即可&#xff0c;win代表的是是windows系统 WinR cmd 切换到安装包所在路径&#xff1a; pip install numpy…

搭建云端数据库【MongoDB】

MongoDB官方网站&#xff1a;http://www.cloud.mongodb.com 进入官网后首先点击TRY FREE 创建database 数据库创建完成 点击连接按钮 选择第二个选项 复制连接到项目中&#xff0c;输入密码和数据库名称 在服务端做一些相关配置 1、在根目录下新建d…

云端数据库的春天真来了

点 10月24日&#xff0c;阿里云推出了国内首个云端数据库跑分平台&#xff0c;在行业圈中引起了不少讨论。在阿明看来&#xff0c;这个平台推出的背后&#xff0c;实际上仍然潜藏着数据库领域&#xff0c;用云数据库替换传统数据库的大趋势&#xff0c;正如19世纪末汽车的出现…

【腾讯云技术沙龙预告】云端数据库的设计之美

数据科学俱乐部 中国数据科学家社区 以数据为中心的信息化社会&#xff0c;数据库可以看做是所有应用程序成功运行的核心。而结合云计算&#xff0c;数据库的高可用性能够被放大到极致&#xff0c;可以实现按需付费、按需扩展、高可用性以及存储整合等优势。 本期云社区技术沙龙…

ApiCloud链接云端数据库

apicloud的mcm模块其实就是应用云端数据库完成一系列操作&#xff0c;说到云端数据&#xff0c;当然要先创建数据库&#xff0c;按照如下方式创建&#xff0c;当然&#xff0c;双击就可添加数据 之后就简单了&#xff0c;在项目的页面里写上这样的查询就ok了&#xff0c;其中ap…

云端数据库审计,你不能不知道的秘密

云端数据安全,是云安全中核心的问题之一。要实现云数据安全,需要从多个角度去努力。对数据访问情况的跟踪记录审计,是云数据安全的基本要求。本文从数据源头——数据库的保护角度,以几个问题的问答方式,分析数据库的安全审计问题。 1.什么是云端数据库? 广义的说,云端数…

建立APICloud云端数据库

在我们平常做项目的过程总是会遇到一个较为苦逼的问题——就像假如你是移动端or网页前端的话&#xff0c;想开发一个可以联网的项目&#xff0c;仍然需要一个专门开发后台的人员来跟你一起合作开发项目&#xff0c;但是&#xff0c;假如你是使用APICloud的话&#xff0c;那你就…