python实现星空效果

2023-10-26

以前用DEV C++这个编译器时,看过easyx 这个C++图形库,文档中有范例程序,是模拟星空的,觉得的不错,今天有空,把Crossin用python写的一个雪花模拟程序,修改了一下,效果和easyx的基本一模一样。

使用easyx的C++代码:

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

#define MAXSTAR 200	// 星星总数

struct STAR
{
	double	x;
	int		y;
	double	step;
	int		color;
};

STAR star[MAXSTAR];

// 初始化星星
void InitStar(int i)
{
	star[i].x = 0;
	star[i].y = rand() % 480;
	star[i].step = (rand() % 5000) / 1000.0 + 1;
	star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);	// 速度越快,颜色越亮
	star[i].color = RGB(star[i].color, star[i].color, star[i].color);
}

// 移动星星
void MoveStar(int i)
{
	// 擦掉原来的星星
	putpixel((int)star[i].x, star[i].y, 0);

	// 计算新位置
	star[i].x += star[i].step;
	if (star[i].x > 640)	InitStar(i);

	// 画新星星
	putpixel((int)star[i].x, star[i].y, star[i].color);
}

// 主函数
int main()
{
	srand((unsigned)time(NULL));	// 随机种子
	initgraph(640, 480);			// 创建绘图窗口

	// 初始化所有星星
	for(int i = 0; i < MAXSTAR; i++)
	{
		InitStar(i);
		star[i].x = rand() % 640;
	}

	// 绘制星空,按任意键退出
	while(!_kbhit())
	{
		for(int i = 0; i < MAXSTAR; i++)
			MoveStar(i);
		Sleep(20);
	}

	closegraph();					// 关闭绘图窗口
	return 0;
}

效果:

 

 

# -*- coding: utf-8 -*-
 
import pygame
import random
 
# 初始化pygame
pygame.init()  
# 根据背景图片的大小,设置屏幕长宽
SIZE = (640, 480) 
screen = pygame.display.set_mode(SIZE) 
pygame.display.set_caption("star") 
 
# 雪花列表
snow_list = []
 
# 初始化星空:[x坐标, y坐标, x轴速度, y轴速度]
for i in range(200):
    x = random.randrange(0, SIZE[0])
    y = random.randrange(0, SIZE[1])
    sxy=(random.randrange(1,5000)/1000)+1
    colorvalue=int(sxy*255/6+0.5)    
    starcolor=(colorvalue,colorvalue,colorvalue)
    snow_list.append([x, y, sxy, starcolor])
 
clock = pygame.time.Clock()
pixel_array = pygame.PixelArray(screen) 
# 游戏主循环
done = False
while not done:
    # 消息事件循环,判断退出
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
 
    # 黑背景/图片背景
    screen.fill((0, 0, 0))    

    # 雪花列表循环
    for i in range(len(snow_list)):
        # 绘制雪花,颜色、位置、大小
        #第一种方法
        # pygame.draw.circle(screen, snow_list[i][3],(snow_list[i][0],snow_list[i][1]),1,0)
        #第二种方法
        screen.fill(snow_list[i][3], ((snow_list[i][0],snow_list[i][1]), (1, 1)))
        #第三种方法
        #pixel_array[snow_list[i][0], snow_list[i][1]] =snow_list[i][3]
         #pygame.time.wait(20)       
        
        #pixel_array[snow_list[i][0], snow_list[i][1]] =(0,0,0)        
        # 移动雪花位置(下一次循环起效)
        snow_list[i][0] += int(snow_list[i][2])
        
        # 如果雪花落出屏幕,重设位置
        if snow_list[i][0] > SIZE[0]:
            snow_list[i][0]=0

    #pixel_array.close()
    # 刷新屏幕
    pygame.display.flip()
    clock.tick(20)

# 退出 
pygame.quit()

在屏幕上画点,原来的雪花模拟是用的第一种方法,但对于星空来说,有点大了,所以用了第二种方法画点。第三种尝试了一下,放弃了。

