C语言项目:黑客帝国之数字雨

640?wx_fmt=jpeg

编辑

        相信大家看过许许多多的关于计算机黑客、骇客、人工智能、AI方面的电影,每当黑客入侵某个五角大楼,某个网站时,都会出现这样一幅画面:

640?wx_fmt=jpeg

编辑


        然后就轻而易举的成功入侵夺取管理员权限了,这时候的我们,心情肯定是激动的无以复加,心里大喊着:666!!!,如果我有这么厉害的技术就好了!所以大家想到今天要说的是什么了吗?

640?wx_fmt=jpeg

编辑


        O(∩_∩)O和这并没有太大的关系,今天我们要讲的是《数字雨》!

好了,我们来看下什么是数字雨:

640?wx_fmt=jpeg

编辑

        数字雨,顾名思义,就是类似于填上下雨一样,往下掉数字或者是文字。如下动态图:

640?wx_fmt=gif

编辑

        这样看起来是不是感觉我们像是进入了一个科幻的虚拟世界呢?当然了程序运行后会有有个小小的惊喜哦?

#include <Windows.h>

#include <time.h>

#include <mmsystem.h>

#pragma comment(lib, "WINMM.LIB")

#define NumOfColumn 25 //显示列的列数

typedef struct charList

{

struct charList * prev;

TCHAR ch; //放字符

struct charList * next;

}CharList;

typedef struct tagCharColumn

{

struct charList * head, *cur;

int x, y, iShownLen, iStrNum; //显示字数,字符数

}CharQueue;

struct showChar

{

TCHAR myChar[60];

int iNum; //字符个数

}charArr[7] = {//《一颗开花的树》-席慕容

{ TEXT("如何让你遇见我,在我最美丽的时刻"),16 },

{ TEXT("为这,我已在佛前求了五百年,求他让我们结一段尘缘"),24 },

{ TEXT("佛于是把我化作一棵树,长在你必经的路旁"),19 },

{ TEXT("阳光下慎重地开满了花,朵朵都是我前世的盼望"),21 },

{ TEXT("当你走进,请你细听,那颤抖的叶是我等待的热情"),21 },

{ TEXT("而当你终于无视地走过,在你身后落了一地的"), 20 },

{ TEXT("朋友啊,那不是花瓣,是我凋零的心"),16 }

};

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{

TCHAR szClassName[] = TEXT("数字雨");

HWND hwnd;

MSG msg;

WNDCLASS wndclass;

wndclass.style = CS_HREDRAW | CS_VREDRAW;

wndclass.lpfnWndProc = WndProc;

wndclass.cbClsExtra = 0;

wndclass.cbWndExtra = 0;

wndclass.hInstance = hInstance;

wndclass.hIcon = NULL;

wndclass.hCursor = NULL;

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.lpszMenuName = NULL;

wndclass.lpszClassName = szClassName;

if (!RegisterClass(&wndclass))

{

return 0;

}

hwnd = CreateWindow(szClassName, NULL, WS_DLGFRAME | WS_THICKFRAME | WS_POPUP, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, hInstance, NULL);

ShowWindow(hwnd, SW_SHOWMAXIMIZED);

UpdateWindow(hwnd);

ShowCursor(FALSE);

srand(time(0));

//消息机制

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

ShowCursor(TRUE);

return msg.wParam;

}

void CreateQueue(CharQueue * cc, int cyScreen, int x)

