То что вы увидите сегодня, не поддается никакому описанию. Это просто надо видеть.
Снимок экрана от 2023-02-17 22-38-42.png
Ну вот и всё. Все всё увидели и остались счастливы. Затмение Солнца, конец СВЕТА и прочие приколы Вселенной.
1#include "tb.h"
2#include <math.h>
3
4App* app;
5
6float phase = 0;
7
8int gray(int g) {
9
10    if (g < 0) g = 0;
11    else if (g > 255) g = 255;
12    return g + g*256 + g*65536;
13}
14
15void circle(float x, float y, int rad) {
16
17    for (int i = -rad; i < rad; i++)
18    for (int j = -rad; j < rad; j++) {
19
20        int r = i*i + j*j;
21
22        if (r < rad*rad) {
23
24            int b = app->point(x + j, y + i) & 255;
25            int k = 100 + rad*16 - r;
26            if (k < 0) k = 0;
27
28            app->pset(x + j, y + i, gray(b + k));
29        }
30    }
31}
32
33void render() {
34
35    app->cls(0);
36
37    srand(1);
38
39    // Рисовать звездное небо
40    for (int i = 0; i < 512; i++) {
41
42        int x = rand() % 640;
43        int y = rand() % 400;
44        int cl = rand() % 256;
45        app->pset(x, y, gray(cl));
46    }
47
48    // Солнце и его изменчивость
49    circle(320, 200, 50);
50    circle((320. + 6.*sin(1.0*phase)), 200. + 2.*cos(1.0*phase), 55);
51    circle((320. - 4.*sin(1.2*phase)), 200. - 3.*cos(0.9*phase), 55);
52    circle((320. + 2.*sin(1.1*phase)), 200. - 5.*cos(1.2*phase), 55);
53
54    // Симулятор Луны
55    for (int i = -50; i < 50; i++)
56    for (int j = -50; j < 50; j++) {
57        if (i*i + j*j < 31*31) {
58            app->pset(320 + j, 200 + i, 0);
59        }
60    }
61
62    phase += 0.05;
63}
64
65int main(int argc, char* argv[]) {
66
67    app = new App();
68    while (app->main()) render();
69    return app->destroy();
70}