c语言实现数字雨,编程环境是C-Free,使用图形库为ege,ege也可以安装在VS中。完整工程可以在这里下载:https://download.csdn.net/download/qq_45467083/11453324
关于编程环境可以参考这个博客:https://blog.csdn.net/qq_45467083/article/details/97911837
效果如下:
可以通过上下左右按键改变下落速度(还可以是负的,即向上运动),以及雨滴长度,效果如下:
主要的数据结构:
//rain.h
#ifndef RAIN_H
#define RAIN_H
#include<time.h>
#include<stdlib.h>
#include <stdio.h>
#include <math.h>
#include <graphics.h>
#define bcColor 0x000000
typedef struct RainPoint {
int x,y;
char num;
unsigned int color;
}RainPoint;
typedef struct Rain {
RainPoint* rPoints;
int length;
}Rain;
Rain creatOneRain(int X);
void deleteRain(Rain *rain);
void moveRain(Rain &rain);
void flashRain(Rain &rain, int sHeight);
#endif
main
int main() {
setinitmode(INIT_NOBORDER); //去除边框
initgraph(-1, -1); //打开图形窗口,以全屏模式
setbkcolor(bcColor);
int screenWidth = GetSystemMetrics(SM_CXSCREEN); //获取屏幕宽度
int screenHeight = GetSystemMetrics(SM_CYSCREEN);//获取屏幕高度
//printf("width:%d",GetSystemMetrics(SM_CXSCREEN));
srand((unsigned)time(NULL));//随机化种子
setrendermode(RENDER_MANUAL);
Linklist rainList;
for(; is_run(); delay_ms(55)) {
cleardevice();//清屏
char szBuff[10];
setcolor(0x008000);
sprintf(szBuff,"%s%d","speed:",fallSpeed);
outtextxy(0,0,szBuff);
sprintf(szBuff,"%s%d","length:",MAX_LENGTH);
outtextxy(0,13,szBuff);
if(rand()%2){//此处可以调节出现概率
Rain rain = creatOneRain(rand()%(screenWidth+1));
rainList.Insert(rainList.ListLength()+1, rain);
}
//遍历链表获取数据
for(int i=1;i<=rainList.ListLength();i++){
Rain temp = rainList.GetData(i);
if(temp.rPoints[temp.length-1].y>screenHeight){
deleteRain(&temp);
rainList.Delete(i);
}else{
moveRain(temp);
flashRain(temp, screenHeight);
}
}
if (kbhit()) {
char tempc = getch();
if(tempc == 38 || tempc == 13){
//向上按键操作:下落速度加快
fallSpeed++;
if(fallSpeed>100) fallSpeed = 100;
}else if(tempc==40){
//向下按键操作:下落速度减慢
fallSpeed--;
if(fallSpeed<-20) fallSpeed = -20;
}else if(tempc==37){
//向左按键操作:最大雨尾长度减少
MAX_LENGTH-=5;
if(MAX_LENGTH<35) MAX_LENGTH = 35;
}else if(tempc==39){
//向右按键操作:最大雨尾长度增加
MAX_LENGTH+=5;
if(MAX_LENGTH>500) MAX_LENGTH = 500;
}else{
break;
}
}
}
getch();
closegraph();
return 0;
}
最后,这个程序可以设置为电脑屏保,我的笔记本就是这样。至于如何设置屏保,大家自行百度。
其他资源链接
1 该程序使用ege图形库开发简单的3D动画,即一个旋转的立方体。可以通过按键更改旋转方向、旋转速度、移动方向等等。
https://download.csdn.net/download/qq_45467083/11459477
2 本程序使用MFC,将一段音乐边播放边进行傅里叶变化,同时将其部分波形动态地绘制出来。
https://download.csdn.net/download/qq_45467083/11459509