程序模拟一组流星飞向地面的情景。流星用大写字母不表示。程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。

数字流星雨代码:

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

//

///

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

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

///

#include

#include

#include

#include "graphics.h"

#include

#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. java阿拉伯转大写_java 中大写数字与阿拉伯数之间的相互转换 | 学步园

    public class CNNumberFormat { private static final char []cnNumbers={'零', '壹', '贰', '叁', '肆', '伍','陆 ...

最新文章

  1. 阿里云容器服务发布 Knative 托管服务 | 云原生生态周报 Vol. 49
  2. How to become the truely yourself?
  3. 图书资料管理课程设计(附源码和连接)
  4. BZOJ 3329 Xorequ (数位DP、矩阵乘法)
  5. aix下java程序运行问题
  6. mysql如何和qt连接使用_Qt5学习:连接MySQL数据库
  7. python-turtle库-01
  8. Jeecg-Boot 一款基于SpringBoot 快速开发平台
  9. Android 不能勾选 Project Build Target
  10. JAVA正则提取字符串中的日期
  11. 如何修改zblog的css,修改Zblog中的CSS的方法
  12. IntelliJ IDEA设置TortoiseSVN插件(Cannot run program svn)
  13. matlab找出向量的中位数,MATLAB如何使用median函数计算样本的中位数
  14. js中求2个数的最大值的几种方法
  15. 中南大学计算机学院王瑞,中南大学优秀毕业生.xls
  16. 自动收取蚂蚁森林能量雨
  17. 用计算机说出人说的话,用计算机语言说一句情话
  18. 记一次排查服务器被挖矿记录
  19. 五大创新型AI软件公司,下一个AI独角兽就是你
  20. 如何从基层人员变成一名中层领导

热门文章

  1. Oracle设置主键自增
  2. python程序设计实践教程答案江苏_《Python程序设计》习题与答案python教材答案
  3. win10将Capslock变为Ctrl
  4. P2S、P2P、P2SP之对比
  5. 计算与编程思维-Python实践【Python Crash Course】
  6. ARGOX 力象 OS-214Plus 条码打印机 B/S 打印
  7. 网站快速收录-网站快速收录工具下载免费
  8. c语言构造数学模型步骤,数学建模的6个基本步骤
  9. 学习总结-《父与子的编程之旅》chapter 3
  10. Lidar Studio点云处理与分析软件V1.1