Codage de la version 1

Durée estimée: 90 minutes

Version textuelle

Ce que vous allez faire :

Vous allez maintenant "coder" la première version du simulateur.

  • C'est mieux si vous avez déjà utilisé Scratch, mais vous aurez un guide pas à pas et un modèle de départ,
  • Pour coder, nous allons expliciter les règles à appliquer et définir les évènements auxquels les objets (sprites) doivent réagir.

Réalisation

La réalisation de cette version du simulateur est décrite, dans la vidéo ci-dessous et sous forme textuelle.

Ressources de départ pour ce développement

Pour cette première version, vous pouvez créer un nouveau projet, ou démarrer à partir du canevas suivant https://scratch.mit.edu/projects/379998817
Dans ce canevas, les costumes et les variables sont déjà définis, le sprite graphique est également déjà réalisé. Ca vous fera gagner du temps et vous pourrez vous concentrer sur le code du simulateur.

Vidéo pour la réalisation

La réalisation se trouve dans la 2° partie de la vidéo à partir de 2:30

Guide pas à pas pour la réalisation

L'application comprend un sprite pour la simulation et un pour le graphique.

Sprite principal du simulateur : "personne"

Le sprite de simulation est appelé 'personne' car chaque instance ou clone de ce sprite correspond à une personne. Il doit avoir 3 costumes qui sont des cercles de 3 à 4 pixels de diamètre avec une couleur correspondant à la santé de la personne (bleu : en bonne santé, orange : malade, vert : guéri). Ces cercles doivent être centrés. Créez le premier costume, puis dupliquez le et changez sa couleur.

Les données / variables en 3 catégories:

  1. Les conditions initiales et paramètres externes
    • la durée de contamination (ou de la maladie) - en nombre de tics - est la durée pendant laquelle une personne (le clone) est malade et contagieux
    • population : le nombre de personnes
    • taux de confinement : la proportion de personnes qui restent confinées (immobiles). Les autres bougent en permanence
    • déplacement : l'envergure des déplacements (en pixels) à chaque tic, dans une direction qui évolue de façon aléatoire. Cette variable est équivalente à une vitesse de déplacement.
  2. Les données descriptives (tableau de bord) de l'épidémie à chaque instant
    • max-malades : le nombre maximal de malades à un moment donné sur l'ensemble de l'épidémie,
    • nombre-malades : le nombre de malades à un moment donné,
    • contaminés : le nombre total de personnes qui ont été contaminées pendant l'épidémie. Cette variable peut être utilisée pour estimer le nombre de décès et le niveau d'immunité collective de la population.
  3. Les données descriptives de chaque personne (variables locales)
    • "santé" : cette variable peut valoir 'bonneSanté', 'malade' ou 'guéri'. Une personne en bonne santé tombe malade si elle entre en contact avec une personne malade et elle guérit après la 'durée de contamination'.
    • "besoin de bouger" entre 0 et 100 : si cette variable est supérieure au taux de confinement, ce clone ou cette personne va se déplacer. sinon, elle restera chez elle.
    • temps depuis contamination : qui est le temps depuis lequel cette personne (cloen)a été contaminé. Elle sera guérie lorsque 'temps depuis contamination' attindra la 'durée de contamination',
Les deux premières catégories sont des variables partagées (ou globales). La 3° catégorie correspond à des variables spécifiques à chque clone ou personne qui doievent -impérativement - être déclarées comme des variables locales (faites bien attention à cocher cette option quand vous les créez).

