帮忙改一下我的C语言流星雨的实现程序怎么只让流星是有颜色的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帮忙改一下我的C语言流星雨的实现程序怎么只让流星是有颜色的相关的知识,希望对你有一定的参考价值。
参考技术A我写了一个,你可以看下效果。
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#include "graphics.h"
#include <conio.h>
#include <math.h>
/***********************宏定义**********************/
#define PI 3.1415926 //圆周率
#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(char *p);
void InitMeteor(struct meteor *me);
int color(int y, int y0, int yh);
void Meteors(struct meteor me[]);
/***********************主函数**********************/
///int main(void)
int _tmain(int argc, _TCHAR* argv[])
char c = '\\0'; //接收键盘输入的变量
initgraph(WIDTH, HEIGHT); //初始化 WIDTH * HEIGHT的绘图窗口
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 + LENGTH * V)
InitMeteor(&me[i]);
if(kbhit())
c = getch();
EndBatchDraw(); //结束批量绘图
closegraph(); //结束绘图环境
return 0;
/***********************函数体**********************/
char AsciiRand() //产生随机可见ASCII码
return ((char)(rand() % (126 -33) + 33));
void Move(char *p) //字符后移,可以使显示时字符相对屏幕位置不变
char *pt = p + LENGTH;
while(pt > p)
*(--pt) = *(pt - 1);
*p = AsciiRand();
void InitMeteor(struct meteor *me) //对一颗流星初始化
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)(255* cos((yh - y) * PI / ( 2 * LENGTH * V)));
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 - j * V;
//设置颜色,流星的头部是白色的
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]);
扩展资料:
c语言程序设计 (计算机程序设计语言)
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
资料来源:百度百科-c语言程序设计
今天是七夕节用100行CSS代码下一场流星雨许一个愿来一场美丽的邂逅
今天是七夕节、用100行代码下一场流星雨、许一个愿、来一场美丽的邂逅
这个程序的核心使用CSS实现,基本原理就是利用CSS控制若干个div,本例是50个,当然,你可以弄更多的div,不过适当的流星是浪漫,如果流行太多了,恐龙就要灭绝了!
现在说一下基本实现原理,首先用js动态产生若干个div,看下面的代码:
var stars = '';
for(var i = 0; i < 50;i++) {
var starTailLengthStyle = "--star-tail-length: " + (5 + Math.random() * 4) + "em;"
var topOffsetStyle = "--top-offset:" + (4 + Math.random() * 100) + "vh;"
var fallDurationStyle = "--fall-duration:" + (2 + Math.random() * 10) + "s;"
var fallDelay = "--fall-delay:" + Math.random() * 5 + "s;"
stars += "<div class='star' style='" +
starTailLengthStyle +
topOffsetStyle +
fallDurationStyle +
fallDelay + "'></div>\\r\\n";;
}
document.body.innerHTML="<div class='stars'>" + stars + "</div>";
这段代码产生了51个div,其中1个div是最外层的div,另外50个div要放在这个div中。最外层div的class是stars,其他50个div的class是star。 另外还在style中加入了一些属性,用于随机控制每一颗流行的属性,如尾巴长短,跌落时间等。
接下来在添加下面的样式用来描述stars,用来控制星星整体的初始位置。
.stars {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 120%;
transform: rotate(-45deg);
}
然后编写下面的star样式,这些样式用来控制每一颗星星的初始状态,var描述相关的变量。
.star {
--star-color: var(--primary-color);
--star-tail-length: 6em;
--star-tail-height: 2px;
--star-width: calc(var(--star-tail-length) / 6);
--fall-duration: 9s;
--tail-fade-duration: var(--fall-duration);
position: absolute;
top: var(--top-offset);
left: 1700px;
width: var(--star-tail-length);
height: var(--star-tail-height);
color: var(--star-color);
background: linear-gradient(45deg, currentColor, transparent);
border-radius: 50%;
filter: drop-shadow(0 0 6px currentColor);
transform: translate3d(70em, 0, 0);
animation: fall var(--fall-duration) var(--fall-delay) linear infinite, tail-fade var(--tail-fade-duration) var(--fall-delay) ease-out infinite;
}
剩下的就是一些控制流星跌落过程中样式的,如下面的代码用来控制流星尾部在跌落过程中的变化。
@keyframes tail-fade {
0%, 50% {
width: var(--star-tail-length);
opacity: 1;
}
70%, 80% {
width: 0;
opacity: 0.6;
}
100% {
width: 0;
opacity: 0;
}
}
以上是关于帮忙改一下我的C语言流星雨的实现程序怎么只让流星是有颜色的的主要内容,如果未能解决你的问题,请参考以下文章