#include #include "swindow.h" struct Flocon { int x, y; }; void init_flocon(Flocon * f, int longueur, int hauteur) { f->x = rand() % longueur; f->y = rand() % hauteur; } void dessine_flocon(SimpleWindow * window, Flocon * f) { window->drawPoint(f->x, f->y); } void avance_flocon(Flocon * f, int hauteur) { // Deplacement vertical entre 0 et 3. f->y = f->y + rand() % 4; // Deplacement horizontal entre -2 et 2. f->x = f->x + (rand() % 5) - 2; // Si le flocon est arrive en bas de la fenetre, on le replace au sommet. if (f->y >= hauteur) f->y = 0; } int main(int argc, char ** argv) { const int longueur = 200; const int hauteur = 200; const int nb_flocons = 500; Flocon flocons[nb_flocons]; // Initialise le generateur de nombres aleatoires srand(time(0)); SimpleWindow window("neige", longueur, hauteur); window.map(); // Initialisation aleatoire de la position des flocons: for(int i = 0; i < nb_flocons; i++) init_flocon(flocons + i, longueur, hauteur); // boucle infinie pour afficher les flocons while (true) { // Efface la fenetre en bleu clair: window.color(1, 0.5, 0.5); window.fill(); // Dessine en blanc: window.color(1, 1, 1); for(int i = 0; i < nb_flocons; i++) { // Affichage des flocons: dessine_flocon(&window, flocons + i); // Deplace les flocons: avance_flocon(flocons + i, hauteur); } window.show(); // attends 20ms usleep(20000); } getchar(); return 0; }
Voici un autre exercice sur la génération de flocons de neige en langage C, avec la solution correspondante.
Énoncé :
Écrire un programme en langage C qui génère un motif de flocon de neige de Koch. Le flocon de Koch est une courbe fractale qui commence par un triangle équilatéral. À chaque étape, chaque segment de droite est divisé en trois parties égales, puis le segment du milieu est remplacé par deux segments formant un triangle équilatéral.
Spécifications :
- Le programme doit dessiner un flocon de Koch de manière récursive.
- L’utilisateur doit pouvoir spécifier le nombre d’itérations.
- Le programme doit utiliser une bibliothèque graphique (par exemple,
graphics.h
sous Windows ouSDL
pour plus de portabilité).