C言語で雪が降るアニメーションのコードをどのように書くのか。

以下は、シンプルなC言語での雪のアニメーションのコードのサンプルです。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h> // 用于Sleep函数

#define WIDTH 80      // 屏幕宽度
#define HEIGHT 25     // 屏幕高度
#define SNOW_NUM 100  // 雪花数量

typedef struct {
    int x;
    int y;
} Snowflake;

Snowflake snowflakes[SNOW_NUM]; // 雪花数组

// 初始化雪花位置
void initSnowflakes() {
    int i;
    for (i = 0; i < SNOW_NUM; i++) {
        snowflakes[i].x = rand() % WIDTH;
        snowflakes[i].y = rand() % HEIGHT;
    }
}

// 更新雪花位置
void updateSnowflakes() {
    int i;
    for (i = 0; i < SNOW_NUM; i++) {
        snowflakes[i].y++;
        if (snowflakes[i].y >= HEIGHT) {
            snowflakes[i].y = 0;
            snowflakes[i].x = rand() % WIDTH;
        }
    }
}

// 绘制雪花
void drawSnowflakes() {
    int i;
    for (i = 0; i < SNOW_NUM; i++) {
        COORD coord = {snowflakes[i].x, snowflakes[i].y};
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
        printf("*");
    }
}

int main() {
    initSnowflakes(); // 初始化雪花位置

    while (1) {
        updateSnowflakes(); // 更新雪花位置
        system("cls");      // 清屏
        drawSnowflakes();   // 绘制雪花
        Sleep(100);         // 延时
    }

    return 0;
}

このコードは、Windows.hライブラリのCOORD構造体とSetConsoleCursorPosition関数を使用して、コンソール上で雪を描画する効果を実現しています。initSnowflakes関数では、SNOW_NUM個の雪のランダムな位置が初期化されます。updateSnowflakes関数では、各ループで雪のy座標が1つ増加し、y座標が画面の高さを超えると再びランダムな位置に配置されます。drawSnowflakes関数では、SetConsoleCursorPosition関数を使用してカーソルを指定位置に移動し、”*”を印刷して雪を表します。main関数では、無限ループを使用して雪の効果を継続的に更新、クリア、描画し、Sleep関数を使用してアニメーションの遅延を制御します。

bannerAds