经典代码雨----C语言实现

该文详细描述了一个用C++编写的代码雨模拟程序,包括初始化窗口、定义雨点结构体、初始化雨点位置、更新雨点坐标以及窗口刷新等关键步骤。程序使用了Windows图形库,通过随机坐标变化模拟雨点下落,创建出黑客帝国式的代码雨效果。
摘要由CSDN通过智能技术生成

代码架构:

1、初始化窗口(窗口大小信息)

2、描绘雨点信息(颜色,数字)

3、初始化雨(雨点位置变化)

4、下雨操作(坐标更新)

5、更新窗口(场景描绘)

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


void init_window();

void hua_rain(int n);

void down_rain();

void date_windows();

void init_rain();

预备工作:

定义雨点结构体:主要包含坐标信息、雨点数量。

1、初始化窗口信息。

2、描绘雨点信息。

3、初始化雨(雨点位置变化)

#define rain_num   100
#define WIN_HEIGHT 640
#define WIN_WIDTH  1080

typedef struct Rain
{
	int x;
	int y;
}rain;

rain rains[rain_num];

void init_window()
{
	system("title  黑客帝国-代码雨");
	initgraph(WIN_WIDTH, WIN_HEIGHT);
}


void init_rain()
{
	for (int i = 0; i < rain_num; i++)
	{
		rains[i].x = rand() % WIN_WIDTH;
		rains[i].y = rand() % WIN_HEIGHT;
	}
}

void hua_rain(int n)
{
	for (int i = 0; i < n; i++)
	{
		settextcolor(RGB(0, 255, 0));
		outtextxy(rains[n].x, rains[n].y, rand() % 2 + 48);
	}
}

 4、下雨操作:

雨点 X , Y 坐标变换,重复实验得到数据 Y+=25; X+=1;

让雨点在窗口内坐标不断变化----从而实现雨点下落。

void down_rain()
{
	for (int i = 0; i < rain_num; i++)
	{
		hua_rain(i);
		rains[i].y += 25;
		rains[i].x += 1;
		if (rains[i].y > WIN_HEIGHT)
		{
			rains[i].x = rand() % WIN_WIDTH;
			rains[i].y = rand() % 50;
		}
	}
}

5、更新窗口(场景描绘):

BeginBatchDraw():开始工作区----EndBatchDraw():结束工作区

GetTickCount是一种函数。GetTickCount返回 从操作系统启动所经过(elapsed)的毫秒数,它的是DWORD。

void date_windows()
{
	BeginBatchDraw();
	DWORD t1, t2;
	t1 = GetTickCount64();
	while (1)
	{
		t2 = GetTickCount64();

		if (t2 - t1 > 20)
		{
			cleardevice();
			down_rain();
			EndBatchDraw();
			t1 = t2;
		}
	}
}

总结代码:


int main()
{
	srand(time(NULL));
	init_window();
	init_rain();
	date_windows();
	return 0;
}

效果呈现:

 以下就是全部源码分享了:

#include<stdio.h>
#include<Windows.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#define rain_num   100
#define WIN_HEIGHT 640
#define WIN_WIDTH  1080
typedef struct Rain
{
	int x;
	int y;
}rain;
rain rains[rain_num];
void hua_rain(int n)
{
	for (int i = 0; i < n; i++)
	{
		settextcolor(RGB(0, 255, 0));
		outtextxy(rains[n].x, rains[n].y, rand() % 2 + 48);
	}
}
void init_window()
{
	system("title  黑客帝国-代码雨");
	initgraph(WIN_WIDTH, WIN_HEIGHT);
}
void down_rain()
{
	for (int i = 0; i < rain_num; i++)
	{
		hua_rain(i);
		rains[i].y += 25;
		rains[i].x += 1;
		if (rains[i].y > WIN_HEIGHT)
		{
			rains[i].x = rand() % WIN_WIDTH;
			rains[i].y = rand() % 50;
		}
	}
}
void date_windows()
{
	BeginBatchDraw();
	DWORD t1, t2;
	t1 = GetTickCount64();
	while (1)
	{
		t2 = GetTickCount64();

		if (t2 - t1 > 20)
		{
			cleardevice();
			down_rain();
			EndBatchDraw();
			t1 = t2;
		}
	}
}
void init_rain()
{
	for (int i = 0; i < rain_num; i++)
	{
		rains[i].x = rand() % WIN_WIDTH;
		rains[i].y = rand() % WIN_HEIGHT;
	}
}
int main()
{
	srand(time(NULL));
	init_window();
	init_rain();
	date_windows();
	return 0;
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员-King.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值