C语言实现流星雨
来源:互联网 发布:大数据风控查询 编辑:程序博客网 时间:2024/04/28 09:29
程序模拟一组流星飞向地面的情景。流星用大写字母不表示。程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。
数字流星雨代码:
// 流星雨.cpp : Defines the entry point for the console application.///////////////////////////////////////////////////// // 程序名称:数字流星雨 // 最后修改:2006-10-15/////////////////////////////////////////////////// #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 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]);}}}
转载请注明出处:http://blog.csdn.net/utimes/article/details/8021662
- C语言实现流星雨
- 流星雨
- 流星雨
- 流星雨
- 使用CSS3实现流星雨动画教程
- 纯css实现的流星雨的效果
- 神奇的流星雨——字母雨的实现
- 链栈 C语言实现
- 地球 c语言实现
- C语言实现堆栈
- c语言实现计算器
- TrimLeft C语言实现
- C语言实现有限状态机
- 迪杰斯特拉 C语言实现
- C语言实现FIR
- C语言实现有限状态机
- C语言实现双链表
- C语言实现析构器
- nginx 作为反向代理实现负载均衡的例子_nginx_脚本之家
- 关于MPLL和UPLL的学习
- shell基础知识学习三
- java解惑㈡——长整除
- slub中的kmalloc和kfree学习笔记
- C语言实现流星雨
- shell脚本regex正则表达式
- 关于session会话对象原理
- wget 使用
- MYSQL的简单封装,学习基于托管的C++开发
- 【终端快捷键】Linux terminal 终端常用快捷键
- activity的任务栈
- http 请求
- javaldx是干什么的