c语言简单实现数字雨黑客特效

首先欢迎大家读此文章

实现数字雨首先我们搭建相应环境。

环境要求

  1. 安装一个能编译运行c/c++源代码的IDE(集成开发环境)
  2. 下载EasyX工具集,里面有我们要用到的graphics.h库(图形界面库) 下载地址:https://easyx.cn/
  3. 对差点忘啦,该备windows系统

程序思路

我先屏幕最上方随机打印一行字符集,然后把它用截取函数截取,然后把他往下移动一个像素,就这么简单,具体的不介绍了哦,直接上代码自己调试,让它更完美起来。

效果演示

演示效果

代码部分

//软件名称:数字雨
//文件名:main.cpp
//版本:2020_02_07
//软件说明:简单的数字雨效果,本例用绘图工具(绘图窗口)来实现数字雨效果
//作者:A贝尔(Abr)
//时间:2020年02月07日19:04分

#include <graphics.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

long int* fhckdx()//获取屏幕分辨率
{
	long int intstr[2] = { '\0' };
	intstr[0] = GetSystemMetrics(SM_CXSCREEN);
	intstr[1] = GetSystemMetrics(SM_CYSCREEN);
	return intstr;
}

int main()
{
	long int* intstrr = fhckdx();//获取屏幕分辨率
	int cx = intstrr[0];
	int cy = intstrr[1];

	char graph_id[61] = { 0 };
	// 设置随机函数种子
	srand((unsigned)time(NULL));

	initgraph(cx, cy);// 初始化图形模式 参数三可以有也可以没有 (NOCLOSE 禁用绘图环境的关闭按钮,NOMINIMIZE 禁用绘图环境的最小化按钮,SHOWCONSOLE 保留原控制台窗口。)

	HWND hwnd = GetHWnd();//获取当前窗口句柄
	MoveWindow(hwnd, 0, 0, cx, cy, FALSE);//设置窗口位置和新大小
	SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_CAPTION); //去标题栏
	SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & ~(WS_EX_WINDOWEDGE | WS_EX_DLGMODALFRAME));  //去边框

	int  x = 0, y = 1;
	char c = 0;
	int sgnal = 16;
	settextstyle(16, 8, _T("Courier"));	// 设置字体
	// 设置颜色
	settextcolor(LIGHTGREEN);// 设置字体颜色  也可以用这种方式表示颜色==》RGB(00,255,00)(也就是绘图颜色跟(setcolor)一样)
	setlinecolor(RGB(255, 255, 255));// 设置绘图线颜色(黑色BLACK)(红色RAD)	(绿色GREEN)
	setbkcolor(BLACK);// 设置背景色为黑色
	cleardevice();// 用背景色清空屏幕	
	setcolor(LIGHTGREEN);// 设置绘图色为绿色
	setorigin(0, -16);//这个函数用于设置坐标原点。	
	setaspectratio(1, 1);
	for (int i1 = 0, a1 = 0; i1 <= cy, a1 <= 16; i1++, a1++)//(我电脑分辨率1366*768)不同分辨率机子效果有所差异,自己手动修改这里的数字参数来提升数字雨效果
	{
		for (int a = 0; a <= 60; a++)
		{
			outtextxy(a * (cx / 59), a1, graph_id[a]);
			clearrectangle(0, 0, cx, a1);//这个函数用于清空矩形区域。删除字符
		}
		if (sgnal == 16)
		{
			for (int a = 0; a <= 60; a++)
			{
				graph_id[a] = ' ';
			}
			clearrectangle(0, 0, cx, 16);//这个函数用于清空矩形区域。删除字符
			for (int i = 0; i <= 30; i++)
			{
				x = (rand() % 60) * 32;
				c = (rand() % 26) + 65;
				graph_id[x / 32] = c;
				outtextxy(x, 0, c);
				sgnal = 0;
			}
		}
		sgnal++;
		IMAGE img;
		getimage(&img, 0, 0, cx, cy);
		putimage(0, 1, &img);
		//		Sleep(1);
		if (a1 >= 16)a1 = 0;
		if (i1 >= cy)i1 = 0;
		//if (_kbhit())break;//检测键盘是否被按下  是就直接退出循环
	}
	cleardevice();// 用背景色清空屏幕	
	// 关闭图形模式
	closegraph();
}

应知识有限,免不了错误,希望大家谅解。希望大家给予意见,批评,指导。 谢谢!

  • 14
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值