Les évènements : il y en a 3

  • Quand clic sur le drapeau vert : pour initialiser le jeu et envoyer les tics d'horloge (Les tics vont continuer jusqu'à ce qu'il n'y ait plus de malade).
  • Quand je commence comme un clone : à la création de chacune des personnes (en bonne santé),
  • Quand je reçois tic-horloge : pour définir les actions à cahque tic d'horloge.
  1. Le script du clic drapeau vert correspond au démarrage
    avec :
    • le choix du nombre de personnes (population) et de leur vitesse de déplacement (Deplacement),
    • la définition des variables et paramètres du scénario en appelant la procédure 'conditionsDePropagation',
    • l'initialisation du premier patient contaminé avec la procédure 'Patient0'. Le patient0 est le sprite non cloné.
    • la création, dans une boucle de clones du sprite. Leur nombre est défini dans la variable 'population',
    • l'envoi ssous forme de message, de tics-horloge (correspondant au temps qui passe) jusqu'à ce qu'il n'y ait plus de malade (nombre-de-malades=0).

    La procédure 'conditions de propagation' initialise les variables correspondant

    • à la durée de contamination (ou le temps de la maladie entre la contamination et la guérison),
    • et au tableau de bord ou suivi (nombre de malades, max-malades et contaminés).
    • Le taux de confinement est réglé directement par l'utilisateur avec l'ascenceur. Ces variables globales correspondent aux catégories 1 et 2 vues plus haut.

    La procédure 'Patient0' initialise les variables locales du sprite (non cloné)

    • sa position initiale, au centre (0,0)
    • le fait qu'il n'est pas confiné besoinDeBouger=100
    • qu'il est malade :santé = malade
    • et au début de la maladie : temps-depuis-contamination = 0
    • affiché avec le costume 'malade'

  2. l'évènement Quand je commence comme un clone
    est déclenché à la création de chacun des points ou personnes dans les script du drapeau vert avec les actions suivantes :.
    • placement à une position aléatoire
    • déclaration en bonne santé : santé = bonneSanté
    • affichage du costume BonneSanté
    • et choix aléatoire de la variable "besoinDeBouger" entre 0 et 99. (Ce clone ne sera mobile que si 'besoinDeBouger' est supérieur à 'tauxDeConfinement').

    Vous pouvez déjà tester cette version. La surface de jeu devrait se couvrir de clones, pour l'instant immobiles.

  3. l'évènement Quand je reçois tic-horloge correspond au temps qui passe. A chaque tic ou chaque pas de temps, on va faire 3 tests :
    1. si le 'besoinDeBouger' est supérieur au 'taux-de-confinement, appel de la procédure bouger qui va déplacer ce clone (ou cette personne)
    2. si santé=bonneSanté, appel de la procédure 'tester-si-j'ai-été-contaminé' pour savoir si ce clone a été contaminé par contact avec un malade,
    3. et si santé=malade, appel de la procédure 'tester-si-je-suis-guéri' pour savoir si la durée de la malade est atteinte

    La procédure 'bouger'

    • modifie de façon aléatoire l'orientation du clone +/- 30° autour de son orientation précédente
    • le fait avancer de la quantité définie dans la varaible 'Deplacement'
    • le fait rebondi si le bord est atteinte

    La procédure 'tester-si-j'ai-été-contaminé'

    • commence par tester si la couleur du costume malade a été touchée.
      Attention : Il faut utiliser la pipette pour sélectionner exactement cette couleur. Il ne suffit pas que la couleur donne l'impression d'être la même (les 3 composantes RVB doivent être exactement les mêmes entre la couleur sélectionnée et la couleur du costume 'malade').
    • et si la couleur de costume malade a été tocuhée :
      • basculer le clone costume à 'malade'
      • mettre la variable santé à 'malade'
      • ajouter 1 au nombre de 'contaminés'
      • ajouter 1 au 'nombre-de-malades'
      • et si le nombre-de-malades est supérieur au nombre maximmum de malades déjà enregistrés, mettre le 'nombre-de-malades'dans la variabel 'max-malades'.

    La procédure 'tester-si-je-suis-guéri' est appelée à chaque tic-horloge pour les clones malades :

    • On commence par ajouter 1 au temps-de-contamination
    • puis on teste si ce temps-de-contamination a atteint la duree-de-contamination, et si oui (loe colne est guéri) :
      • retirer 1 au nombre-de-malades
      • basculer sur le costume guéri
      • et mettre la variable 'saanté à guéri

C'est fini pour le code du sprite de simulation, vous pouvez tester et jouer vos scénarios :

Sprite du graphique : "gr_malades"

Le graphique qui représente le nombre de malades permet de mieux voir ce qui se passe. Sa réalisation est relativement simple :

  • au drapeau vert, on efface tout, on lève le crayon et on le positionne en bas à gauche (-240,-180)
  • à chaque tic on dessine jusqu'au point suivant : l'abscisse x est augmentée de 1 et l'ordonnée y est celle du bas (-180) auquel on ajoute 3,6 fois le nombre-de-malades.

Dans le cas où le nombre-de-malades atteint 100, y vaudra +180, soit le haut de la fenêtre. C'est parfait sai on choisi la valeur 100 pour la variable population. Mais si nous augmentons la population pour de nouveaux essais, il vaut mieux que la courbe ne dépasse pas le haut de la fenêtre quand le nombre-de-malades est égal à la population.
On va donc appliquer une règle de trois à y, en multipliant par 100 et en divisant par la population. La courbe bleue va alors correspondre à un pourcentage, quelle que soit la population. C'est mieux.