代码制作数字流星雨_C语言实现流星雨
#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语言实现流星雨相关推荐
- C语言程序模拟流星雨,C语言_流星雨的实现.doc
C语言_流星雨的实现 HUNAN UNIVERSITY 程序设计训练报告 题目 流 星 雨 的 实 现 学生姓名毛 宇 锋学生学号201208060116专业班级信息安全一班学院名称信息科学与工程学院 ...
- 代码制作数字流星雨_用C语言编写流星雨程序
展开全部 数字流星雨代码: //流星雨.cpp:Defines the entry point for the console application. // /// //程序名称:数字流星雨 //最 ...
- 代码制作数字流星雨_如何运用html完成流星雨的效果(代码)
软件安装:装机软件必备包 网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言.公共网关接口.组件等),可以创造出功能强大的网页.因而,超级文本标记语言是万维网(Web)编程的基 ...
- java 从控制台输入一个正整数_编程输出该正整数各位数字之和_C语言 从键盘上输入一个正整数,计算并输出该数的各位数字之和...
点击查看C语言 从键盘上输入一个正整数,计算并输出该数的各位数字之和具体信息 答:思路:定义变量a接受键盘输入和变量sum保存a的各位数字之和,依次对a进行除10操作,并把a除10的余数加到sum中, ...
- python输入一个正整数、计算其各个位的数字之和_C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和。...
点击查看C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和.具体信息 答:#include /*包含头文件*/void main() /*主函数*/{ int n, ...
- c语言一个整数各位数字个数_C语言实现把字符串中的数字转换成整数
===Tips:点击上方 蓝字 关注并查看历史消息=== 本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...
- c语言代码大全表解释_C语言常用错误代码释义大全,值得收藏!
对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表及简单解释,希望可以帮到大 ...
- c语言一个整数各位数字个数_C语言编写程序输出10个整数中最小值或最大值
C语言编写程序输出10个整数中最小值或最大值 这是一个比较基础,同时也包含C语言中诸多特点的程序,仔细体会有很多的格式规则和技巧.其中包括:输入语句,输出语句,数组,分支结构,循环结构.希望广大C语言 ...
- c代码实现 ifft运算_C语言系列之FFT算法实现
0x10 序言 长文预警,详细介绍FFT算法的编程原理和C实现,并在文章的最后附上了本文的所有源代码. 0x11 速览 1)FFT背后的数学原理 2)码位倒序 3)蝶形运算设计 4)利用复数FFT编写 ...
- 编程语言用C语言来看“流星雨”,听说向流星许愿就会有好运气
编程语言用C语言来看"流星雨",听说向流星许愿就会有好运气 序 再亮眼的流星,也会一闪而过. 嗨!这里是狐狸~~ 没错,我又来了,上次的"烟花"表白程序你学废了 ...
最新文章
- 70佳精美的PSD素材免费下载(上篇)
- 导师神总结:读博失败的10个作死大法
- css中的代码图标,认识CSS中字体图标(示例代码)
- 阿里云城市数据大脑开发规范
- mysql查看数据倾斜_深入理解hadoop数据倾斜
- ib网卡命令_infiniband网卡安装、使用总结
- python3librequest_python3.x學習之urilib.request簡單學習
- 因讨要介绍费引发纠纷 浙江龙湾一男子砍死房产中介
- Unity3D基础38:角色控制器组件
- 戴爾新電腦走上時尚路線
- 【VS2010学习笔记】【函数学习】一(VC6.0和VS2010主函数的不同)
- 拉普拉斯(逆)变换的计算
- 如何使用报表工具制作统计报表
- html主题相册代码,使用html+css+js实现3D相册的详细代码
- 计算不可压缩流体 -- 数学基础
- Javaweb鼠标事件案例分析—鼠标移入移出表格颜色变化,kafka面试题
- 当你第一次发送ping请求包,ARP缓存表为空时会发生什么?(详细解析全过程)
- C#-调试记Log文件
- 计算机和网络连接不上,电脑宽带连不上怎么办_台式电脑连不上宽带怎么回事-win7之家...
- Linux设置软件开机自启动的三种方式(中标麒麟、银河麒麟、ubuntu)