{

//bug -- 调用API---写接口---ctrl+c/ctrl+v

CharList * front;

int NumTemp = rand() % 6;

cc->x = x;

cc->y = rand() % 10 ? rand() % cyScreen : 0; //大约9/10的概率从中间开始下落。

cc->iShownLen = 1; //一开始就显示一个字符,然后慢慢增加,增加到等于歌词字符数时保持不变

cc->iStrNum = charArr[NumTemp].iNum; //歌词字符数

cc->head = cc->cur = front = (CharList *)calloc(cc->iStrNum, sizeof(CharList)); //创建显示列

//生成每个节点

int i;

for (i = 0; iiStrNum - 1; i++)

{

cc->cur->prev = front;

cc->cur->ch = charArr[NumTemp].myChar[i];

front = cc->cur++;

front->next = cc->cur;

}

//最后一个是标点符号

cc->cur->prev = front;

cc->cur->ch = charArr[NumTemp].myChar[i];

cc->cur->next = cc->head;

cc->head->prev = cc->cur;

cc->cur = cc->head;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

HDC hdc;

static HDC hdcMem;

static HBITMAP hBitmap;

static CharQueue * AllChar;

HFONT hFont;

static int cxScreen, cyScreen;

static int iFontWidth = 20, iFontHeight = 20;

int i, j, y, greenToblack;

CharQueue * ccElem;

CharList * temp;

switch (message)

{

case WM_CREATE:

cxScreen = GetSystemMetrics(SM_CXSCREEN);

cyScreen = GetSystemMetrics(SM_CYSCREEN);

SetTimer(hwnd, 1, 70, NULL);

hdc = GetDC(hwnd);

hdcMem = CreateCompatibleDC(hdc);

hBitmap = CreateCompatibleBitmap(hdc, cxScreen, cyScreen);

SelectObject(hdcMem, hBitmap);

ReleaseDC(hwnd, hdc);

hFont = CreateFont(iFontHeight, iFontWidth, 0/*角度设置*/, 0/*角度设置*/, FW_BOLD/*黑体*/, 0, 0, 0,/*斜体 下划线 啊、删除线*/

DEFAULT_CHARSET/*字符集*/, OUT_DEFAULT_PRECIS/*指定输出精度*/, CLIP_DEFAULT_PRECIS/*指定裁剪精度*/,

DRAFT_QUALITY/*指向输出质量*/, FIXED_PITCH | FF_SWISS/*指定字体间距| 字体族*/, TEXT("宋体"));

SelectObject(hdcMem, hFont);

DeleteObject(hFont);

SetBkMode(hdcMem, TRANSPARENT);

PlaySound(L"素材.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);//异步循环播放

AllChar = (CharQueue *)calloc(NumOfColumn, sizeof(CharQueue));//自动初始化为o

for (i = 0; i

{

CreateQueue(AllChar + i, cyScreen, 50 * i + 20);

}

return 0;

case WM_TIMER:

//该函数使用当前选入指定设备环境中的刷子绘制给定的矩形区域。通过使用给出的光栅操作来对该刷子的颜色和表面颜色进行组合。

PatBlt(hdcMem, 0, 0, cxScreen, cyScreen, BLACKNESS);

for (i = 0; i

{

ccElem = AllChar + i;

temp = ccElem->head;

SetTextColor(hdcMem, RGB(255, 255, 255));

TextOut(hdcMem, ccElem->x, ccElem->y, &temp->ch, 1/*字符个数*/);

y = ccElem->y;

greenToblack = 0;

ccElem->head = ccElem->head->next;

temp = temp->prev;

for (j = 1; jiShownLen; j++)

{

SetTextColor(hdcMem, RGB(/*greenToblack*5%255*/0, 255 - 255 * (greenToblack++) / (ccElem->iStrNum), 0));

TextOut(hdcMem, ccElem->x, y -= iFontHeight, &temp->ch, 1);

temp = temp->prev;

}

if (ccElem->iShownLeniStrNum)

{

ccElem->iShownLen++;

}

ccElem->y += iFontHeight;

if (ccElem->y - ccElem->iStrNum*iFontHeight>cyScreen)

{

free(ccElem->cur);

CreateQueue(ccElem, cyScreen, 128 * i + 17);

}

}

hdc = GetDC(hwnd);

BitBlt(hdc, 0, 0, cxScreen, cyScreen, hdcMem, 0, 0, SRCCOPY);

ReleaseDC(hwnd, hdc);

return 0;

case WM_RBUTTONDOWN:

KillTimer(hwnd, 1);

return 0;

case WM_RBUTTONUP:

SetTimer(hwnd, 1, 70, NULL);

return 0;

//case WM_LBUTTONDOWN:

case WM_KEYDOWN:

case WM_DESTROY:

KillTimer(hwnd, 1);

for (i = 0; i

{

ccElem = AllChar + i;

free(ccElem->cur);

}

free(AllChar);

DeleteObject(hBitmap);

DeleteDC(hdcMem);

PostQuitMessage(0);

break;

}

return DefWindowProc(hwnd, message, wParam, lParam);

}

        看完了今天的效果图和代码,细心的大家是不是发现了什么?没错

640?wx_fmt=jpeg

编辑

        这回不忽悠大家了,代码中引用的诗歌,貌似是一首关于情感方面的的现代诗!当然了,这个程序你用到什么方面就不管我的事情了,正好里面也会调用音乐,氛围也不错,一打开就是满满的惊喜。今天的程序就到这里了,喜欢的小伙伴多多转发关注哦!

同时也可以关注我们的公众号:【轻松学C语言】


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea样式报错_来自强迫症患者的IDEA设置

IDEA的功能强大毋庸置疑&#xff0c;配置选项也是多到让人眼花缭乱。然而不是所有的配置都是用户需要的&#xff0c;特别是强迫症患者更是难伺候。今天和大家分享下个人的配置和。持续更新中&#xff0c;也欢迎大家补充。Duplicated code取消重复代码提示Settings -> Editor…

C语言项目:扫雷大战精简版

一直说写个几百行的小项目&#xff0c;于是我写了一个控制台的扫雷&#xff0c;没有想到精简完了代码才200行左右&#xff0c;不过考虑到这是我精简过后的&#xff0c;浓缩才是精华嘛&#xff0c;我就发出来大家一起学习啦&#xff0c;看到程序跑起来能玩&#xff0c;感觉还是蛮…

mysql ignore 1 lines_MYSQL使用笔记(1)

创建用户 用户名 dnsexpuser 密码&#xff1a;dnsexp1347insert into mysql.user(Host,User,Password) values (localhost,dnsexpuser,password(dnsexp1347)) ;创建数据库分配数据库权限create database wap_tagdb ;grant all privileges on wap_tagdb.*to waptaglocalhost ide…

C语言十大经典例题:附答案

1、/*输出9*9口诀。共9行9列&#xff0c;i控制行&#xff0c;j控制列。*/#include <stdio.h>int main(){ int i,j,result;for (i1;i<10;i){ for(j1;j<10;j){resulti*j;printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐&#xff0c;占3位*/}printf(&qu…

C语言项目:图形马赛克处理技术

每个人都有讨厌的人&#xff0c;例如我就比较讨厌三个姓马的人&#xff0c;马云、马化腾和马赛克。马云骗女人的钱&#xff0c;马化腾骗孩子的钱&#xff0c;马赛克阻挡了人们的分享和交流 。那么大家是不是知道我们今天要分享的项目是什么啦&#xff1f;马赛克处理技术莫非就是…

C语言项目:灰度处理技术

Hello&#xff0c;今天给大家带来的是一个比较简单的图形处理技术-灰度处理技术。那么到底什么是灰度处理技术呢&#xff1f;简单来说&#xff0c;所谓的灰度处理技术就是把一张彩色的图片变成一张灰色的图片。如下图所示&#xff0c;左边是原图&#xff0c;右边则是已经被处理…

C语言项目:推箱子大战

还记得大家小时候玩过的游戏吗&#xff1f;曾经的坦克大战、推箱子、贪吃蛇都是我们以前玩过的小游戏&#xff0c;然而现在随着大型单机、网络游戏的光芒照耀下&#xff0c;那些曾经的小游戏都渐渐消失了&#xff0c;也或许是我们都已经长大了吧。那么今天&#xff0c;我给大家…

java项目加减乘除验证码_课堂Java小程序(加减乘除与验证码)

一、编写一个程序&#xff0c;用户输入两个数&#xff0c;求出其加减乘除&#xff0c;并用消息框显示计算结果。1.设计思想&#xff1a;从键盘输入两个数字和运算符&#xff0c;然后计算。将输入的数字及运算符由字符型转换为整型&#xff0c;再用if判断输入的运算符&#xff0…

C语言绘图:可爱叮当猫

大家对于叮当猫可以说是很熟悉了吧&#xff0c;他还有另外一个名字&#xff0c;也就是哆啦a梦。即便你没有看过他的电影动画&#xff0c;也总会听说过的。叮当猫神奇的口袋总是能够掏出我们幻想功能的任何道具&#xff0c;任意门能够带我们去到任何地方&#xff0c;以及插在头上…

jgit git pull_使用JGit API探索Git内部

jgit git pull您是否想过提交及​​其内容如何存储在Git中&#xff1f; 好吧&#xff0c;我有&#xff0c;在上一个下雨的周末我有一些空闲时间&#xff0c;所以我做了一些研究。 因为我对Java的感觉比对Bash的感觉要多&#xff0c;所以我使用JGit和一些学习测试来探究提交的G…

MFC实现Windows锁屏

编辑Windows锁屏锁屏软件相信大家都见过&#xff0c;以前我去网吧上网的时候也用过这个功能&#xff0c;当你有事情需要立即离开&#xff0c;而又不想让别人碰你的电脑&#xff0c;就需要用扫锁屏软件啦&#xff0c;锁住屏幕之后等回来的时候再输入密码解锁。同样的&#xff0c…

学习红客技术必备

互联网时代已悄悄来临&#xff0c;作为新时代的人们&#xff0c;我们日常生活、工作、学习方面都需要借助互联网来完成&#xff0c;这样&#xff0c;又产生一种新的问题&#xff0c;那就是网络安全的问题&#xff0c;有时我们拼命加班好不容易完成的东西&#xff0c;在一夜之间…

md5withrsa java_浏览器运行java插件报错:Algorithm constraints check failed: MD5withRSA

今天使用kvm管理机房机器的时候发现一只连不上&#xff0c;报以下错误&#xff1a;sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA我确认我已经把…

今晚课题:2019-3-20

今晚课题C/C万年历技术实现原理上课时间&#xff1a;20:30--22:30上课老师&#xff1a;杰越教育-Larry老师上课地址&#xff1a;https://ke.qq.com/course/353889 课程内容&#xff1a;1、C/Cfor逻辑原理2、重要点数据结构分析3、万年历效果实现展示赢在别人休息时&#xff0c;…

新版本的Selenium 4 Alpha会有什么期望?

我们所有人都属于测试领域&#xff0c;他们熟悉Selenium&#xff0c;Selenium是业界最流行的开源自动化工具之一。 Selenium的创始成员Simon Stewart在2018年8月正式宣布Selenium 4的发布日期以及它将为用户带来哪些新功能时&#xff0c;我们感到非常兴奋。 与Selenium 3一样&…

今晚课题:2019-3-22

今晚课题数据结构必会重点集合上课时间&#xff1a;20:30--22:30上课老师&#xff1a;杰越教育-Larry老师上课地址&#xff1a;https://ke.qq.com/course/353889 课程内容&#xff1a;1、C/C技术工作运用2、数据结构重点数组定义特点3、工作项目数组合理使用赢在别人休息时&…

Drools DMN最新开源引擎性能改进

我们一直在寻求改善Drools DMN开源引擎的性能。 我们最近审查了DMN用例&#xff0c;其中输入数据节点的实际输入总体有所不同。 这突出显示了引擎的次佳性能&#xff0c;我们在最新版本中对此进行了改进。 我想分享我们的发现&#xff01; 基准制定 当我们开始为该用例运行一个…

今晚课题:2019-3-23

今晚课题剖析《服务器高并发-IOCP模型架构》上课时间&#xff1a;2019/03/23 20:30--22:30授课讲师&#xff1a;杰越教育C/C学院--Vico课程链接&#xff1a;https://ke.qq.com/course/353889?tuin7472c9c 课程内容&#xff1a; 1、C/C编程语言入门精通 2、C线程技术在服务器…

使用Selenium WebDriver测试自动化的22条实用技巧

使用Selenium进行测试自动化已使全球的网站测试人员能够轻松执行自动化的网站测试。 Webdriver是Selenium框架的核心组件&#xff0c;通过它您可以针对不同类型的浏览器&#xff08;例如Google Chrome&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Opera&#xff…

这么奇葩搞笑的代码注释你见过吗

程序员作为一种“异类”&#xff0c;虽然他们平时给人们的留下的印象并不太好&#xff0c;觉得他们只会写代码。但是有的时候不得不佩服他们天马行空的想象力&#xff0c;他们可能会利用注释让你噗嗤一笑&#xff0c;下面我们来看看那些奇葩搞笑的代码注释吧。注释1&#xff1a…