Python基础教程——用Python写一个流星雨!(附源码)
“流星雨是世间宝藏,而你是我的人间理想”
写在前面
冲鸭,冬鱼带你一起去看流星雨!这里有蓝色系和粉色系的流星雨,小伙伴们喜欢蓝色系的流星雨,还是粉色系的流星雨呢?当然啦,也可以改成你喜欢的颜色哦,一起来看看吧~
环境:Python
软件:PyCharm
详细分析
这是一个用 Python 语言编写的爱情表白程序,包含两个部分,一个是流星雨动画,另一个是表白窗口。用户可以选择同意或拒绝表白,如果同意,就会看到一个流星雨动画,如果拒绝,则需要再次选择,直到同意为止。下面对程序进行详细分析:
1.导入库和模块
程序中使用了 turtle 库、random 库、tkinter 库和 math 库。turtle 库用于绘制流星,random 库用于生成随机数,tkinter 库用于实现表白窗口,math 库用于计算弧度。
2.定义流星类
定义了一个 Star 类用于描述流星的属性和行为。在初始化函数中,随机生成了流星的初始位置、大小、颜色、速度和角度等属性。在 star 函数中实现了绘制流星的具体过程,使用 turtle 库中的函数在画布上绘制流星。在 move 函数中实现了流星的运动轨迹,使流星向下和向右方向移动,并且当流星超出画布边界时,重新生成流星的位置和属性。
3.生成所有流星
生成一个包含 100 个流星的列表,每个流星的属性随机生成。
4.绘制流星雨
使用 while 循环实现流星雨的动画效果,每次循环清空画布,并绘制所有流星的运动轨迹和形状,然后更新画布,使其显示出来。
5.定义爱情表白窗口
使用 tkinter 库实现一个简单的表白窗口,包含一段文字和两个按钮:同意和拒绝。当点击同意按钮时,窗口关闭,跳转到流星雨动画界面。如果点击拒绝按钮,则弹出提示框,提醒用户再次选择。
6.绑定退出事件
使用 protocol() 函数绑定了退出事件,当点击窗口的关闭按钮时,弹出提示框,让用户再次确认是否退出程序。
总体来说,这个流星雨程序使用了多个库和模块,实现了流星雨动画和表白窗口的效果,并实现了一些交互功能,带来了一些新鲜和有趣的体验。
运行结果
蓝色流星雨
粉色流星雨
完整代码
import turtle as tu
import random as ra
import tkinter as tk
import math
def Meteors():
tu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0) #设置画布大小
tu.bgcolor('black') #设置画布颜色
tu.title("流星雨")
t = tu.Pen()
t.hideturtle() #隐藏画笔
# colors = ['skyblue', 'white', 'cyan', 'aqua'] #流星的颜色列表,蓝色
colors = ['pink', 'lightpink', 'deeppink'] #粉色
class Star(): #流星类
def __init__(self):
self.r = ra.randint(50,100)
self.t = ra.randint(1,3)
self.x = ra.randint(-2000,1000) #流星的横坐标
self.y = ra.randint(444, 999) #流星的纵坐标
self.speed = ra.randint(5,10) #流星移动速度
self.color = ra.choice(colors) #流星的颜色
self.outline = 1 #流星的大小
def star(self): #画流星函数
t.pensize(self.outline) #流星的大小
t.penup() #提笔
t.goto(self.x,self.y) #随机位置
t.pendown() #落笔
t.color(self.color)
t.begin_fill()
t.fillcolor(self.color)
t.setheading(-30)
t.right(self.t)
t.forward(self.r)
t.left(self.t)
t.circle(self.r*math.sin(math.radians(self.t)),180)
t.left(self.t)
t.forward(self.r)
t.end_fill()
def move(self): #流星移动函数
if self.y >= -500: #当流星还在画布中时
self.y -= self.speed #设置上下移动速度
self.x += 2*self.speed #设置左右移动速度
else:
self.r = ra.randint(50,100)
self.t = ra.randint(1,3)
self.x = ra.randint(-2000,1000)
self.y = 444
self.speed = ra.randint(5,10)
self.color = ra.choice(colors)
self.outline = 1
Stars = [] #用列表保存所有流星
for i in range(100):
Stars.append(Star())
while True: #开始绘制
tu.tracer(0)
t.clear()
for i in range(100): #80个流星
Stars[i].move()
Stars[i].star()
tu.update()
tu.mainloop()
def love():
root = tk.Tk()
root.title('?')
root.resizable(0, 0)
root.wm_attributes("-toolwindow", 1)
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()
widths = 300
heights = 100
x = (screenwidth - widths) / 2
y = (screenheight - heights) / 2
root.geometry('%dx%d+%d+%d' % (widths, heights, x, y)) # 设置在屏幕中居中显示
tk.Label(root, text='亲爱的,做我女朋友好吗?', width=37, font=('宋体', 12)).place(x=0, y=10)
def OK(): # 同意按钮
root.destroy()
# 同意后显示相应的效果
Meteors()
def NO(): # 拒绝按钮,拒绝不会退出,必须同意才可以退出哦~
tk.messagebox.showwarning('?', '再给你一次机会!')
def closeWindow():
tk.messagebox.showwarning('?', '逃避是没有用的哦')
tk.Button(root, text='好哦', width=5, height=1, command=OK).place(x=80, y=50)
tk.Button(root, text='不要', width=5, height=1, command=NO).place(x=160, y=50)
root.protocol('WM_DELETE_WINDOW', closeWindow) # 绑定退出事件
root.mainloop()
if __name__ == "__main__":
love()
最后这里免费分享给大家一份Python学习资料,包含视频、源码。课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
编程资料、学习路线图、源代码、软件安装包等!
看下方图片哦(掉落)↓↓↓
① Python所有方向的学习路线图
,清楚各个方向要学什么东西
② 100多节Python课程视频
,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例
,学习不再是只会理论
④ 华为出品独家Python漫画教程
,手机也能学习
⑤ 历年互联网企业Python面试真题
,复习时非常方便****
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!