То что вы увидите сегодня, не поддается никакому описанию. Это просто надо видеть.
Snimok_ekrana_ot_2023-02-17_22-38-42.png
Ну вот и всё. Все всё увидели и остались счастливы. Затмение Солнца, конец СВЕТА и прочие приколы Вселенной.
#include "tb.h"
#include <math.h>

App* app;

float phase = 0;

int gray(int g) {

    if (g < 0) g = 0;
    else if (g > 255) g = 255;
    return g + g*256 + g*65536;
}

void circle(float x, float y, int rad) {

    for (int i = -rad; i < rad; i++)
    for (int j = -rad; j < rad; j++) {

        int r = i*i + j*j;

        if (r < rad*rad) {

            int b = app->point(x + j, y + i) & 255;
            int k = 100 + rad*16 - r;
            if (k < 0) k = 0;

            app->pset(x + j, y + i, gray(b + k));
        }
    }
}

void render() {

    app->cls(0);

    srand(1);

    // Рисовать звездное небо
    for (int i = 0; i < 512; i++) {

        int x = rand() % 640;
        int y = rand() % 400;
        int cl = rand() % 256;
        app->pset(x, y, gray(cl));
    }

    // Солнце и его изменчивость
    circle(320, 200, 50);
    circle((320. + 6.*sin(1.0*phase)), 200. + 2.*cos(1.0*phase), 55);
    circle((320. - 4.*sin(1.2*phase)), 200. - 3.*cos(0.9*phase), 55);
    circle((320. + 2.*sin(1.1*phase)), 200. - 5.*cos(1.2*phase), 55);

    // Симулятор Луны
    for (int i = -50; i < 50; i++)
    for (int j = -50; j < 50; j++) {
        if (i*i + j*j < 31*31) {
            app->pset(320 + j, 200 + i, 0);
        }
    }

    phase += 0.05;
}

int main(int argc, char* argv[]) {

    app = new App();
    while (app->main()) render();
    return app->destroy();
}