用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. 向上三角形
随机推荐
- linux -安装redis ,配置密码,开启远程访问
1.安装 添加epel源yum install epel-release查看yum repolist安装redis命令yum install redis查看Redis安装了哪些文件find / -na ...
- 【洛谷】P1067 多项式输出
原题链接:P1067 多项式输出 题目分析:学长推荐的OJ网站 --洛谷,发现挺好用的还可以下载提交出错的数据. 废话就不多说了,这道题属于基础题.提交出错主要是因为一些小细节不到位,这里就不一一赘述 ...
- day2 数组字符串逆序存放正序对接调试
这个问题仔细想了想,是s,t,s[],t[],重定义了,导致输入的是s,t这个定义变量,与传参传的是指针变量就不匹配了. 如果加上对s,t的地址,让传参的形式想匹配,还是报错,这块也没有弄懂,初步觉的 ...
- 【linux】Ubuntu20.04使用apt下载和卸载openJDK
Ubuntu20.04使用apt下载和卸载openJDK 前言 由于最近电脑装了ubuntu和win双系统,想再ubuntu上学习.在成功配置完系统之后,开始了配学习环境的旅程.... 这次的是使用u ...
- Spark-寒假-实验3
1.安装 Hadoop 和 Spark 进入 Linux 系统,参照本教程官网"实验指南"栏目的"Hadoop 的安装和使用",完成 Hadoop 伪分布式模式 ...
- 【记录一个问题】铁威马NAS存储中的python3,安装后找不到xml这个包
如题 因为找不到xml,所以无法安装setuptools 因为无法安装setuptools,所以无法安装pip3 现在准备重新下载python3的源码自己编译. 铁威马的系统中还缺少libm这个库,导 ...
- 前端页面禁止调试debugger方法汇总
打开控制台直接跳转页面 //debug调试时跳转页面 var element = new Image(); Object.defineProperty(element,'id',{get:functi ...
- CKKS :Part1,普通编码/解码
这篇文章,翻译于:[CKKS EXPLAINED: PART 1, VANILLA ENCODING AND DECODING] 主要介绍为CKKS中编码/解码做铺垫,讲一些基础知识 介绍 同态加密是 ...
- AtCoder Beginner Contest 146_E - Rem of Sum is Num
预处理即可 我们要找的是 (f[i] - f[j]) % k == i - j 移项可得 f[i] - i = f[j] - j 在 i - j <= k 的条件下 因此题目变成了,对于每个右端 ...
- 做开源界的MATLAB,PyMiner 需要更多热爱开源的你加入
MATLAB 和 Mathematica.Maple 并称为三大数学软件.它在数学类科技应用软件中在数值计算方面首屈一指.MATLAB 可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其 ...