用C语言实现 流星雨

用C语言实现 流星雨,第1张

数字流星代码:

//流星雨cpp:Defines the entry point for the console application

//

///////////////////////////////////////////////////

//程序名称:数字流星雨

//最后修改:2006-10-15

///////////////////////////////////////////////////

#include<windowsh>

#include<timeh>

#include<stdlibh>

#include"graphicsh"

#include<conioh>

#include<mathh>

/宏定义/

#define PI 31415926//圆周率

#define WIDTH 200//屏幕宽度,流星出生区域

#define HEIGHT 150//屏幕高度,流星出生区域

#define V 20//流星速度,单次移动的像素数

#define LENGTH 20//流星字符数

#define DELAY 30//延时

#define NUM 45//流星个数

/定义流星结构体/

struct meteor

{

int x0;

int y0;

int yh;

char str[LENGTH];

}me[NUM]={0};

/函数声明/

char AsciiRand();

void Move(charp);

void InitMeteor(struct meteorme);

int color(int y,int y0,int yh);

void Meteors(struct meteor me[]);

/主函数/

///int main(void)

int _tmain(int argc,_TCHARargv[]){

char c='\0';//接收键盘输入的变量

initgraph(WIDTH,HEIGHT);//初始化WIDTHHEIGHT的绘图窗口

HWND hwnd=GetHWnd();//获得窗口句柄

SetWindowText(hwnd,"Gavin Liu数字流星雨");//修改窗口名称

ShowWindow(hwnd,SW_SHOWMAXIMIZED);//最大化显示窗口

MessageBox(hwnd,TEXT("点击确定开始演示流星雨效果,Esc键退出"),TEXT("提示"),MB_OK|MB_ICONWARNING);//弹出提示

srand((unsigned)time(NULL));//设置随机种子

for(int i=0;i<NUM;i++){//对NUM个流星体初始化

InitMeteor(&me<i>);

}

while(c!=27){

BeginBatchDraw();//开始批量绘图

Meteors(me);//绘制一帧动画

FlushBatchDraw();//执行未完成的绘制任务

Sleep(DELAY);//延时

cleardevice();//清屏

for(int i=0;i<NUM;i++){

me<i>yh+=V;

Move(me<i>str);

if(me<i>yh>HEIGHT+LENGTHV){

InitMeteor(&me<i>);

}

}

if(kbhit()){

c=getch();

}

}

EndBatchDraw();//结束批量绘图

closegraph();//结束绘图环境

return 0;

}

/函数体/

char AsciiRand(){//产生随机可见ASCII码

return((char)(rand()%(126-33)+33));

}

void Move(charp){//字符后移,可以使显示时字符相对屏幕位置不变

charpt=p+LENGTH;

while(pt>p){

(--pt)=(pt-1);

}

p=AsciiRand();

}

void InitMeteor(struct meteorme){//对一颗流星初始化

me->x0=rand()%WIDTH;

me->yh=me->y0=rand()%HEIGHT;

for(int i=0;i<LENGTH;i++)

{

(me->str+i)=AsciiRand();

}

}

int color(int y,int y0,int yh){//确定流星的颜色

int color;

//出生点之前的流星体置成黑色

if(y<y0){

color=0;

}

//流星颜色自头至尾按照余弦函数递减

else{

//尾迹消失

color=(int)(255cos((yh-y)PI/(2LENGTHV)));

}

return color;

}

//打印一帧流星的画面

void Meteors(struct meteor me[]){

//设置格式:背景透明,字符高度,字体粗细,字体

setbkmode(TRANSPARENT);

setfont(12,12,"宋体");

//开始打印一帧图像

int y;

for(int n=0;n<NUM;n++){

for(int j=0;j<LENGTH;j++){

//流星中第j个字符的纵坐标

y=me[n]yh-jV;

//设置颜色,流星的头部是白色的

setcolor(RGB(255(0==j),color(y,me[n]y0,me[n]yh),255(0==j)));

//打印字符

outtextxy(me[n]x0,y,me[n]str[j]);

}

}

}

扩展资料:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#include<文件名>

2、#include"文件名"

