欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++数字雨屏保

程序员文章站 2024-03-18 17:01:52
...

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

相关标签: c语言