用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. 向上三角形
随机推荐
- 关于 用 js 实现 快照功能
1.前言 前段时间有个需求,想要 打印一个小票凭证 ,实现这个功能,我首先想到了快照, 就是将数据内容排版好,然后截图或者用其他方式将内容 制作成图片 ,然后下载下来打印即可. 2.探讨 为何不直接以 ...
- List接口的实现类
(一): ArrayList 构造方法 特有的方法: LinkedList 特点: 可以调用Collections类的静态方法 synchronizedCollection转换成线程安全的
- boot项目打包剔除配置文件(打包优化)
背景: 最近在项目开发中,在本地开发和线上部署的时候总是切换dev和pro环境,项目多了改起来还是很麻烦的,以下记录下boot项目的打包优化,打包的时候剔除配置文件,然后将配置文件手动放到线上,线上项 ...
- java基础01-03-注释、标识符、数据类型讲解
java基础01-注释 java中的注释有三种: 单行注释 多行注释 文件注释 public class helloworld { public static void main(String[] a ...
- 《剑指offer》面试题06. 从尾到头打印链表
问题描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10 ...
- github与gitlab创建新仓库
github创建新仓库 然后根据下一页的命令提示进行即可 gitlab创建新仓库 git init git remote add origin git@***.***.**.**:user/proje ...
- nRF24L01无线模块笔记
nRF24L01模块 官网链接: https://www.nordicsemi.com/Products/nRF24-series 常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据 ...
- 【机器学习】kNN
机器学习算法--kNN 目录 机器学习算法--kNN 1. 算法原理 2. 算法实现 2.1 kd-tree构造 2.2 kd-tree查询 2.3 kNN算法实现 3. 算法测试 Ref 1. 算法 ...
- cv::copyMakeBorder()中用0值对齐矩阵,方便后续加速傅里叶变换
int M = cv::getOptimalDFTSize(mul_result.rows); // 获得最佳DFT尺寸,为2的次方 int N = cv::getOptimalDFTSize(mul ...
- linux下git安装使用新手教程。
1.进入官网,创建Github帐户,获取git服务. 2.本地安装git客户端,yum install git. 3.生成ssh key,使用命令 "ssh-keygen -t rsa -C ...