用python的turtle作图(二)动画吃豆人
本文是用python的turtle作图的第二篇,通过这个例子可以了解动画的原理,用python自带的turtle库制作一些小动画。
1.问题描述
在上一篇“用python的turtle作图(一)静态图”我们介绍了,用python自带的turtle库,制作静态图。
本文将介绍用python自带的turtle库制作动画。
2.原理说明
动画的原理简单来说,就是利用视觉停留效应,每隔一定时间重新绘制图形。这里有三个关键点:
擦除原来的图形
重新绘制图形
时间一般是二十四分之一秒之内
下面以吃豆人为例进行说明:
1、新建一个后缀是py的文件,用文本编辑器打开,导入turtle和time库:
import turtle as t
import time
2、程序运行的时候,设置画图窗口大小800*600,黑色:
t.screensize(800,600,'black')
3、定义一个画吃豆人、豆子的函数:
def draw_smile(loc):
if(loc<200):
t.color('yellow')
t.penup()
t.goto(300-loc,0)
t.dot(30,'red')
t.seth(0)
t.goto(0,-100)
t.begin_fill()
t.circle(100)
t.end_fill()
if(loc<200):
t.color('black')
t.goto(87,-51)
t.pendown()
t.seth(60)
t.begin_fill()
t.circle(100,60)
t.goto(0,0)
t.end_fill()
4)擦除原理的图像,左移10个像素重新绘制吃豆人和豆子
for r in range(0,200,10):
t.tracer(False)
t.clear()
draw_smile(r)
time.sleep(1)
t.hideturtle()
t.tracer(True)
3.代码实现
完整的代码如下:
import turtle as t
import time
def draw_smile(loc):
if(loc<200):
t.color('yellow')
t.penup()
t.goto(300-loc,0)
t.dot(30,'red')
t.seth(0)
t.goto(0,-100)
t.begin_fill()
t.circle(100)
t.end_fill()
if(loc<200):
t.color('black')
t.goto(87,-51)
t.pendown()
t.seth(60)
t.begin_fill()
t.circle(100,60)
t.goto(0,0)
t.end_fill()
t.tracer(False)
t.screensize(800,600,'black')
t.color('yellow')
t.speed(1)
for r in range(0,200,10):
t.tracer(False)
t.clear()
draw_smile(r)
time.sleep(1)
t.hideturtle()
t.tracer(True)
t.clear()
t.tracer(0)
draw_smile(0)
程序运行效果如下:
3.总结
本着Talk is cheap. Show me the code
原则,代码实现不做过多解释。
写起来,并不难,多试试就可以了。
本文从构思到完成,可谓是耗费了大量的心血。
如果您阅读本文后哪怕有一丢丢收获,请不要吝啬你手中关注和点赞的权力,谢谢!
用python的turtle作图(二)动画吃豆人的更多相关文章
- 用python的turtle作图(一)静态图
最近,花了点时间,用python画图. 主要包括三部分,简单的静态图形,复杂的组合图形,图形动画. (一)画静态图形 长方形, 圆, 三角形, 平行四边形, 五角星 (二)图形的组合 笑脸, 国旗, ...
- css吃豆人动画
一. Css吃豆人动画 1. 上半圆:两个div,内部一个圆div,外部设置宽高截取半圆 外部div动画:animation: 动画样式 1s(时长) ease(动画先低速后快速) infinite( ...
- Fzu2124 - 吃豆人 BFS
Description 吃豆人是一款非常经典的游戏,游戏中玩家控制吃豆人在地图上吃光所有豆子,并且避免被怪物抓住. 这道题没有怪物,将游戏的画面分成n*m的格子,每格地形可能为空地或者障碍物,吃豆人可 ...
- [代码]解析nodejs的require,吃豆人的故事
最近在项目中需要对nodejs的require关键字做解析,并且替换require里的路径.一开始我希望nodejs既然作为脚本语言,内核提供一个官方的parser库应该是一个稳定可靠又灵活的渠道,然 ...
- Unity项目 - 吃豆人Pacman
项目展示 Github项目地址:Pacman 涉及知识 切片制作 Animations 状态机设置,any state切换,重写状态机 按键读取进行整数距离的刚体移动 用射线检测碰撞性 渲染顺序问题 ...
- TurnipBit开发板DIY呼吸的吃豆人教程实例
转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) 0x00前言 吃豆人是耳熟能详的可爱形象,如今我们的TurnipBit也 ...
- FZU 2124 吃豆人 bfs
题目链接:吃豆人 比赛的时候写的bfs,纠结要不要有vis数组设置已被访问,没有的话死循环,有的话就不一定是最优解了.[此时先到的不一定就是时间最短的.]于是换dfs,WA. 赛后写了个炒鸡聪明的df ...
- FZU 2124 FOJ 2124 吃豆人【BFS】
Problem 2124 吃豆人 Accept: 134 Submit: 575 Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- 利用纯css写三角形,弧度箭头,吃豆人,气泡。放大镜,标签的源码
1. 向上三角形
随机推荐
- c# - 常量定义与赋值
1.前言 c#与Java很相似,但是不一样,又与js(JavaScript)相似,但是也不一样,所以我认为c#是Java和 js的孩子. 2.常量定义 字符串: const string = &quo ...
- nuxt2.0项目创建(最新)
使用import需要babel编译写法如下 //修改1打开package.json文件 "dev": "cross-env NODE_ENV=development n ...
- 第10组 Alpha冲刺 (3/6)(组长)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13971668.html ·作业博客:https://edu.cnblogs.co ...
- vue2.0点击其他任何地方隐藏dom
methods: { handleBodyClick(){ if (绿色区域出来了,要判断点击其他地方就要关闭,这样可以避免绿色区域已经关闭还在操作) { let _con = $(目标区域) if ...
- boot项目打包剔除配置文件(打包优化)
背景: 最近在项目开发中,在本地开发和线上部署的时候总是切换dev和pro环境,项目多了改起来还是很麻烦的,以下记录下boot项目的打包优化,打包的时候剔除配置文件,然后将配置文件手动放到线上,线上项 ...
- 【C语言】将文本中汉字读入字符数组输出乱码
输出中文字符乱码 今天从文件中将中文读入字符数组后输出发现其中文变成了乱码,,令人头大. 解决办法 将文本编码格式改成ANSI即可. 打开记事本->文件->另存为->更改编码格式-& ...
- Solon Web 开发,四、请求上下文
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Golang 记录
Golang 笔记 1. hello Golang 新建项目,推荐GoLand工具 GOPATH目录:D:\go\awesomeProject 三个标准目录:bin,pkg,src MAIN目录:D: ...
- 云计算实验二 Docker实验-mysql、tomcat、sqlserver、redis、oracle、mongo安装
mysql安装 下载镜像 docker pull mysql 查看镜像 docker images|grep mysql 创建启动容器 docker run --name mysqlserver -v ...
- golang中的runtime包
1. runtime.Gosched 让出CPU时间片,重新等待安排任务 package main import ( "fmt" "runtime" ) fu ...