在明天,即10月21日13时是猎户座流星雨极大期,前后几天都能够见到,观测的最佳地点无疑是视野开阔、远离光源、没有高山或者建筑物遮挡的地方。那天是农历初五,月亮会在前半夜很早就落下,所以月光几乎不会对我们观测流星雨造成干扰。 

猎户座流星雨是世界七大流星雨之一,其母体彗星是家喻户晓的哈雷彗星,猎户座流星雨的特点表现为白色、速度快、亮流星多、峰值流量持续时间长,从而更适合公众进行观测。

预测在22日4点该流星雨辐射点会升起,如果在人多、比较繁华的大城市,每小时可以看到2颗,在乡村等光污染较小的地方理想情况下每小时能够看到20颗。流量不是很大,算是中等。而在10月23日,辉出现土木合月的天象,届时月亮都处于土星和木星附近,月相接近上弦,可以根据月亮去定位土星和木星。在本月是有多场美丽的天象哦,小伙伴们喜欢的话可以多多留意最近天空的变化。 

 

记得在前些年的时候在大学校园里看到了被称作“星月童话”的金星合月(据说本月14号也出现了),月亮以月牙的形态与金星相合,周围有狮子座的亮星交相辉映,很具有观赏性。当时的天空很美,由上到下从橙色过渡到深蓝色,像油画一般安谧。看到美丽的天象时,总是能让人进入到浪漫的遐想中,能够暂时脱离喧嚣沉浸在自然中,所以我个人很喜欢流星雨之类的天象奇观,有时间有机会还是要看一下呢。流星雨不仅给人心灵上的抚慰,更是一种美好愿景的寄托,看到流星雨时许下愿望没准就实现了呢。     

本篇文章给大家带来的内容是关于如何使用html实现流星雨的效果(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

<!doctype html>

<html>

<head>

<meta charset="GB2312" />

<title>流星雨</title>

<meta name="keywords" content="关键词,关键字">

<meta name="description" content="描述信息">

<style>

body {

margin: 0;

overflow: hidden;

}

</style>

</head>

<body>

<!--

<canvas>画布 画板 画画的本子

-->

<canvas width=400 height=400 style="background:#000000;" id="canvas"></canvas>

<!--

javascript

画笔

-->

<script>

//获取画板

//doccument 当前文档

//getElement 获取一个标签

//ById 通过Id名称的方式

//var 声明一片空间

//var canvas 声明一片空间的名字叫做canvas

var canvas = documentgetElementById("canvas");

//获取画板权限 上下文

var ctx = canvasgetContext("2d");

//让画板的大小等于屏幕的大小

/

思路:

1获取屏幕对象

2获取屏幕的尺寸

3屏幕的尺寸赋值给画板

/

//获取屏幕对象

var s = windowscreen;

//获取屏幕的宽度和高度

var w = swidth;

var h = sheight;

//设置画板的大小

canvaswidth = w;

canvasheight = h;

//设置文字大小

var fontSize = 14;

//计算一行有多少个文字 取整数 向下取整

var clos = Mathfloor(w/fontSize);

//思考每一个字的坐标

//创建数组把clos 个 0 (y坐标存储起来)

var drops = [];

var str = "qwertyuiopasdfghjklzxcvbnm";

//往数组里面添加 clos 个 0

for(var i = 0;i<clos;i++) {

dropspush(0);

}

//绘制文字

function drawString() {

//给矩形设置填充色

ctxfillStyle="rgba(0,0,0,005)"

//绘制一个矩形

ctxfillRect(0,0,w,h);

//添加文字样式

ctxfont = "600 "+fontSize+"px 微软雅黑";

//设置文字颜色

ctxfillStyle = "#ff2d2d";

for(var i = 0;i<clos;i++) {

//x坐标

var x = ifontSize;

//y坐标

var y = drops[i]fontSize;

//设置绘制文字

ctxfillText(str[Mathfloor(Mathrandom()strlength)],x,y);

if(y>h&&Mathrandom()>099){

drops[i] = 0;

}

drops[i]++;

}

}

//定义一个定时器,每隔30毫秒执行一次

setInterval(drawString,30);

</script>

</body>

</html>

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/lianai/10174291.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-10-30
下一篇2023-10-30

发表评论

登录后才能评论

评论列表(0条)

    保存