效果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现星空效果 的相关文章

  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • for 循环 - 没有效果的语句

    由于某种原因 我收到错误 statement with no effect关于这个声明 for j idx j lt iter j increment printf from loop idx i int idx punc ctxt j 你
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 使用Python构建caffe(找不到-lboost_python3)

    我正在尝试用 python 构建 caffe 但它一直这样说 CXX LD o python caffe caffe so python caffe caffe cpp usr bin ld cannot find lboost pytho
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 为什么Python安装程序不断弹出?

    每当我尝试运行 Python 文件时 都会自动弹出此窗口 虽然 我可以关闭它 但有时它会连续打开 7 10 个窗口 这令人恼火 谁能告诉我为什么会发生这种情况 None
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • 将 pi 打印到小数点后几位

    w3resources 面临的挑战之一是将 pi 打印到小数点后 n 位 这是我的代码 from math import pi fraser str pi length of pi number of places raw input En
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • pandas - 组合行的字符串

    我有一个像这样的数据框 id text 1 DM HTN Enlarged prostate 2 hypertensive and on regular treatment 2 LBP 3 DM HTN Enlarged prostate
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • Python 单元测试:Nose 失败时重试?

    我有一个随机失败的测试 我想让它在发送错误消息之前重试多次 我将 python 与 Nose 一起使用 我写了以下内容 但不幸的是 即使使用 try except 处理 当第一次尝试测试失败时 Nose 也会返回错误 def test so
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • 任正非谈成功秘诀:28年只对准一个城墙口冲锋

    文 记者 赵东辉 李斌 刘诗平 蔡国兆 彭勇 何雨欣 任正非和华为公司 堪称当代商业史上的传奇 1987年 年满43岁的任正非和5个同伴集资2 1万元成立华为公司 利用两台万用表加一台示波器 在深圳的一个 烂棚棚 里起家创业 28年后 华为
  • 穿越火线排位赛显示该服务器,CF新段位S7枪王排位调整 排位分数和地图

    CF新段位S7枪王排位调整 排位分数和地图 本次体验服客户端正式更新同时S7枪王排位赛页开启了 本期枪王排位针对地图 段位分数和奖励上进行调整 不同段位分数和地图加成都不同 枪王排位第五赛季开始及优化丢掉大脑再丢烦恼 冲啥大冲啥小 冲啥都有
  • 【无标题】PAT作业1001 害死人不偿命的(3n+1)猜想

    题目要求简要概述 输入一个小于1000的正整数 如果该正整数为奇数 进行2 n的运算 如果为偶数 进行 3n 1 2的运算 反复进行计算 直至n 1后 输出运算的次数 解题方法 1 定义两个整形变量 分别用于输入n 记录运算次数 int n
  • 将压缩包里的图片显示到页面上示例

    在做项目的时候有个这样的需求 需要把压缩包里的图片预览显示出来 梳理一下就以下三步 下载压缩包 解压出文件 组成可用的图片URL 显示到图片标签上 实现这个功能过程还是走了些弯路的 也遇到一些坑 这里就不多废话了 直接上代码 希望能帮助各位
  • SVPWM所需要掌握的一些定理

    1 正弦定理 2 伏秒平衡 不懂 伏秒平衡 又称伏秒平衡 是指开关电源稳定工作状态下 加在电感两端的电压乘以导通时间等于关断时刻电感两端电压乘以关断时间 或指在稳态工作的开关电源中电感两端的正伏秒值等于负伏秒值 在SVPWM中 磁链等于电压
  • ORB-SLAM2第二节---双目地图初始化

    比起单目初始化 而双目实现地图的初始化非常简单 只需要一帧 左右目图像 即可完成初始化 行特征点统计 考虑用图像金字塔尺度作为偏移量 在当前点上下正负偏移量 r 内的纵坐标值都认为是匹配点可能存在的行数 之所以这样做 是因为极线矫正后仍然存
  • 创建steam账户反复人机验证_您必须先通过人机验证才能创建steam帐户怎么办

    展开全部 在注册steam帐户遇到提示必须通过人机验证才能创建62616964757a686964616fe4b893e5b19e31333433643062提示时 勾选注册页面中的进行人机验证 在人机身份验证界面中点击需要的图片并按照步骤
  • socket接收报错

    首先是没得到正确错误号 是因为windows平台WSAGetLastError得过之后就没了 所以需要int变量保存一下 发现错误号后知道是最后一个参数没有初始化复制 bzero buf sizeof buf bzero cli adr s
  • PostgreSQL 多表关联删除

    用PostgreSQL数据库删除某个表数据 student 需要关联多个表 如classroom 作为条件 以下语句走不通 delete s from student s classroom c where s cid c id and s
  • JPA基本数据类型映射

    Employ author Administrator Entity Table name T EMPLOY SequenceGenerator name SEQ sequenceName SEQ SYS FUNC MENU initial
  • 利用MATLAB编写一段表格数据处理并作图

    使用MATLAB处理表格数据并作图可以使用以下步骤 读入表格数据 使用readtable或者xlsread函数读入Excel或者其他格式的表格数据 数据预处理 使用MATLAB的数组运算和统计函数对读入的数据进行预处理 包括清洗缺失值 去除
  • hadoopRPC的使用

    1模拟namenode的查询元数据 public interface ClientNamenodeProtocol public static final long versionID 1L 会读取这个版本号 但可以和客户端的不一样 没有校
  • 【数据结构】树(五)—— 二叉排序树(C语言版)

    数据结构 二叉排序树 C语言版 前言 一 二叉排序树的定义 二 二叉排序树的性质 三 二叉排序树的操作 1 二叉排序树常用存储结构 2 二叉排序树的查找 递归实现 查找 二叉树T 中键值为 key 的节点 非递归实现 查找 二叉树T 中键值
  • java中sum是什么_Java中的IntStream sum()方法

    sum Java中使用IntStream类的方法返回此流中元素的总和 语法如下 int sum 要使用Java中的IntStream类 请导入以下包 import java util stream IntStream 创建IntStream
  • 不知道华为手机识别图片文字怎么弄?2个识别方法收好了

    我们有时候会将书籍上的内容拍照下来进行抄写 但是面对大段的文字 手动抄写会比较花费时间 其实我们可以进行手机识别图片文字 一键进行文字内容提取 这样就方便多了 那你们知道华为手机识别图片文字怎么弄吗 下面我就来分享两个手机识别的方法给大家
  • python安装pip

    pip python2 安装 wget https bootstrap pypa io 2 6 get pip py python2 get pip py pip V pip3 python3 安装 wget https bootstrap
  • 攻防世界PWN新手练习区——cgpwn2

    攻防世界PWN新手练习区 cgpwn2 首先检查文件的有哪些保护 checksec cgpwn2 32位程序 用IDA反编译文件 main函数中只有hello函数 点击查看 整个函数看起来是在进行某种算法 但关键点在于return gets
  • 计算机的起源与发展(概述+习题)

    概述 计算机 computer 也称为 电脑 是一种具有计算功能 记忆功能和逻辑判断功能的机器设备 它能接收数据 保存数据 按照预定的程序对数据进行处理 并提供和保存处理结果 计算机的起源 图灵机 图灵机是一种抽象的计算模型 并没有真正地生
  • H3CNE综合实验

    H3CNE综合实验 实验拓扑 实验需求 按照图示配置IP地址 SW1和SW2之间的直连链路配置链路聚合 公司内部业务网段为Vlan10和Vlan20 Vlan10是市场部 Vlan20是技术部 要求对Vlan 进行命名以便识别 PC1属于V
  • python实现星空效果

    以前用DEV C 这个编译器时 看过easyx 这个C 图形库 文档中有范例程序 是模拟星空的 觉得的不错 今天有空 把Crossin用python写的一个雪花模拟程序 修改了一下 效果和easyx的基本一模一样 使用easyx的 代码 编