Python飞舞蝙蝠
目录
系列文章
写在前面
完整代码
代码分析
写在后面
系列文章
序号 | 直达链接 |
爱心系列 | |
1 | Python制作一个无法拒绝的表白界面 |
2 | Python满屏飘字表白代码 |
3 | Python无限弹窗满屏表白代码 |
4 | Python李峋同款可写字版跳动的爱心 |
5 | Python流星雨代码 |
6 | Python漂浮爱心代码 |
7 | Python爱心光波代码 |
8 | Python普通的玫瑰花代码 |
9 | Python炫酷的玫瑰花代码 |
10 | Python多彩的玫瑰花代码 |
节日系列 | |
1 | Python动漫风烟花秀代码 |
2 | Python新年烟花秀代码 |
3 | Python圣诞礼物代码 |
4 | Python画圣诞树代码 |
5 | Python可爱版圣诞树丨绿色 |
6 | Python可爱版圣诞树丨粉色 |
7 | Python大雪纷飞代码 |
8 | Python生日蛋糕代码 |
9 | Python五彩气球代码 |
10 | Python国庆祝福代码 |
11 | Python万圣礼物代码 |
12 | Python愚人节礼物代码 |
13 | Python浪漫星空代码 |
14 | Python樱花树代码 |
动漫系列 | |
1 | Python名侦探柯南 |
2 | Python喜羊羊 |
3 | Python懒羊羊 |
4 | Python沸羊羊 |
5 | Python小灰灰 |
6 | Python小香香 |
7 | Python灰太狼 |
8 | Python海绵宝宝 |
9 | Python哆啦A梦 |
10 | Python凯蒂猫 |
11 | Python猫和老鼠 |
12 | Python草莓熊 |
13 | Python迷你皮卡丘 |
14 | Python高级皮卡丘 |
15 | Python豪华皮卡丘 |
16 | Python史迪仔 |
17 | Python小熊猫 |
18 | Python蜘蛛侠 |
19 | Python可爱版蜡笔小新 |
20 | Python萌萌的蜡笔小新 |
21 | Python罗小黑 |
22 | Python猪猪侠 |
炫酷系列 | |
1 | Python张万森下雪了 |
2 | Python一闪一闪亮晶晶 |
3 | Python黑客帝国代码雨 |
4 | Python七彩花朵 |
5 | Python模拟3D星空 |
6 | Python金榜题名 |
7 | Python满天星 |
写在前面
Python实现万圣节蝙蝠的完整代码。
- PyCharm
- python3.11.4
- pyinstaller6.2.0
完整代码
import turtle as tu
import random as ra
import mathtu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)
tu.title("万圣节快乐")
tu.bgcolor('darkblue')
t = tu.Pen()
t.ht()
colors = ['black']class Bat(): # 每个蝙蝠(蝙蝠类)def __init__(self):self.k = ra.uniform(0.1, 0.3) # 蝙蝠的半径self.r = 1 # 南瓜的半径self.x = ra.randint(-1000, 1000) # 蝙蝠的横坐标self.y = ra.randint(-500, 500) # 蝙蝠的纵坐标self.f = ra.uniform(-3.14, 3.14) # 蝙蝠左右移动呈正弦函数self.speed = ra.randint(5, 10) # 蝙蝠移动速度self.color = ra.choice(colors) # 蝙蝠的颜色self.outline = 1 # 蝙蝠的外框大小(可不要)def move(self): # 蝙蝠移动函数if self.y <= 500: # 当蝙蝠还在画布中时self.y += self.speed # 设置上下移动速度self.x += self.speed * math.sin(self.f) # 设置左右移动速度self.f += 0.1 # 可以理解成标志,改变左右移动的方向else: # 当蝙蝠漂出了画布时,重新生成一个蝙蝠self.k = ra.uniform(0.1, 0.3)self.r = 1 # 南瓜的半径self.x = ra.randint(-1000, 1000)self.y = -500self.f = ra.uniform(-3.14, 3.14)self.speed = ra.randint(5, 10)self.color = ra.choice(colors)self.outline = 1def bat(self): # 画蝙蝠函数,就是用turtle画蝙蝠t.penup()t.goto(self.x, self.y)t.pendown()t.pencolor(self.color)t.pensize(1)t.begin_fill()t.fillcolor(self.color)t.forward(self.k * 10)t.setheading(75)t.forward(self.k * 35)t.setheading(-75)t.forward(self.k * 55)t.setheading(0)t.circle(self.k * 40, 90)t.right(90)t.forward(self.k * 100)t.left(180)t.circle(self.k * 100, 90)t.setheading(180)t.circle(self.k * 70, 90)t.left(180)t.circle(self.k * 70, 90)t.right(90)t.circle(self.k * 100, 90)t.right(180)t.forward(self.k * 100)t.right(90)t.circle(self.k * 40, 90)t.setheading(75)t.forward(self.k * 55)t.setheading(-75)t.forward(self.k * 35)t.setheading(0)t.forward(self.k * 10)t.end_fill()def pumpkin(self):# 画南瓜t.penup()t.goto(250 * self.r, 30 * self.r)t.pendown()t.seth(90)t.begin_fill()for j in range(25):t.fd(j * self.r)t.left(3.6)for j in range(25, 0, -1):t.fd(j * self.r)t.left(3.6)t.seth(-90)t.circle(254 * self.r, 180)t.end_fill()# 眼睛eyes_items = [(-60, 230, 0), (60, -50, 1)]for items in eyes_items:position, angle, direction = itemst.pensize(6)t.penup()t.goto(position * self.r, 0)t.pendown()t.color('yellow', 'yellow')t.begin_fill()t.seth(angle)for j in range(55):t.fd(3 * self.r)if direction:t.left(3) # 左转3度else:t.right(3) # 右转3度t.goto(position * self.r, 0)t.end_fill()# 鼻子t.penup()t.goto(0, 0)t.seth(180)t.pendown()t.begin_fill()t.circle(50 * self.r, steps=3)t.end_fill()# 嘴巴t.color('#F9D503', '#F9D503')t.pensize(6)t.penup()t.goto(-150 * self.r, -100 * self.r)t.pendown()t.begin_fill()t.seth(-30)t.fd(100 * self.r)t.left(90)t.fd(30 * self.r)t.right(90)t.fd(60 * self.r)t.left(60)t.fd(60 * self.r)t.right(90)t.fd(30 * self.r)t.left(90)t.fd(100 * self.r)t.end_fill()# 南瓜枝t.penup()t.goto(0, 180 * self.r)t.pendown()t.color('#2E3C01')t.seth(100)t.pensize(25)t.circle(60 * self.r, 100)Bats = [] # 用列表保存所有蝙蝠
for i in range(100):Bats.append(Bat())while True: # 开始漂浮tu.tracer(0)t.clear()# Bats[0].pumpkin()for i in range(50): # 在画布中设置50个漂浮的蝙蝠Bats[i].move()Bats[i].bat()tu.update()
代码分析
这段代码是用Python的turtle模块绘制一个万圣节主题的动画效果:漂浮的蝙蝠和南瓜。
代码第1-4行导入了必要的模块。turtle模块用于绘图,random模块用于生成随机数,math模块用于数学计算。
第6-8行设置了绘图窗口的大小和标题,以及背景颜色。
第10行创建了一个画笔对象t。
第11行定义了一个颜色列表colors,用于随机选择蝙蝠的颜色。
第13-39行定义了一个蝙蝠类Bat。该类具有以下属性和方法:
-
初始化方法__init__():初始化蝙蝠的半径、南瓜半径、坐标、移动速度、颜色等属性。
-
移动方法move():根据蝙蝠的速度和方向,更新蝙蝠的坐标。
-
画蝙蝠方法bat():根据蝙蝠的属性,使用turtle模块绘制一个蝙蝠的图形。
-
画南瓜方法pumpkin():使用turtle模块绘制一个南瓜的图形。
第41行创建一个空的列表Bats用于保存所有蝙蝠。
第42-47行使用循环创建100个蝙蝠对象,并将它们添加到列表Bats中。
第49行开始一个无限循环,用于让蝙蝠漂浮:
-
使用tu.tracer(0)关闭绘图的动画效果,加快绘图速度。
-
使用t.clear()清空画布。
-
使用循环依次调用每个蝙蝠对象的move()和bat()方法,实现蝙蝠的移动和绘制。
-
使用tu.update()更新画布,显示最新的绘图结果。
通过以上代码,可以实现一个漂浮的蝙蝠和南瓜的动画效果,以下是对这段代码的详细分析。
1. 代码结构概述
这段代码使用了类和对象的概念来创建蝙蝠,具体实现了蝙蝠的移动和绘制功能,并通过无限循环持续更新画面。主要分为以下几个部分:
-
库的导入和基本设置:导入Turtle和随机库,设置窗口标题、背景颜色及画布大小。
-
Bat类:定义了蝙蝠的属性和行为,包括初始化位置、速度、颜色等,以及绘制蝙蝠和南瓜的具体方法。
-
蝙蝠的移动和绘制:实现蝙蝠的上下左右运动,并绘制蝙蝠的形状。
-
动画循环:通过无限循环更新画面,展示蝙蝠的运动。
2. 细节分析
2.1 库的导入与设置
import turtle as tu
import random as ra
import mathtu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)
tu.title("万圣节快乐")
tu.bgcolor('darkblue')
这里导入了turtle
、random
和math
库。turtle
用于图形绘制,random
用于生成随机数,math
则用于数学计算。随后设置了窗口的大小、标题和背景颜色,为绘制氛围的营造打下基础。
2.2 Bat类的定义
class Bat():def __init__(self):self.k = ra.uniform(0.1, 0.3) # 蝙蝠的半径self.r = 1 # 南瓜的半径self.x = ra.randint(-1000, 1000) # 蝙蝠的横坐标self.y = ra.randint(-500, 500) # 蝙蝠的纵坐标self.f = ra.uniform(-3.14, 3.14) # 蝙蝠左右移动呈正弦函数self.speed = ra.randint(5, 10) # 蝙蝠移动速度self.color = ra.choice(colors) # 蝙蝠的颜色self.outline = 1 # 蝙蝠的外框大小(可不要)
构造函数__init__
定义了蝙蝠的初始属性,包括随机生成的半径、位置、速度和颜色。这使得每只蝙蝠都有独特的外观和运动轨迹。
2.3 移动与绘制方法
def move(self):if self.y <= 500:self.y += self.speedself.x += self.speed * math.sin(self.f)self.f += 0.1else:self.k = ra.uniform(0.1, 0.3)self.x = ra.randint(-1000, 1000)self.y = -500self.f = ra.uniform(-3.14, 3.14)self.speed = ra.randint(5, 10)self.color = ra.choice(colors)
move方法控制蝙蝠的上下左右移动,通过正弦函数实现左右晃动的效果。蝙蝠一旦超出画布范围,就会重置其位置和属性,继续在画布内随机漂浮。
def bat(self):t.penup()t.goto(self.x, self.y)t.pendown()t.pencolor(self.color)t.pensize(1)t.begin_fill()t.fillcolor(self.color)# 绘制蝙蝠的形状t.end_fill()
bat方法绘制蝙蝠的形状,利用Turtle库的绘图功能,通过路径的设置和填充颜色,实现了蝙蝠的视觉效果。
2.4 南瓜的绘制
def pumpkin(self):t.penup()t.goto(250 * self.r, 30 * self.r)t.pendown()t.seth(90)t.begin_fill()# 绘制南瓜t.end_fill()
pumpkin方法负责绘制南瓜的形状和特征(如眼睛、鼻子和嘴巴),使用循环和角度变化绘制出南瓜的圆滑形状,并通过不同的颜色和尺寸使南瓜显得更加生动。
2.5 动画循环
while True:tu.tracer(0)t.clear()for i in range(50):Bats[i].move()Bats[i].bat()tu.update()
在无限循环中,首先关闭Turtle的自动绘图(tu.tracer(0)
),然后清空之前的绘制,接着对前50只蝙蝠进行位置更新和绘制。tu.update()
用于手动更新绘图,使得动画效果更加流畅。
3. 总结
这段代码通过类和对象的设计,有效地实现了蝙蝠和南瓜的绘制及动画效果。每只蝙蝠具有独特的随机属性,使得动画呈现出多样化的效果。代码结构清晰,逻辑分明,通过方法的划分,使得功能模块化,便于维护和扩展。总的来说,这段代码成功地展示了万圣节的主题,适合用于学习Python的图形编程和面向对象编程的基础知识。
写在后面
我是一只有趣的兔子,感谢你的喜欢!
相关文章:
Python飞舞蝙蝠
目录 系列文章 写在前面 完整代码 代码分析 写在后面 系列文章 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码…...
shodan搜索引擎——土豆片的网安之路
工作原理: 在服务器上部署了各种扫描器,如漏洞扫描器,硬件扫描器,目录扫描器等等,24小时不停的扫描,批量对IP地址扫描 优点:方便,很快得到最新扫描结果,漏洞信息 缺点…...
uniapp 报错Invalid Host header
前言 在本地使用 nginx 反向代理 uniapp 时,出现错误 Invalid Host header 错误原因 因项目对 hostname 进行检查,发现 hostname 不是预期的,所以,报错 Invalid Host header 。 解决办法 这样做是处于安全考虑。但࿰…...
删除 AzureArcSetup 安装程序及提示
删除 AzureArcSetup 安装程序及提示 文章目录 删除 AzureArcSetup 安装程序及提示一、基础环境二、适用场景三、过程和方法 版权声明:本文为CSDN博主「杨群」的原创文章,遵循 CC 4.0 BY-SA版权协议,于2024年10月31日首发于CSDN,转…...
NGPT:在超球面上进行表示学习的归一化 Transformer
在超球面上进行表示学习的归一化 Transformer 1. 研究背景2. nGPT 的核心贡献超球面上的网络参数优化作为超球面上的变度量优化器更快的收敛速度 3. 从 GPT 到 nGPT 的演变标记嵌入和输出逻辑 层和块自注意力块MLP 块有效学习率在 ADAM 中的应用总结 4. 实验结果训练加速网络参…...
云原生Istio基础
一.Service Mesh 架构 Service Mesh(服务网格)是一种用于处理服务到服务通信的专用基础设施层。它的主要目的是将微服务之间复杂的通信和治理逻辑从微服务代码中分离出来,放到一个独立的层中进行管理。传统的微服务架构中&#x…...
Word2Vec优化与提升技巧
随着自然语言处理领域的快速发展,Word2Vec 已成为常见的词向量生成工具。然而,单纯依赖默认设置往往不能在实际业务需求中取得最佳效果。通过调整模型的参数、优化算法以及合理处理大规模语料库,可以显著提升模型的表现和效率,适应复杂的应用场景。这篇文章将带你深入了解 …...
Java 开发——(下篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus
上篇速递 - Spring Boot 3 MybatisPlus 五、静态资源访问 1. 基础配置 在 Spring Boot 中访问静态资源非常方便。Spring Boot 默认支持从以下位置加载静态资源: /META-INF/resources//resources//static//public/ 这些目录下的文件可以直接通过 URL 访问。 例…...
Redis 线程控制 问题
前言 相关系列 《Redis & 目录》《Redis & 线程控制 & 源码》《Redis & 线程控制 & 总结》《Redis & 线程控制 & 问题》 参考文献 《Redis分布式锁》 Redis如何实现分布式锁? Redis是单进程单线程的,指令执行时不会…...
005 IP地址的分类
拓扑结构如下 两台主机处于同一个网关下,通过ping命令检测,可以连通 &nbps; 拓扑结构如下 使用ping 检查两台电脑是否相通, 因为网络号不一样,表示两台电脑不在同一个网络,因此无法连通 拓扑结构如下 不在同一网络的PC要相…...
Java 并发工具(12/30)
目录 Java 并发工具 1. Executor 框架 1.1 线程池 1.2 ExecutorService 和 Future 2. 同步辅助类 2.1 CountDownLatch 2.2 Semaphore 3. 并发集合 3.1 ConcurrentHashMap 总结与后续 Java 并发工具 在多线程编程中,高效管理线程和任务至关重要。Java 提供…...
filebeat+elasticsearch+kibana日志分析
1 默认配置 1.1 filebeat filebeat-7.17.yml,从网关中下载k8s的配置,指定es和kibana的配置 通过kibana查询可以查询到日志了,但此时还不知道具体怎么用。 1.2 kibana 在Discover中创建索引格式:filebeat-*,得到如下图…...
Google Recaptcha V2 简单使用
最新的版本是v3,但是一直习惯用v2,就记录一下v2 的简单用法,以免将来忘记了 首先在这里注册你域名,如果是本机可以直接直接填 localhost 或127.0.0.1 https://www.google.com/recaptcha/about/ 这是列子 网站密钥:是…...
Rust编程中的浮点数比较
缘由:在看Rust编写的代码,发现了一行浮点数等于比较的代码,于是编辑如下内容。 在Rust中,进行浮点数比较时需要特别小心,因为浮点数由于精度限制无法精确表示小数,可能会导致直接比较(如 &…...
java访问华为网管软件iMaster NCE的北向接口
最近做的一个项目,需要读取华为一个叫iMaster NCE的网管软件的北向接口。这个iMaster NCE(以下简称NCE)用于管理项目的整个网络,尤其是光网络。业主要求我们访问该软件提供的对外接口,读取一些网络信息,比如…...
UV紫外相机
在产业设备领域,运用相机进行检测的需求很大,应用也很多样,对于图像传感器性能的期望逐年提升。在这样的背景下,可拍摄紫外线(UV:Ultra Violet)图像的相机拥有越来越广泛的应用场景。将UV照明和…...
第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会在广西桂林开幕
10月19日,第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会(以下简称“大会”)在广西桂林开幕,来自美国、英国、德国、俄罗斯、柬埔寨等25个国家约120名政府官员、专家学者和旅游业界精英齐聚一堂,围绕“亚洲及太平洋地区旅游业&a…...
Effective Java(第三版) _ 创建和销毁对象
一、前言 《Effective Java》 这本书,在刚从事 Java 开发的时候就被老师推荐阅读过,当时囫囵吞枣的看了一部分,不是特别的理解,也就搁置了,现在已经更新到第三版了,简单翻阅了一下,发现有些条例…...
你的EA无法运行的几种常见原因
大多数情况下,EA正常运行是指其能够自动开仓交易,毕竟EA的主要目的是根据某种策略自动进行交易。如果从网上下载或其他途径获得的EA在开始时能够正常交易,但在修改参数后却不再交易,可能的问题是什么呢?下面列举了一些…...
通过自定义指令实现图片懒加载
前提:使用到了VueUse插件。 先创建自定义插件文件夹 // 定义懒加载插件 import { useIntersectionObserver } from vueuse/core // 这个是VueUse里的一个方法export const lazyPlugin {install(app) {// 懒加载指令逻辑 定义全局指令app.directive(img-lazy, {mo…...
QT项目-仿QQ聊天(带宠物系统)
目录 一,项目介绍 二,开发环境 三,涉及技术 四,项目效果示例图 1,登录界面 2,主界面 3,聊天界面 4,功能界面 5,宠物界面 一,项目介绍 这是一个基于u…...
前端算法题:3216. 交换后字典序最小的字符串(力扣每日一题)
今日题目为:3216. 交换后字典序最小的字符串 题目详情: 给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的字典序最小的字符串。 如果两个数字都是奇数或都是偶数,则…...
29.1 时序监控和日志监控的对比,分析日志监控的核心诉求
本节重点介绍 : 监控系统分类时序监控和日志监控的对比轻量日志监控系统的诉求 监控系统分类 监控系统按照原理和作用大致可以分为三类 日志类(Log)调用链类(Tracing)度量类(Metrics) 日志类(…...
git仓库分支
操作 切换分支 git checkout 1.2.5 git checkout 1.3.0 使用命令切换分支之后,代码内容加载过后也是切换好的...
多模态机器学习在精准健康中的应用--九五小庞
这篇综述文章探讨了将多模态数据融合应用于医疗诊断和预后预测的最新研究进展。 本文作者们确定了三个主要的研究问题:多模态数据融合在健康领域的文献特征是什么?用于分析多模态健康数据的不同分析技术、方法和策略是什么?不同类型的异构数…...
提升网站速度与性能优化的有效策略与实践
内容概要 在数字化快速发展的今天,网站速度与性能优化显得尤为重要,它直接影响用户的浏览体验。用户在访问网站时,往往希望能够迅速获取信息,若加载时间过长,轻易可能导致他们转向其他更为流畅的网站。因此࿰…...
MySQL索引从基础到原理,看这一篇就够了
https://developer.aliyun.com/article/841106 https://zhuanlan.zhihu.com/p/29118331 索引创建使用总结 因为索引对于改善查询性能的作用是巨大的,所以我们的目标是尽量使用索引。 1. 索引的创建 • 1、在用于 where 判断 order 排序和 join 的(on)字段上创…...
普通高考预报名上传蓝底证件照手机自拍方法详解
普通高考预报名过程中,上传一张合规的蓝底证件照是必不可少的一步。本文将详细介绍如何使用手机自拍并使用工具来制作符合要求的蓝底证件照。注意,目前仅有广东等个别省份允许特定类型考生使用自拍照上传(例如普高预报名阶段、学考报名&#…...
Webserver(2.3)exec函数族
目录 exec函数族介绍execl函数execlp函数 exec函数族介绍 c语言中没有重载,因为不允许同名函数 一系列功能相似的函数称为函数族 exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容。 程序在运行的时候,fork一…...
LeetCode Hot100 - 子串篇
前言 挑战一个月刷完力扣的hot100,记录一下每题的思路~ 这次是子串相关的题目 (1)560. 和为 K 的子数组 ①暴力枚举,使用一个变量sum记录以l开头r结尾的情况 class Solution {public int subarraySum(int[] nums, int k) {int r…...
汕头市公司网站建设平台/网站推广优化价格
文章目录开篇介绍 -文章搬运cpp软件架构狮《C语言深度解剖》常用关键字总结const关键字作用总结规则const关键字作用const关键字应用举例const 修饰的只读变量节省空间,避免不必要的内存分配,同时提高效率修饰一般变量修饰数组修饰指针修饰函数的参数修饰…...
申请网站需要什么资料/上海网络营销有限公司
Description 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300时刻(从5点开始计时,秒为单位)给他的牛挤奶,一直到1000时刻。第二个农民在700时刻开始,在 1200时刻结束。第三个农民在1500时刻开始2100时刻结束。期…...
好用网站推荐/线上电脑培训班
Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。 判断自身属性是否存在 var o new Object(); o.prop exists;function changeO() {o.newprop o.prop;delete o.prop; }o.hasOwnProperty(prop); /…...
建网站怎么年赚/如何推广网站方法
这篇文章主要为大家详细介绍了wordpress不同页面侧边栏添加方法(小工具添加侧边栏),具有一定的参考价值,可以用来参考一下。我们在wordpress主题开发过程中,有时候需要对不同的页面设计不同的侧边栏。1、在主题的functions.php文件中添加如下…...
wordpress做下载型网站6/百度一下官方网
这几天一直在给我姐姐公司的开发一个新的软件,方便他们使用。这个软件使用C#Sql Server建设的,基本上算是完成了,但是今天他们提出了一个功能数据的导出功能,我在网上搜索了一下,再CodePorject发现了RKLib的导入导出的…...
营销型网站建设 网络服务/重庆seo小潘大神
首先我们先在cocos编辑器中引入jsencrypt.min.js这个文件。(如图) 此时它会提示你“是否将当前载入的jsencrypt.min.js脚本设置为插件”,因为我们引入的js文件是第三方的插件,所以,我们选择是。(如图&…...