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

news2024/9/25 21:27:57

博主:命运之光

🌸专栏: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 = x
        self.y = y
        self.dx = dx
        self.dy = dy
        self.speed = speed
        self.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.speed
        self.y += self.dy * self.speed

    def 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_x
        self.center_y = center_y
        self.num_stars = num_stars
        self.radius = radius
        self.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 = star
            surface = 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 = False
        elif 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.coloradmin.cn/o/696184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.7C++基类和派生类转换

C 基类和派生类转换 C中基类与派生类之间的转换有两种方式&#xff1a; 1、向上转换 向上转换是将派生类的指针或引用转换为基类的指针或引用。 向上转换是安全的&#xff0c;因为基类是派生类的公共部分&#xff0c;可以保证派生类对象的所有成员都可以被基类指针或引用访…

Windows11 anaconda配置pytorch环境

生成 .condarc 文件&#xff0c;位于C:\Users\Admin\ conda config --set show_channel_urls yes 记事本打开 .condarc 文件&#xff0c;添加以下内容&#xff1a; channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsingh…

北上广深共享办公室市场概览

在北上广深这四个城市&#xff0c;共享办公室已经成为一种日益流行的办公模式。随着经济的快速发展和科技创新的不断推进&#xff0c;越来越多的企业开始青睐共享办公室&#xff0c;以适应灵活办公和协作办公的需求。那么&#xff0c;2023年共享办公室市场的前景如何呢&#xf…

头条搜索精选 参数分析

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!头条搜索精选 参数分析 环境 win10Python3.9Chrome抓包接口分析 主要是需要这一块的内容 通过抓包分析发…

一、机器学习概述

一、机器学习概述1.机器学习初步认识2.机器学习类型1&#xff09;监督学习a.分类b.回归 2&#xff09;无监督学习a.聚类b.降维 3.机器学习方法1&#xff09;模型2&#xff09;损失函数3&#xff09;优化算法4&#xff09;模型评估指标 4.开发流程 一、机器学习概述 1.机器学习初…

Openlayers图文版实战,vue项目从0到1做基础配置

Openlayers的实战教程 分为**图文版** 和 **视频版**&#xff0c; 这里的是图文版&#xff0c;包含基础知识介绍和*实战的源代码*&#xff0c;示例效果以gif动图的形式展现出来。 **视频版** 正在录制中&#xff0c;很快会上线&#xff0c;敬请期待~&#xff0c; 如有问题&am…

Java如何实现手动连接数据库(Mysql或Oracle) | 超级详细,建议收藏

&#x1f468;‍&#x1f393;作者&#xff1a;bug菌 ✏️博客&#xff1a; CSDN、 掘金、 infoQ、 51CTO等 &#x1f389;简介&#xff1a;CSDN博客专家&#xff0c;C站历届博客之星Top50&#xff0c;掘金/InfoQ/51CTO等社区优质创作者&#xff0c;全网粉丝合计10w&#xff0c…

ant design vue 配置菜单外部打开

实现如下 菜单配置 前端项目地址&#xff1a;http://localhost:3000 菜单路径&#xff1a;dataCenter/HealthData 打开方式&#xff1a;外部 在项目中src-->config-->router.config.js文件 将需要再外部打开的菜单地址进行如下配置 菜单地址&#xff1a;/dataCenter/Hea…

软件测试面试题(完整版)

1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&#xff0c;可以实现跨平台&#xff0c;客户端零维护&#xff0c;维护成本低&#xff0c;但是个性化能力低&#xff0c;响应速度较慢 C/S响应速度快&#xff0c;安全性强&#xff0c;一般应用于局域网中&#xff0c…

力姆泰克LBP滚珠丝杠电动推杆

LBP滚珠丝杠电动推杆 内含长寿命润滑脂&#xff0c;免维护 向下翻动查看更多 力姆泰克电动推杆 高强度/高耐磨材料选择&#xff0c;高精度的零部件加工&#xff0c;先进的壳体设计理念&#xff0c;造就高承载能力&#xff0c;抗冲击&#xff0c;低噪音&#xff0c;长寿命的优…

【AUTOSAR】BMS开发实际项目讲解(八)----BMS热管理冷却功能

热管理参数 项目 模式 BEV 进入条件&#xff08;℃&#xff09; 退出条件&#xff08;℃&#xff09; 目标水温&#xff08;℃&#xff09; 目标流速&#xff08;L/min&#xff09; 冷却 一级冷却 行车 T1_in35 T1_out28 20 20 快充 T1_in30 T1_out…

Vue3 刨析响应式 ref 原理

目标 了解 Vue &#xff0c;手写一个方法&#xff0c;实现响应式&#xff0c;并读懂响应式 源码 class MyRef {constructor(value) {this._value value}// 访问器get value() {console.log(触发 getter 函数 访问);return this._value}// 读取器set value(newVal) {console.l…

微电网数字化系统硬件设备在储能行业中的应用

安科瑞虞佳豪 1如果说火爆的储能行业堪比新能源赛道上的皇冠&#xff0c;那么工商业储能就是皇冠上的明珠。 提及储能&#xff0c;人们习惯更多地关注源网侧储能电站&#xff08;大储&#xff09;身上&#xff0c;探讨发电侧配储、利用率、共享储能模式等话题&#xff0c;但其…

不一般!R型变压器直流电阻和绝缘电阻背后的秘密原来是这样!

一般来说&#xff0c;除了技术人员之外&#xff0c;我们可能不太清楚变压器的一些内部电阻&#xff0c;比如什么是R型变压器的直流电阻&#xff1f;事实上&#xff0c;这些都是变压器参数中的一些重要信息&#xff0c;通常与变压器的质量和使用有关。让我们和小r一起来看看什么…

AR项目问题汇总

1、unity使用URP 导致ARFoundation黑屏 (16条消息) unity使用URP 导致ARFoundation黑屏_arfoundation运行iphone黑屏_weixin_46813963的博客-CSDN博客https://blog.csdn.net/weixin_46813963/article/details/117509322Configuring the AR Camera background using a Scriptab…

Android Studio中App Inspection 或Profiler里网络请求数据显示中文乱码解决办法

如题&#xff0c;在Android开发时经常需要网络请求分析&#xff0c;但是Response 里面的中文经常乱码&#xff0c;用如下办法可解决 效果如下&#xff1a; 解决办法 Android studio在 Help中找到Edit Custom VM Options… 并打开文件&#xff0c;在文件中添加 -Dfile.encod…

记录一次 vite 配置别名路径 打包时出错的bug

vite多页应用,由于在vite.config.ts中define中配置的常量pages,而路径别名也有pages,所有导致打包时替换路径出错,将pages常量注释掉就好了 export default defineConfig({root: getRoot(), // 项目根路径base: "/", // 公共基础路径envDir: resolve(__dirname), /…

SpringBoot03:yaml配置注入

目录 一、yaml语法学习 1、配置文件 2、yaml概述 3、yaml基础语法 3.1、字面量&#xff1a;普通的值【数字、布尔值、字符串】 3.2、对象、Map(键值对) 3.3、行内写法&#xff1a; 3.4、数组&#xff08;list、set&#xff09; 二、注入配置文件 1、yaml注入配置文件…

selenium\webdriver\remote\errorhandler.py:242: SessionNotCreatedException问题解决

报错信息&#xff1a; raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 112 E Current browser versi…

超强,Pytest自动化测试框架 fixture 传参实战(案例)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 为了提高复用性&a…