文章目录

  • 一条条金龙鱼
  • 雨景

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模块还能这样玩?(一条条金龙鱼、雨景)相关推荐

  1. 学习Python中turtle模块的基本用法(6:其它函数)

      除了之前文章中介绍的turtle模块的绘图函数,本文从turtle帮助文档中梳理了其它绘图或状态函数,编写复杂的绘图函数时也用得到,函数清单如下表所示: 序号 函数名称 说明 1 turtle.h ...

  2. neatdm路径_扫地机还能这么玩 延时摄影看路径规划

    1扫地机玩光绘 行走路径不再是秘密 不知道是现在科技越来越发达还是人们真的越来越懒.由于从业的关系,笔者身边总不乏亲戚朋友咨询扫地机器人好不好,或者我想买扫地机器人该怎么选择?面对这个问题,我也的确给 ...

  3. python画图代码turtle-使用Python的turtle模块画图的方法

    简介:turtle是一个简单的绘图工具.它提供了一个海龟,你可以把它理解为一个机器人,只听得懂有限的指令. 1.在文件头写上如下行,这能让我们在语句中插入中文 #-*-coding:utf-8-*- ...

  4. Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解

    1 标准输出 python3利用 print() 来实现标准输出 def print(self, *args, sep=' ', end='\n', file=None): # known speci ...

  5. python turtle绘制柱状图_python绘制图形(Turtle模块)

    用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...

  6. Python的turtle库还能绘制这些有趣图形?

    在Python中,有一个内置的绘图模块,就是turtle.我们可以用它来绘制一些有趣的图形. 多边形 1.三边的效果: 2.六边的效果: 是不是觉得非常挺炫酷的,但其实实现它的代码非常简单,仅仅10行 ...

  7. python画画需要什么模块_python实战练手项目---使用turtle模块画奥运五环

    python实战练手项目---使用turtle模块画奥运五环 2020年将举办东京奥运会,本篇实践文章将带你使用turtle模块画一个五环图,先来看效果图 1. 定义一个类继承Turtle class ...

  8. python课堂点名_Python制作课堂点名器,原来还能这么玩!

    Python制作课堂点名器,原来还能这么玩! 作者:PHPYuan 时间:2019-03-19 03:40:36 我们用的是Python中的Tkinter模块,我们大概做的功能有三个:随机点名 惩罚 ...

  9. 轻松一下:python(turtle模块)绘制分形图

    分形 分形,具有以非整数维形式充填空间的形态特征.通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质.分形 ...

最新文章

  1. HTML在网页设计中是什么作用?
  2. 网络基础之HTTP协议
  3. Metasploit命令info使用技巧
  4. 跨链(8)跨链双雄Cosmos“系统框架”
  5. 03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
  6. 高通qca9565网卡驱动_修改注册表让Surface Go的无线网卡支持频段选择
  7. 分布式数据流计算系统的数据缓存技术综述
  8. 计算机网络八校联考试题,2019届高三信息技术3月联考试卷有解析与答案
  9. matleb2016A安装教程
  10. 香港股票交易成本计算器 android,股票交易手续费计算器
  11. Matlab 边界提取
  12. 关于数据迁移:解决kettle中mysql的数据是tinyint的kettle查出来后变成boolean问题
  13. 小程序运营主要做什么?如何推广比较好?
  14. 联想k50+开发者模式+linux,联想 K50-T5中文Recovery刷机教程
  15. 怎样理解封装,继承,多态!三者的区别?
  16. 别头疼了,你要的算法和数据结构的学习路线来了!
  17. win10 官方纯净版安装详细图解
  18. group by column中的column与前面条件发生的错误的解决方案
  19. 新词发现:中文新词识别技术简介
  20. word中审阅和修订、批注

热门文章

  1. es ik分词插件安装
  2. php期末考试题机考_phP基础知识期末考试题
  3. 折线图 放大_第二个折线图(Line Plot)的示例代码
  4. java定时器阻塞主线程_Java基础_死锁、线程组、定时器Timer
  5. 一般纳米材料是指尺度为_纳米是什么米?什么是纳米材料?(1)
  6. linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存
  7. 如何安装html网站模板,网站模板安装说明
  8. java 打印ascii字符串_简单使用JAVA打印纯ASCII字符构成的酷图效果
  9. 基于Python+Django+MYSQL的校园食堂点餐管理系统
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的校园二手自行车交易系统