c语言流星雨代码
以下是一个简单的C语言流星雨代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define WIDTH 80
#define HEIGHT 20
typedef struct {
int x;
int y;
int speed;
char shape;
} Meteor;
void gotoxy(int x, int y) {
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void drawMeteor(Meteor meteor) {
gotoxy(meteor.x, meteor.y);
printf("%c", meteor.shape);
}
void eraseMeteor(Meteor meteor) {
gotoxy(meteor.x, meteor.y);
printf(" ");
}
void updateMeteor(Meteor *meteor) {
eraseMeteor(*meteor);
meteor->y += meteor->speed;
if (meteor->y >= HEIGHT) {
meteor->y = 0;
meteor->x = rand() % WIDTH;
meteor->speed = rand() % 3 + 1;
}
drawMeteor(*meteor);
}
int main() {
srand(time(NULL));
Meteor meteors[10];
for (int i = 0; i < 10; i++) {
meteors[i].x = rand() % WIDTH;
meteors[i].y = rand() % HEIGHT;
meteors[i].speed = rand() % 3 + 1;
meteors[i].shape = '*';
}
while (1) {
for (int i = 0; i < 10; i++) {
updateMeteor(&meteors[i]);
}
Sleep(50);
}
return 0;
}
这个代码使用了Windows API中的SetConsoleCursorPosition
函数来控制光标位置,实现了流星雨的效果。在主函数中,首先使用srand
函数设置随机数种子,然后创建了一个包含10个流星的数组。每个流星都有随机的初始位置、速度和形状。然后在一个无限循环中,不断更新每个流星的位置,并使用Sleep
函数暂停一段时间,以控制流星的速度。
这个代码使用了Windows API中的SetConsoleCursorPosition
函数来控制光标位置,实现了流星雨的效果。在主函数中,首先使用srand
函数设置随机数种子,然后创建了一个包含10个流星的数组。每个流星都有随机的初始位置、速度和形状。然后在一个无限循环中,不断更新每个流星的位置,并使用Sleep
函数暂停一段时间,以控制流星的速度。
在代码中,gotoxy
函数用于将光标移动到指定的坐标位置,drawMeteor
函数用于绘制流星,eraseMeteor
函数用于擦除流星,updateMeteor
函数用于更新流星的位置。
流星的更新规则是,首先擦除当前位置的流星,然后将流星的y坐标增加其速度,如果流星超出了屏幕的高度,则将其重新放置到屏幕顶部的随机位置,并随机生成新的速度。最后,绘制更新后的流星。
代码中的Sleep(50)
函数用于暂停50毫秒,以控制流星的速度。你可以根据需要调整这个值来改变流星的速度。
请注意,这个代码只能在Windows系统上运行,并且需要在命令行窗口中运行。如果你想在其他平台上运行,需要使用相应的图形库来实现类似的效果。