用户:
FreeWorld查看: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;
}