Exercice langage C corrigé: Flocons

#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;
}

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *