使用c++实现流星雨
时间: 2023-12-14 21:04:10 浏览: 30
使用C++实现流星雨可以通过图形库来实现,比如使用OpenGL或者SDL等库来绘制图形。下面是一个简单的示例代码,使用SDL库来实现流星雨效果:
```cpp
#include <SDL.h>
#include <iostream>
#include <vector>
#include <random>
const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 600;
const int STAR_COUNT = 100;
struct Star {
int x;
int y;
int speed;
};
std::vector<Star> stars;
void initializeStars() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> disX(0, SCREEN_WIDTH);
std::uniform_int_distribution<> disY(0, SCREEN_HEIGHT);
std::uniform_int_distribution<> disSpeed(1, 5);
for (int i = 0; i < STAR_COUNT; i++) {
Star star;
star.x = disX(gen);
star.y = disY(gen);
star.speed = disSpeed(gen);
stars.push_back(star);
}
}
void updateStars() {
for (auto& star : stars) {
star.y += star.speed;
if (star.y > SCREEN_HEIGHT) {
star.x = std::uniform_int_distribution<>(0, SCREEN_WIDTH)(std::random_device()());
star.y = 0;
star.speed = std::uniform_int_distribution<>(1, 5)(std::random_device()());
}
}
}
void drawStars(SDL_Renderer* renderer) {
SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
for (const auto& star : stars) {
SDL_RenderDrawPoint(renderer, star.x, star.y);
}
}
int main(int argc, char* argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cout << "SDL initialization failed: " << SDL_GetError() << std::endl;
return 1;
}
SDL_Window* window = SDL_CreateWindow("Meteor Shower", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == nullptr) {
std::cout << "Window creation failed: " << SDL_GetError() << std::endl;
return 1;
}
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == nullptr) {
std::cout << "Renderer creation failed: " << SDL_GetError() << std::endl;
return 1;
}
initializeStars();
bool quit = false;
SDL_Event event;
while (!quit) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = true;
}
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
updateStars();
drawStars(renderer);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
```
以上代码使用SDL库实现流星雨的效果,通过不断更新星星的位置和绘制来模拟星星下落的效果。你可以使用适当的编译器和链接器来编译运行这段代码,并查看流星雨效果。