黑客代码雨制作

· · 算法·理论

#include<bits/stdc++.h> 
#include<graghics.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
#define STR_SIZE 20
#define STR_NUM 128
#define STR_WIDTH 15 
#define WIDTH 1024
#define HEIGHT 640
struct MyStruct{
    char str[STR_SIZE];
    int x,y,speed; 
}rain[STR_NUM];
struct Star{
    int x;
    int y;
    int width;
    int vx;
    int vy;
}star[5];
char str[STR_SIZE];
char CreateCh(){
    char temp=0;
    int flag=rand()%3;
    if(flag==0)
        temp=rand()%26+'A';
    else if(flag==1)
        temp=rand()%26+'a';
    else
        temp=rand()%26+'0';
    return temp;
}
void GameInit(){
    initgraph(WIDTH,WEIGHT);
    mciSendString("open./克罗地亚狂想曲.mp3 alias BGM",0,0,0);
    mciSendString("play BGM repeat",0,0,0)
    srand((unsigned)time(NULL));
    for(int i=0;i<STR_NUM;i++){
        for(int k=0;k<STR_SIZE;k++){
            rain[i].str[k]=CreateCh();
        }
    }
    for(int i=0;i<STR_NUM;i++){
        rain[i].x=i*STR_WIDTH;
        rain[i].y=rand()%WEIGHT;
        rain[i].speed=(rand()%6)+1;
    }
    for(int i=0;i<5;i++){
        star[i].x=rand()%WIDTH;
        star[i].y=rand()%HEIGHT;
        star[i].width=rand()%21+20;
        star[i].vx=rand()%rand()%4+1;
        star[i].vy=rand()%rand()%4+1;
    }
}
void GameDraw(){
    for(int i=0;i<STR_NUM;i++){
        for(int k=0;k<STR_SIZE;k++){
            setbkmode(TRANSPARENT);
            settextcolor(RGB(0,255-13*k,0))
            outtextxy(rain[i].x,rain.y,rain[].str[k])
        }
    }   
}
void FiverStar(star temp);
void StarDraw(){
    setline(GREEN);
    for(int i=0;i<5;i++){
        FiverStar(star[i]);
        star[i].x+=star[i].vx;
        star[i].y+=star[i].vy;
        if(star[i].x>WIDTH||star[i].x<=0){
            star[i].vx=-star[i].vx;
        }
        else if(star[i].y+star[i].width>WEIGHT||star[i].y<0){
            star[i].vy=-star[i].vy
        }
    }
}
void ChangeCh(){
    for(int i=0;i<STR_NUM;i++){
        rain[i].str[rand()%STR_SIZE]=CreateCh(); 
    }
}
void RainMove(){
    for(int i=0;i<STR_NUM;i++){
        rain[i].y+=rain[i].speed;
        if(rain[i].y-STR_WIDEH*STR_SIZE>HEIGHT){
            rain[i].y=0;
        }
    }
}
int main()
{
    //srand((unsigned)time(NULL));
    GameInit();
    BeginBatchDraw();
    while(1){
        cleardevice();
        GameDraw();
        FLushBatchDraw(); 
        ChangeCh();
        RainMove();
    }
    EndBatchDraw();
    getchar();  
    return 0;
}
void FiverStar(star temp,int width){
    POINT star[5]={
        {temp.x,temp.y+temp.width/3},
        {temp.x+temp.width/3,temp.y},
        {temp.x+temp.width,yemp.y+temp.width/3},
        {temp.x+temp.width,temp.y+temp.width},
        {temp.x,temp.y+temp.width}
    };
    line(star[0].x,star[0].y,star[2].x,star[2].y);
    line(star[2].x,star[2].y,star[4].x,star[4].y);
    line(star[4].x,star[4].y,star[1].x,star[1].y);
    line(star[1].x,star[1].y,star[3].x,star[3].y);
    line(star[3].x,star[3].y,star[0].x,star[0].y);
}

视频版链接https://www.bilibili.com/video/BV19v411C7TK/?spm_id_from=333.337.search-card.all.click&vd_source=8e8c610e578fc3eb5301c7710ac61b93

这些都是_safdsfdeaf_亲手抄下来的,来之不易,可能写不完整。不管怎么说也得给个点赞收藏加关注嘛。

注意:需下载EasyX、克罗地亚狂想曲.mp3,而且音频路径必须一样(保姆级教程见视频版,有答案解析)