c++数字雨屏保

c语言实现数字雨,编程环境是C-Free,使用图形库为ege,ege也可以安装在VS中。完整工程可以在这里下载:https://download.csdn.net/download/qq_45467083/11453324

关于编程环境可以参考这个博客:https://blog.csdn.net/qq_45467083/article/details/97911837

效果如下:
c++数字雨屏保
可以通过上下左右按键改变下落速度(还可以是负的,即向上运动),以及雨滴长度,效果如下:
c++数字雨屏保
主要的数据结构:

//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

上一篇:高频刷题-42. Trapping Rain Water


下一篇:canvas 图片带圆角