Python的turtle模块不仅可以用来绘制一些基本的图形,还有与图片结合,做出一些特殊的效果,还可以用来做二维小游戏。本篇是介绍用turtle模块做出的一幅动态的鱼儿游过的画面和动态的雨景图
一条条金龙鱼
1、先看一下效果图
![金龙鱼效果图](https://img-blog.csdnimg.cn/20200326184113821.gif)
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)
注意,这里的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)
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):
idx = i % 3
space_fish = mother_fishs[idx].clone()
space_fish._speed = random() * (idx+1)
space_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)
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)
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):
idx = i % 3
space_fish = mother_fishs[idx].clone()
space_fish._speed = random() * (idx+1)
space_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()方法来设置背景。
这样,一幅雨景效果就实现了:
![雨景](https://img-blog.csdnimg.cn/20200326184727732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
练习代码:
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)
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
space_raindrop = mother_raindrops[idx].clone()
space_raindrop._speed = random() * (idx+1)
space_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的快感了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)