#include /***********************宏定义**********************/

#define PI 3.1415926//圆周率

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

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

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

#define LENGTH20//流星字符数

#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语言实现流星雨相关推荐

  1. C语言程序模拟流星雨,C语言_流星雨的实现.doc

    C语言_流星雨的实现 HUNAN UNIVERSITY 程序设计训练报告 题目 流 星 雨 的 实 现 学生姓名毛 宇 锋学生学号201208060116专业班级信息安全一班学院名称信息科学与工程学院 ...

  2. 代码制作数字流星雨_用C语言编写流星雨程序

    展开全部 数字流星雨代码: //流星雨.cpp:Defines the entry point for the console application. // /// //程序名称:数字流星雨 //最 ...

  3. 代码制作数字流星雨_如何运用html完成流星雨的效果(代码)

    软件安装:装机软件必备包 网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言.公共网关接口.组件等),可以创造出功能强大的网页.因而,超级文本标记语言是万维网(Web)编程的基 ...

  4. java 从控制台输入一个正整数_编程输出该正整数各位数字之和_C语言 从键盘上输入一个正整数,计算并输出该数的各位数字之和...

    点击查看C语言 从键盘上输入一个正整数,计算并输出该数的各位数字之和具体信息 答:思路:定义变量a接受键盘输入和变量sum保存a的各位数字之和,依次对a进行除10操作,并把a除10的余数加到sum中, ...

  5. python输入一个正整数、计算其各个位的数字之和_C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和。...

    点击查看C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和.具体信息 答:#include /*包含头文件*/void main() /*主函数*/{ int n, ...

  6. c语言一个整数各位数字个数_C语言实现把字符串中的数字转换成整数

    ===Tips:点击上方 蓝字 关注并查看历史消息===   本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...

  7. c语言代码大全表解释_C语言常用错误代码释义大全,值得收藏!

    对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表及简单解释,希望可以帮到大 ...

  8. c语言一个整数各位数字个数_C语言编写程序输出10个整数中最小值或最大值

    C语言编写程序输出10个整数中最小值或最大值 这是一个比较基础,同时也包含C语言中诸多特点的程序,仔细体会有很多的格式规则和技巧.其中包括:输入语句,输出语句,数组,分支结构,循环结构.希望广大C语言 ...

  9. c代码实现 ifft运算_C语言系列之FFT算法实现

    0x10 序言 长文预警,详细介绍FFT算法的编程原理和C实现,并在文章的最后附上了本文的所有源代码. 0x11 速览 1)FFT背后的数学原理 2)码位倒序 3)蝶形运算设计 4)利用复数FFT编写 ...

  10. 编程语言用C语言来看“流星雨”,听说向流星许愿就会有好运气

    编程语言用C语言来看"流星雨",听说向流星许愿就会有好运气 序 再亮眼的流星,也会一闪而过. 嗨!这里是狐狸~~ 没错,我又来了,上次的"烟花"表白程序你学废了 ...

最新文章

  1. 70佳精美的PSD素材免费下载(上篇)
  2. 导师神总结:读博失败的10个作死大法
  3. css中的代码图标,认识CSS中字体图标(示例代码)
  4. 阿里云城市数据大脑开发规范
  5. mysql查看数据倾斜_深入理解hadoop数据倾斜
  6. ib网卡命令_infiniband网卡安装、使用总结
  7. python3librequest_python3.x學習之urilib.request簡單學習
  8. 因讨要介绍费引发纠纷 浙江龙湾一男子砍死房产中介
  9. Unity3D基础38:角色控制器组件
  10. 戴爾新電腦走上時尚路線
  11. 【VS2010学习笔记】【函数学习】一(VC6.0和VS2010主函数的不同)
  12. 拉普拉斯(逆)变换的计算
  13. 如何使用报表工具制作统计报表
  14. html主题相册代码,使用html+css+js实现3D相册的详细代码
  15. 计算不可压缩流体 -- 数学基础
  16. Javaweb鼠标事件案例分析—鼠标移入移出表格颜色变化,kafka面试题
  17. 当你第一次发送ping请求包,ARP缓存表为空时会发生什么?(详细解析全过程)
  18. C#-调试记Log文件
  19. 计算机和网络连接不上,电脑宽带连不上怎么办_台式电脑连不上宽带怎么回事-win7之家...
  20. Linux设置软件开机自启动的三种方式(中标麒麟、银河麒麟、ubuntu)

热门文章

  1. 小型新闻管理系统Java
  2. 23种设计模式的深入浅出(更新中)
  3. zk框架实现zul的js代码调用服务器java命令
  4. 暴风影音3 Build version : 3.7.11.13 漏洞
  5. vue 音频文件打包后找不到文件
  6. 物联网是自动化还是计算机,物联网:自动化家里的一切
  7. Java集合框架关系图
  8. chrome浏览器版本简单介绍
  9. DenseNet 浅析
  10. java影院座位订票代码_基于jsp的影院订票-JavaEE实现影院订票 - java项目源码