猫史档案馆


C++代码雨

用户:FreeWorldFreeWorld查看:0 回复:0 评论:0 创建时间:2024-07-20T21:24:25


C++代码雨

有Bug !!!

有兴趣的伙伴可以改正代码

代码如下:

#include <vector>
#include <random>
#include <SDL.h>
#include <SDL_ttf.h>

const int PANEL_WIDTH = 1920;
const int PANEL_HEIGHT = 1080;
const int FONT_PX = 40;

int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_EVERYTHING);
    TTF_Init();

    SDL_Window* window = SDL_CreateWindow("Matrix Rain", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, PANEL_WIDTH, PANEL_HEIGHT, SDL_WINDOW_FULLSCREEN);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    TTF_Font* font = TTF_OpenFont("C:/Windows/Fonts/simhei.ttf", 35);

    SDL_Color color = {0, 255, 0};
    std::vector<SDL_Surface*> texts;
    std::vector<SDL_Texture*> textures;
    std::vector<char> letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

    for (int i = 0; i < 20; ++i) {
        SDL_Surface* textSurface = TTF_RenderText_Solid(font, &letters[i], color);
        SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurface);
        texts.push_back(textSurface);
        textures.push_back(textTexture);
    }

    int column = PANEL_WIDTH / FONT_PX;
    std::vector<int> drops(column, 0);

    SDL_Event event;
    bool running = true;
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(0, 19);
    std::uniform_real_distribution<> dis2(0.0, 1.0);

    while (running) {
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                running = false;
            } else if (event.type == SDL_KEYDOWN) {
                if (event.key.keysym.sym == SDLK_SPACE) {
                    running = false;
                }
            }
        }

        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 20);
        SDL_RenderClear(renderer);

        for (int i = 0; i < drops.size(); ++i) {
            int index = dis(gen);
            SDL_Rect rect;
            rect.x = i * FONT_PX;
            rect.y = drops[i] * FONT_PX;
            rect.w = FONT_PX;
            rect.h = FONT_PX;
            SDL_RenderCopy(renderer, textures[index], NULL, &rect);

            drops[i] += 1;
            if (drops[i] * 10 > PANEL_HEIGHT || dis2(gen) > 0.95) {
                drops[i] = 0;
            }
        }

        SDL_RenderPresent(renderer);
        SDL_Delay(30);
    }

    for (auto& surface : texts) {
        SDL_FreeSurface(surface);
    }
    for (auto& texture : textures) {
        SDL_DestroyTexture(texture);
    }

    TTF_CloseFont(font);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    TTF_Quit();
    SDL_Quit();

    return 0;
}


回复

上一页1 页 / 共 0下一页