星辰秘典:揭示Python项目的宇宙奥秘——宇宙星空模拟器(改)

news/2024/11/29 22:40:27/

博主:命运之光

🌸专栏:Python星辰秘典

🐳专栏:web开发(html css js)

❤️专栏:Java经典程序设计

☀️博主的其他文章:点击进入博主的主页

前言:你好,欢迎来到我的博客。我是一个热爱编程的人,特别喜欢用Python这门语言来创造一些有趣的图形项目。在这篇博客中,我将和你分享一些我用Python写的小的图形项目,包括它们的原理,代码和效果。我希望你能从中学到一些有用的知识,也能感受到编程的乐趣。如果你对我的项目有任何问题或建议,欢迎在评论区留言,我会尽快回复你。让我们开始吧!

目录

项目名称: 宇宙星空模拟器

简介

特色功能

连线效果

星云效果

使用说明

项目展示

动态图展示

图片展示

 项目源代码 

如何运行项目(超简单)

1.win+r打开命令行窗口 

2.在窗口中复制粘贴下面内容

打开pycharm

step1

step2

复制粘贴源代码运行

项目总结


项目名称: 宇宙星空模拟器

简介

宇宙星空模拟器是一个用Python和Pygame库创建的小型项目,它可以模拟宇宙中的星星、星系和星云,并展现出美丽的星空效果。通过这个模拟器,你可以欣赏到宇宙中的无尽星辰,感受宇宙的浩瀚和神秘。

特色功能

星星的随机生成: 项目通过随机生成星星的位置、大小、颜色和透明度,使得每个星星都具有独特的特点,营造出绚丽多彩的星空效果。

连线效果

星星之间会随机生成连线,形成星星之间的关联,让整个星空更加生动有趣。

爆炸效果: 当点击鼠标左键时,选中的星星将会爆炸,并产生出多个粒子效果,增加了交互和视觉上的动感。

星云效果

项目中还包含了星云效果,随机生成星云的位置、大小和颜色,为星空增添了神秘的氛围。

使用说明

运行代码: 需要安装Python和Pygame库,然后运行代码即可打开宇宙星空模拟器。

鼠标交互: 可以使用鼠标左键点击星星,触发爆炸效果。

自定义设置: 可以根据自己的需求修改代码中的参数,例如星星数量、连线概率和帧率等,来调整星空的效果和动画速度。

项目展示

动态图展示

 

图片展示

 

 

 项目源代码 

