turtle模块还能这样玩?(一条条金龙鱼、雨景)
文章目录
- 一条条金龙鱼
- 雨景
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的快感了
turtle模块还能这样玩?(一条条金龙鱼、雨景)相关推荐
- 学习Python中turtle模块的基本用法(6:其它函数)
除了之前文章中介绍的turtle模块的绘图函数,本文从turtle帮助文档中梳理了其它绘图或状态函数,编写复杂的绘图函数时也用得到,函数清单如下表所示: 序号 函数名称 说明 1 turtle.h ...
- neatdm路径_扫地机还能这么玩 延时摄影看路径规划
1扫地机玩光绘 行走路径不再是秘密 不知道是现在科技越来越发达还是人们真的越来越懒.由于从业的关系,笔者身边总不乏亲戚朋友咨询扫地机器人好不好,或者我想买扫地机器人该怎么选择?面对这个问题,我也的确给 ...
- python画图代码turtle-使用Python的turtle模块画图的方法
简介:turtle是一个简单的绘图工具.它提供了一个海龟,你可以把它理解为一个机器人,只听得懂有限的指令. 1.在文件头写上如下行,这能让我们在语句中插入中文 #-*-coding:utf-8-*- ...
- Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解
1 标准输出 python3利用 print() 来实现标准输出 def print(self, *args, sep=' ', end='\n', file=None): # known speci ...
- python turtle绘制柱状图_python绘制图形(Turtle模块)
用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...
- Python的turtle库还能绘制这些有趣图形?
在Python中,有一个内置的绘图模块,就是turtle.我们可以用它来绘制一些有趣的图形. 多边形 1.三边的效果: 2.六边的效果: 是不是觉得非常挺炫酷的,但其实实现它的代码非常简单,仅仅10行 ...
- python画画需要什么模块_python实战练手项目---使用turtle模块画奥运五环
python实战练手项目---使用turtle模块画奥运五环 2020年将举办东京奥运会,本篇实践文章将带你使用turtle模块画一个五环图,先来看效果图 1. 定义一个类继承Turtle class ...
- python课堂点名_Python制作课堂点名器,原来还能这么玩!
Python制作课堂点名器,原来还能这么玩! 作者:PHPYuan 时间:2019-03-19 03:40:36 我们用的是Python中的Tkinter模块,我们大概做的功能有三个:随机点名 惩罚 ...
- 轻松一下:python(turtle模块)绘制分形图
分形 分形,具有以非整数维形式充填空间的形态特征.通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质.分形 ...
最新文章
- HTML在网页设计中是什么作用?
- 网络基础之HTTP协议
- Metasploit命令info使用技巧
- 跨链(8)跨链双雄Cosmos“系统框架”
- 03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
- 高通qca9565网卡驱动_修改注册表让Surface Go的无线网卡支持频段选择
- 分布式数据流计算系统的数据缓存技术综述
- 计算机网络八校联考试题,2019届高三信息技术3月联考试卷有解析与答案
- matleb2016A安装教程
- 香港股票交易成本计算器 android,股票交易手续费计算器
- Matlab 边界提取
- 关于数据迁移:解决kettle中mysql的数据是tinyint的kettle查出来后变成boolean问题
- 小程序运营主要做什么?如何推广比较好?
- 联想k50+开发者模式+linux,联想 K50-T5中文Recovery刷机教程
- 怎样理解封装,继承,多态!三者的区别?
- 别头疼了,你要的算法和数据结构的学习路线来了!
- win10 官方纯净版安装详细图解
- group by column中的column与前面条件发生的错误的解决方案
- 新词发现:中文新词识别技术简介
- word中审阅和修订、批注
热门文章
- es ik分词插件安装
- php期末考试题机考_phP基础知识期末考试题
- 折线图 放大_第二个折线图(Line Plot)的示例代码
- java定时器阻塞主线程_Java基础_死锁、线程组、定时器Timer
- 一般纳米材料是指尺度为_纳米是什么米?什么是纳米材料?(1)
- linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存
- 如何安装html网站模板,网站模板安装说明
- java 打印ascii字符串_简单使用JAVA打印纯ASCII字符构成的酷图效果
- 基于Python+Django+MYSQL的校园食堂点餐管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的校园二手自行车交易系统