import pygame
import random
import math# 初始化pygame
pygame.init()# 显示窗口的宽度和高度
width, height = 800, 600# 创建一个窗口
screen = pygame.display.set_mode((width, height))# 设置窗口标题
pygame.display.set_caption("宇宙星空模拟器")# 定义星星类
class Star:def __init__(self):self.x = random.randint(0, width)self.y = random.randint(0, height)self.size = random.randint(1, 3)self.color = (random.randint(100, 255), random.randint(100, 255), random.randint(100, 255))self.alpha = random.randint(50, 255)def draw(self):surface = pygame.Surface((self.size * 2, self.size * 2), pygame.SRCALPHA)surface.set_alpha(self.alpha)pygame.draw.circle(surface, self.color, (self.size, self.size), self.size)screen.blit(surface, (self.x - self.size, self.y - self.size))def draw_line(self, other_star):pygame.draw.line(screen, self.color, (self.x, self.y), (other_star.x, other_star.y))def explode(self):explosion_particles = []for _ in range(20):dx = random.uniform(-1, 1)dy = random.uniform(-1, 1)speed = random.uniform(1, 5)particle = ExplosionParticle(self.x, self.y, dx, dy, speed)explosion_particles.append(particle)return explosion_particles# 定义爆炸粒子类
class ExplosionParticle:def __init__(self, x, y, dx, dy, speed):self.x = xself.y = yself.dx = dxself.dy = dyself.speed = speedself.size = random.randint(1, 3)self.color = (random.randint(100, 255), random.randint(100, 255), random.randint(100, 255))def move(self):self.x += self.dx * self.speedself.y += self.dy * self.speeddef draw(self):pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.size)# 定义星云类
class Cloud:def __init__(self):self.x = random.randint(0, width)self.y = random.randint(0, height)self.size = random.randint(20, 50)self.color = (random.randint(100, 200), random.randint(100, 200), random.randint(100, 200))self.alpha = random.randint(50, 150)def draw(self):surface = pygame.Surface((self.size, self.size), pygame.SRCALPHA)surface.set_alpha(self.alpha)pygame.draw.circle(surface, self.color, (self.size // 2, self.size // 2), self.size // 2)screen.blit(surface, (self.x - self.size // 2, self.y - self.size // 2))# 定义星系类
class Galaxy:def __init__(self, center_x, center_y, num_stars, radius):self.center_x = center_xself.center_y = center_yself.num_stars = num_starsself.radius = radiusself.stars = []for _ in range(self.num_stars):angle = random.uniform(0, 2 * math.pi)dist = random.uniform(0, self.radius)x = self.center_x + dist * math.cos(angle)y = self.center_y + dist * math.sin(angle)size = random.randint(1, 3)color = (random.randint(100, 255), random.randint(100, 255), random.randint(100, 255))alpha = random.randint(50, 255)self.stars.append((x, y, size, color, alpha))def draw(self):for star in self.stars:x, y, size, color, alpha = starsurface = pygame.Surface((size * 2, size * 2), pygame.SRCALPHA)surface.set_alpha(alpha)pygame.draw.circle(surface, color, (size, size), size)screen.blit(surface, (x - size, y - size))# 创建星星列表
stars = []
for _ in range(200):stars.append(Star())# 创建星云列表
clouds = []
for _ in range(10):clouds.append(Cloud())# 创建星系列表
galaxies = []
for _ in range(3):x = random.randint(0, width)y = random.randint(0, height)num_stars = random.randint(50, 100)radius = random.randint(50, 100)galaxies.append(Galaxy(x, y, num_stars, radius))# 创建爆炸粒子列表
explosion_particles = []# 游戏循环
running = True
clock = pygame.time.Clock()
while running:# 处理退出事件for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN:if event.button == 1:  # 鼠标左键点击mouse_pos = pygame.mouse.get_pos()for star in stars:if math.sqrt((star.x - mouse_pos[0]) ** 2 + (star.y - mouse_pos[1]) ** 2) < star.size:explosion_particles += star.explode()stars.remove(star)# 填充背景色screen.fill((0, 0, 0))# 更新和绘制星云for cloud in clouds:cloud.draw()# 更新和绘制星系for galaxy in galaxies:galaxy.draw()# 更新和绘制星星for star in stars:star.draw()# 更新和绘制爆炸粒子for particle in explosion_particles:particle.move()particle.draw()# 绘制星星之间的连线for i, star in enumerate(stars):for other_star in stars[i + 1:]:if random.random() < 0.0005:  # 调整连线的概率star.draw_line(other_star)pygame.time.delay(1)  # 添加延迟# 限制帧率clock.tick(30)# 更新屏幕显示pygame.display.flip()# 退出游戏
pygame.quit()

如何运行项目(超简单)

在运行上述代码之前,你需要确保你的环境中已经安装了Pygame依赖项:

Pygame:一个用于开发游戏的Python库。你可以使用以下命令通过pip安装Pygame

如果没有安装用以下方法进行安装

1.win+r打开命令行窗口 

2.在窗口中复制粘贴下面内容

使用国内的镜像源:将pip的默认源替换为国内的镜像源可以加快下载速度。你可以使用以下命令来更换pip的源:

下载:Pygame:一个用于游戏开发的Python库,用于创建游戏界面和处理用户输入。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame

下载:numpy:一个用于数值计算和数组操作的Python库。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

打开pycharm

step1

step2

复制粘贴源代码运行

项目总结

宇宙星空模拟器是一个基于Python和Pygame库的小型项目,旨在模拟宇宙中的星星、星系和星云,呈现出绚丽多彩的星空效果。通过这个模拟器,用户可以欣赏到宇宙的浩瀚与神秘,感受到宇宙中无尽星辰的美妙。

在项目中,使用随机生成的星星、星云和星系,以及交互性的爆炸效果和连线效果,营造出一个动感十足的宇宙场景。用户可以通过点击鼠标触发星星的爆炸效果,产生出迷人的粒子效果。同时,星星之间的连线增加了整个星空的生动感。


http://www.ppmy.cn/news/674642.html

相关文章

使用爬虫抓取网站异步加载数据

什么是异步加载&#xff1f; 向网站进行一次请求&#xff0c;一次只传部分数据。如&#xff1a;有些网页不需要点击下一页&#xff0c;其内容也可以源源不断地加载。如何发现异步加载&#xff1f; 1、打开浏览器&#xff0c;右键选择“检查” 2、点击“Network”、“XHR” …

爬虫之异步爬取加载数据

什么是异步加载&#xff1f; 向网站进行一次请求&#xff0c;一次只传部分数据。如&#xff1a;有些网页不需要点击下一页&#xff0c;其内容也可以源源不断地加载。如何发现异步加载&#xff1f; 1、打开浏览器&#xff0c;右键选择“检查” 2、点击“Network”、“XHR” 这样…

php 滑块 爬虫_phpspider爬虫框架如何爬取异步加载的数据?

我找到些资料希望对楼主有所帮助 什么是异步加载&#xff1f; 向网站进行一次请求&#xff0c;一次只传部分数据。如&#xff1a;有些网页不需要点击下一页&#xff0c;其内容也可以源源不断地加载。 如何发现异步加载&#xff1f; 1、打开浏览器&#xff0c;右键选择“检查” …

佳能相机断电0KB0字节DAT文件修复为MP4或MOV视频

做专业摄像的朋友常遇到这样一个问题&#xff1a;用佳能相机录像回来导视频素材时&#xff0c;或者剪辑的时候发现&#xff0c;文件夹里其它正常的视频都是MOV或者MP4&#xff0c;唯独有一个特别的文件&#xff0c;格式为DAT, 大小为0KB&#xff0c; 文件打不开&#xff0c;导不…

移远通信推出新款卫星通信模组CC660D-LS,加速IoT终端直连卫星

上海&#xff0c;2023年6月27日 — 在2023上海世界移动通信大会&#xff08;MWC Shanghai&#xff09;期间&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;推出其在卫星通信领域的最新力作—— CC660D-LS 模组。该模组现阶段面向北美和欧洲市场&#…

Qt和MySQL的连接

具体视频的教程 视频教程 我的文章是做一下补充的 流程&#xff1a; 第一点你要确保你的数据库的位数&#xff0c;如果你数据库位数的是32位&#xff0c;mingw编译的时候就需要选择的是32位**&#xff08;在下面会提到&#xff09;** 去到所在的文件 点击.pro文件进行编译…

vesta建模

用vesta可以手动建模&#xff0c;参考学习视频&#xff1a; https://www.bilibili.com/video/BV1RK4y1C7NH?fromsearch&seid7101935522119320084 空间群、晶胞常数等都可以手动设置。

Vista ——俄罗斯第一流行乐手

姓名&#xff1a;Vista 出生&#xff1a;1981年2月19日 他是俄罗斯的当红男歌手&#xff0c;但是又有一点点另类。 有五个关于他的说法&#xff1a; 1&#xff09;.他被认为是alien 2&#xff09;.他自己从来不提Vitas 3&#xff09;.他特别喜欢鱼 4&#xff09;…