<?xml version="1.0" encoding="UTF-8"?>

<upm-export>
	<title>Enseignement de l&#039;informatique et du numérique au lycée Boissy d&#039;Anglas</title>
	<link>https://icn-isn-boissy.yj.fr/wp</link>
	<description></description>
	<pubDate>Wed May 6 11:40:07 2026 / +0000  GMT</pubDate>
	<generator>Universal Post Manager 1.1.2 [ www.ProfProjects.com ] </generator>
	<language></language>
	
			<item>
			<title>Programmation javascript avec p5.js</title>
			<link>http://icn-isn-boissy.yj.fr/wp/?p=571</link>
			<pubDate>Wed May 6 11:40:07 2026 / +0000  GMT</pubDate>
			<guid isPermaLink="false">http://icn-isn-boissy.yj.fr/wp/?p=571</guid>
			<content-encoded><![CDATA[<h1>Débuter avec le javascript</h1>
Le javascript est un langage de programmation que l'on peut insérer dans une page web et qui est interprété par le navigateur internet.
<h2>Introduction</h2>
Pour commencer un utilisera, l'excellent site <a href="http://silentteacher.toxicode.fr/" target="_blank" rel="noopener">Silent Teacher</a> (ne pas y consacrer plus qu'une heure).
<p style="padding-left: 30px;"><span style="text-decoration: underline;">Note :</span> Si besoin, notamment si vous vous êtes interrompu, il est possible de faire apparaître le menu permettant de choisir le niveau de difficulté en tapant dans la console javascript (généralement accessible avec <code>F12</code>) le code suivant : <code>(document.getElementById("show_menu")).click()</code>.</p>

<h2>Variable, conditions et boucle</h2>
Pour apprendre les bases de la programmation, on utilisera le livre en ligne <em>JavaScript Éloquent, Une introduction moderne à la programmation</em> de Marijn Haverbeke (dont on pourra lire l'<a href="http://fr.eloquentjavascript.net/chapter1.html" target="_blank" rel="noopener">introduction</a> à la maison).

<figure id="attachment_850" aria-describedby="caption-attachment-850" style="width: 227px" class="wp-caption aligncenter"><a href="http://fr.eloquentjavascript.net/" target="_blank" rel="noopener"><img class="size-medium wp-image-850" src="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/eloquentjavascript-227x300.png" alt="Javascript Eloquent" width="227" height="300" /></a><figcaption id="caption-attachment-850" class="wp-caption-text">Javascript Eloquent</figcaption></figure>

Dans ce livre en ligne, les exemple de code peuvent être lancé en cliquant sur <a href="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/javascriptelequent_runcode.png"><img class="alignnone wp-image-851 size-full" src="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/javascriptelequent_runcode.png" alt="runcode" width="15" height="15" /></a> (on peut aussi l'ouvrir pour l'éditer dans une console en cliquant sur <a href="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/javascriptelequent_loadcode.png"><img class="wp-image-854 size-full" src="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/javascriptelequent_loadcode.png" alt="loadcode" width="15" height="15" /></a>).

Commencer par lire le chapitre :
<p style="text-align: center;"><a href="http://fr.eloquentjavascript.net/chapter2.html" target="_blank" rel="noopener">Les bases du JavaScript : valeurs, variables et structures de contrôle</a></p>
&nbsp;

<!--nextpage-->
<h2>Premiers pas avec p5.js</h2>
<h3>Récupération des fichiers</h3>
Pour commencer, télécharger l'archive ZIP <a href="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/applications-javascript.zip" rel="noopener">applications-javascript.zip </a>contenant les fichiers qui seront utilisés pour découvrir le javascript et la bibliothèque p5.js.

Extraire les fichiers dans un répertoire dédié et observer leur organisation :
<ul>
 	<li>le répertoire racine contient les fichiers HTML.</li>
 	<li>le répertoire <strong>assets</strong> contient les contenus de média (images, sons...).</li>
 	<li>le répertoire <strong>scripts</strong> contient les fichiers javascript (extension .js).</li>
 	<li>le répertoire <strong>styles</strong> contient les fichiers CSS.</li>
</ul>
On trouvera dans le répertoire <strong>scripts</strong> les fichiers <strong>p5.js</strong> et <strong>p5.sound.js</strong>. Ces deux fichiers font partie de la bibliothèque p5.js.

Une bibliothèque (<em>library</em>) rassemble un ensemble de fonctions déjà codées qui peuvent alors être utilisées directement dans un programme. <a href="https://p5js.org/" target="_blank" rel="noopener">p5.js</a> permet très facilement de dessiner, de jouer un son, de faire des animations... Il s'agit du portage en en javascript du programme <a href="https://processing.org/" target="_blank" rel="noopener">Processing</a> (qui utilise un autre langage de programmation, le Java).

Toutes les fonctions de p5.js sont recensées sur la page :
<p style="text-align: center;"><a href="https://p5js.org/reference/" target="_blank" rel="noopener">https://p5js.org/reference/</a></p>
Par ailleurs on trouvera sur le site de nombreux exemples et tutoriaux.
<h3>HTML et javascript</h3>
Pour être interprétable par un navigateur web, un programme javascript doit être intégré dans une page web. On utilise pour cela la balise &lt;script&gt; :
<pre class="code"><code class="html xml"><span class="tag">&lt;<span class="title">script</span> <span class="attribute">type</span>=<span class="value">"text/javascript"</span>&gt;</span><span class="javascript">
  <span class="comment">// Mon code Javascript</span>
  ...
</span><span class="tag">&lt;/<span class="title">script</span>&gt;</span>
</code></pre>
Il est aussi possible de lier directement un fichier javascript avec :
<pre class="code"><code class="html xml"><span class="tag">&lt;<span class="title">script</span> <span class="attribute">type</span>=<span class="value">"text/javascript"</span> <span class="attribute">src</span>=<span class="value">"monscript.js"</span>&gt;</span><span class="tag">&lt;/<span class="title">script</span>&gt;</span></code></pre>
Ouvrir le fichier <strong>exercice-debogage.html</strong> avec un éditeur de texte (Notepad++, Sublimtext...) et identifier les deux fichiers javascript qui sont appelés.

Puis ouvrir le fichier <strong>exercice-debogage.html</strong> dans un navigateur web et observer ce qu'il fait.

<!--nextpage-->
<h2>Outils de débogage</h2>
Les navigateurs modernes possèdent des outils avancés (les <em>Outils de développement</em>) permettant de faire la chasse aux erreurs d'un programme (les <em>bugs</em> ou <em>bogues</em>).

On utilisera le navigateur Mozilla Firefox et son Débogueur accessible dans le menu <em>Développment</em> (ou avec le raccourcis clavier Control-Maj-S). Voici à quoi il ressemble (cliquer pour agrandir):

<a href="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/légende-débug-firefox.png"><img class="size-medium wp-image-610" src="http://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2016/10/légende-débug-firefox-300x135.png" alt="Outil de debug de Firefox légendé" width="100%" /></a>

<strong>Conseils</strong> :
<ul>
 	<li>afficher la console miniature (<em>console scindée</em>).</li>
 	<li>régler la console de manière à n'afficher que javascript et journal (ce sont les seuls qui doivent avoir un fond coloré).</li>
 	<li>cliquer sur le fichier p5.js et le mettre dans une boîte noire.</li>
</ul>
<h3>Premier exercice avec les outils de débogage</h3>
Ouvrir le fichier <strong>exercice-debogage.html</strong> et l'outil de débogage de Firefox (si besoin on peut relancer le programme en actualisant la page - touche F5).

Mettre le programme en pause (avec l'outil de débogage de Firefox), puis écrire dans la console les commandes suivantes (aide : on peut reprendre une commande précédente en utilisant la touche flèche haute) :
<pre>fill(200);
ellipse(200,300,50);
ellipse(300,400,100,30);
ellipse(400,200,40,200);</pre>
En déduire à quoi correspondent chacun des nombres passés entre parenthèse à la fonction <strong>ellipse()</strong>. Consulter <a href="https://p5js.org/reference/#/p5/ellipse" target="_blank" rel="noopener">la documentation de la fonction <strong>ellipse()</strong></a> pour vérifier votre réponse.
<h3>Deuxième exercice avec les outils de débogage</h3>
Recharger la page <strong>exercice-debogage.html</strong> et, avec l'outil de débogage de Firefox, chercher dans le fichier <strong>exercice-debogage.js</strong> la ligne :
<pre>ellipse(400,300,diametre);</pre>
Insérer un point d'arrêt sur cette ligne et créer une nouvelle expression espionne sur la variable <strong>diametre</strong>. Mettre enfin le fichier <strong>p5.js</strong> dans une boîte noire.

Recharger la page et exécuter pas à pas le programme avec les outils de débogage. Suivre au fur et à mesure de l'exécution du programme l'évolution de la valeur de la variable <strong>diametre</strong>.

Quelle est la ligne de code qui permet de faire évoluer la taille du disque ?

<!--nextpage-->
<h2>Application n°1 : Créer un petit programme de dessin</h2>
Ouvrir dans un éditeur de texte (comme Notepad++ ou Sublimtext) le fichiers <strong>application-1_dessin.js</strong>. Ce programme est normalement appelé par le fichier html <strong>application-1_dessin.html</strong>.

Ce fichier contient deux fonctions (on verra ce qu'est une fonction à la partie suivante) :
<ul>
 	<li>la fonction <strong>setup()</strong> dont le code est appelé au début du programme (pour initialiser des variables ou configurer par exemple la taille de la fenêtre de dessin).</li>
 	<li>la fonction <strong>draw()</strong> dont le code est exécuté de manière répétée 60 fois par seconde.</li>
</ul>
Le but de cette partie est de créer un petit programme de dessin. Ne pas hésiter à tester des bouts de code dans la console, ou à consulter la <a href="https://p5js.org/reference/" target="_blank" rel="noopener">documentation</a>. On écrira du code javascript uniquement dans la fonction <code>draw()</code> (chercher le commentaire indiquant le début de l'exercice).

Travail à effectuer :
<table style="width: 100%;">
<tbody>
<tr>
<th>n°</th>
<th>Tâche</th>
<th>Indications</th>
</tr>
<tr>
<td>1</td>
<td>Compléter le commentaire en en-tête du programme en indiquant votre nom et la date.</td>
<td>
<ul>
 	<li>Toujours prendre le temps de commenter un programme.</li>
</ul>
</td>
</tr>
<tr>
<td>2</td>
<td>Afficher un disque de diamètre 10 pixels au centre de la fenêtre de dessin.</td>
<td>
<ul>
 	<li>Travailler dans la fonction <code>draw()</code></li>
 	<li>Si besoin re-tester la fonction
<code>ellipse()</code> dans la console ou consulter sa documentation sur le site <a href="https://p5js.org/reference/#/p5/ellipse" target="_blank" rel="noopener">p5js.org</a>.</li>
</ul>
</td>
</tr>
<tr>
<td>3</td>
<td>Utiliser les variables <code>mouseX</code> et <code>mouseY</code> pour placer le disque à la position de la souris.</td>
<td>
<ul>
 	<li>Ces deux variables sont créées par p5.js et contiennent la position en x et en y de la souris (consulter la documentation si besoin).</li>
</ul>
</td>
</tr>
<tr>
<td>4</td>
<td>Colorier le disque en rouge si l'on clique à la souris, en vert sinon.</td>
<td>
<ul>
 	<li>La variable booléenne<code> mouseIsPressed</code> est créée par p5.js et permet de savoir si un bouton de la souris est pressé ou non.</li>
 	<li>La couleur de remplissage est définie par <code>fill(R,V,B)</code> où R, V et B sont des nombres allant de 0 à 255 indiquant la quantité de rouge, de vert et de bleu (voir documentation).</li>
</ul>
</td>
</tr>
<tr>
<td>5</td>
<td>Effacer le dessin lorsqu'on clique avec la molette de la souris (bouton du milieu).</td>
<td>
<ul>
 	<li>Pour effacer il faut redéfinir la couleur du fond avec la fonction <code>background()</code>.</li>
 	<li>Consulter <a href="https://p5js.org/reference/#/p5/mouseButton" target="_blank" rel="noopener">la documentation de la variable <code>mouseBouton</code></a> pour voir comment identifier quel bouton de la souris est utilisé pour cliquer.</li>
</ul>
</td>
</tr>
<tr>
<td>6</td>
<td>Augmenter la taille du disque lorsque l'on clique avec le bouton gauche, et la diminuer lorsque l'on clique avec le bouton droit.</td>
<td>
<ul>
 	<li>Déclarer une variable nommée <code>diametre</code> juste avant la fonction <code>draw()</code> (à l'endroit indiqué en commentaire). Changer sa valeur en fonction du bouton utilisé pour cliquer.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<!--nextpage-->
<h2>Apprendre le javascript (suite) : les fonctions</h2>
Reprendre le livre <em>JavaScript Éloquent</em> et lire maintenant le chapitre suivant (mais ne pas y passer plus d'une séance, tant pis si vous n'avez pas tout lu) :
<p style="text-align: center;"><a href="http://fr.eloquentjavascript.net/chapter3.html" target="_blank" rel="noopener">Fonctions</a></p>

<h2>Application n°2 : Transformer votre clavier en piano</h2>
Cette fois on travaillera avec le fichier <strong>application-2_piano.js</strong>. Vérifier qu'il est bien appelé par le fichier HTML <strong>application-2_piano.html</strong>. Au passage vous remarquerez qu'en plus de la bibliothèque <strong>p5.js</strong> on utilise <strong>p5.sound.js</strong> (qui est la partie de p5.js qui permet de gérer les sons). La documentation de la bibliothèque p5.sound.js se trouve <a href="http://p5js.org/reference/#/libraries/p5.sound" target="_blank" rel="noopener">ici</a>.

Ouvrir le fichier <strong>application-2_piano.js</strong> avec un éditeur. Vous observerez qu'il contient déjà :
<ul>
 	<li>une fonction <strong>setup()</strong> qui est appelée par p5.js au démarrage du programme.</li>
 	<li>une fonction <strong>draw()</strong> appelée une fois par seconde [grâce à la ligne frameRate(1); dans setup()] et qui est utilisée pour battre la mesure.</li>
 	<li>une fonction <strong>jouerFrequence()</strong> qui, comme son nom l'indique, permet de jouer un son d'une fréquence donnée.</li>
 	<li>une fonction <strong>keyTyped()</strong> qui est appelée par p5.js chaque fois qu'une touche du clavier est enfoncée. Pour le moment cette fonction ne fait rien.</li>
 	<li>une fonction <strong>keyReleased() </strong>qui coupe le son lorsque une touche du clavier est relâchée.</li>
</ul>
Ouvrir le fichier <strong>application-2_piano.html</strong> dans un navigateur. Normalement vous devez avoir le son de la mesure (un bruit de tambour, une fois par seconde). Vérifier que le son fonctionne (utiliser des écouteurs pour ne pas déranger vos voisins).

Le but de cette partie est de transformer le clavier de l'ordinateur en piano, capable de jouer des notes sur plusieurs octaves.

Pour cela, on donne les fréquences des notes pour l'octave n°3 :
<table style="width: 100%;">
<tbody>
<tr>
<td>Note</td>
<td>do3</td>
<td>ré3</td>
<td>mi3</td>
<td>fa3</td>
<td>sol3</td>
<td>la3</td>
<td>si3</td>
</tr>
<tr>
<td>Fréquences (Hz)</td>
<td>261.63</td>
<td>293.66</td>
<td>329.63</td>
<td>349.23</td>
<td>392.00</td>
<td>440.00</td>
<td>493.88</td>
</tr>
</tbody>
</table>
Sachant que pour une autre octave les notes s'en déduisent par :
<blockquote>fréquence de l'octave n = fréquence de l'octave 3 multipliée par (2 à la puissance [n-3])</blockquote>
Travail à effectuer :
<table style="width: 100%;">
<tbody>
<tr>
<th>n°</th>
<th>Tâche</th>
<th>Indications</th>
</tr>
<tr>
<td>1</td>
<td>Compléter le commentaire en en-tête du programme en indiquant votre nom et la date.</td>
<td>
<ul>
 	<li>Toujours prendre le temps de commenter un programme.</li>
</ul>
</td>
</tr>
<tr>
<td>2</td>
<td>Jouer un do3 chaque fois qu'une touche est pressée.</td>
<td>
<ul>
 	<li>Appeler la fonction <code>jouerFrequence()</code> depuis la fonction <code>keyTyped()</code> en lui donnant la fréquence du do3.</li>
</ul>
</td>
</tr>
<tr>
<td>3</td>
<td>Créer la fonction <code>frequence()</code> qui prend comme argument la note à jouer sous forme de chaîne de caractère (do, ré, mi...) et renvoie la fréquence correspondante (pour l'octave n°3).</td>
<td>
<ul>
 	<li>Par exemple <code>frequence("la")</code> renvoie le nombre <code>440.00</code>, et <code>frequence("do")</code> renvoie le nombre <code>261.63</code>, etc.</li>
 	<li>Tester la fonction à partir de la console pour vérifier qu'elle fonctionne pour toutes les valeurs de paramètre possibles.</li>
</ul>
</td>
</tr>
<tr>
<td>4</td>
<td>Modifier la fonction <code>frequence()</code> de manière qu'elle prenne comme argument le numéro d'octave, en plus de la note à jouer et renvoie toujours la fréquence de la note demandée.</td>
<td>
<ul>
 	<li>Par exemple, <code>frequence("si",2)</code> renverra le résultat de <code>493.88*pow(2,-1)</code> qui est la fréquence du si2, et <code>frequence("fa",5)</code> renverra le résultat de <code>349.23*pow(2,2)</code> qui est la fréquence du fa5.</li>
 	<li>Utiliser la fonction <a href="https://p5js.org/reference/#/p5/pow" target="_blank" rel="noopener">pow()</a> pour calculer la fréquence de n'importe quel octave</li>
 	<li>Tester la fonction à partir de la console pour vérifier qu'elle fonctionne pour toutes les valeurs de paramètre possibles.</li>
</ul>
</td>
</tr>
<tr>
<td>5</td>
<td>Faire que les touches "a" à "u" du clavier jouent les notes de l'octave n°2 ("a" joue do2, "z" joue ré2, "e" joue mi2, etc.), les touches "q" à "j" les notes de l'octave n°3 et les touches "w" à "," les notes de l'octave n°4.</td>
<td>
<ul>
 	<li>Utiliser la variable <a href="http://p5js.org/reference/#/p5/key" target="_blank" rel="noopener">key</a> pour savoir quelle touche est pressée.</li>
 	<li>Dans <code>keyTyped()</code>, appeler la fonction <code>frequence()</code> pour connaître la fréquence à jouer puis la fonction <code>jouerFrequence</code> pour la jouer.</li>
</ul>
</td>
</tr>
<tr>
<td>6</td>
<td>Stocker la couleur du fond dans une variable et l'utiliser pour changer la couleur du fond.</td>
<td>
<ul>
 	<li>Un pourra utiliser la fonction <a href="http://p5js.org/reference/#/p5/color"><code>color()</code></a>, mais cette fonction ne peut pas être appelée n'importe où. L'utiliser au sein de la fonction <code>setup()</code>.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<!--nextpage-->
<h2>Apprendre le javascript (fin) : les tableau</h2>
Reprendre le livre <em>JavaScript Éloquent</em> et lire maintenant le chapitre d'après (mais ne pas y passer plus d'une séance, tant pis si vous n'avez pas tout lu) :
<p style="text-align: center;"><a href="http://fr.eloquentjavascript.net/chapter4.html" target="_blank" rel="noopener">Structures de données : objets et tableaux</a></p>

<h2> Application n°3 : Faire voler un dragon</h2>
Le fichier javascript de la troisième application s'appelle <strong>application-3_sprites.js</strong> et est appelé dans le fichier html correspondant (on appelle <em>sprite</em>, ou <em>lutin</em>, un élément graphique qui peut se déplacer sur l'écran).

Le but de cette application est de créer une animation avec un dragon puis un rouge-gorge. Les images à utiliser se trouvent dans le répertoire <code>assets/images/</code>.

Attention : si le nom de l'image n'est pas correct, le programme peut bloquer sur <em>Loading</em>, sans afficher de message d'erreur dans la console.

Travail à effectuer :
<table style="width: 100%;">
<tbody>
<tr>
<th>n°</th>
<th>Tâche</th>
<th>Indications</th>
</tr>
<tr>
<td>1</td>
<td>Compléter le commentaire en en-tête du programme en indiquant votre nom et la date.</td>
<td>
<ul>
 	<li>Toujours prendre le temps de commenter un programme.</li>
</ul>
</td>
</tr>
<tr>
<td>2</td>
<td>Déclarer une variable appelée <code>dragon</code> qui doit pouvoir être accessible de partout dans le programme. Stocker dans cette variable <code>dragon</code> l'image <code>dragon_frame-1.png</code>.
Puis afficher l'image à la position de la souris.</td>
<td>
<ul>
 	<li><code>dragon</code> doit-elle être une variable locale ou globale ?</li>
 	<li>Pour charger une image, utiliser la fonction <a href="http://p5js.org/reference/#/p5/loadImage"><code>preload()</code></a>.</li>
 	<li>Pour afficher une image, utiliser <code>image(dragon,dx=valeur,dy=valeur)</code> où les valeurs données à <code>dx</code> et <code>dy</code> donnent la position de l'image sur la fenêtre de dessin.</li>
 	<li>La position de la souris est donnée par <code>mouseX</code> et <code>mouseY</code>.</li>
 	<li>Afficher l'image dans la fonction <code>draw()</code>.</li>
 	<li>Pour effacer il faut appeler la fontion <code>background().</code></li>
 	<li>Pour plus d'esthétique, on pourra rajouter <code>imageMode(CENTER)</code> et <code>noCursor()</code> dans la fonction <code>setup()</code>.</li>
</ul>
</td>
</tr>
<tr>
<td>3</td>
<td>Transformer la variable <code>dragon</code> en tableau et y stocker dans l'ordre les quatre images de dragon contenues dans assets/images/
Afficher l'image n°3 à la position de la souris.</td>
<td>
<ul>
 	<li>Pour déclarer un tableau vide il faut écrire <code>var tab = []</code>.</li>
 	<li>Pour ajouter un élément à un tableau on peut utiliser : <code>tab.push(element)</code>.</li>
 	<li>Le remplissage du tableau avec la fonction <code>loadImage()</code> doit se faire dans la fonction <code>preload()</code>.</li>
 	<li>Afficher le tableau dans la console pour vérifier qu'il est bien rempli.</li>
</ul>
</td>
</tr>
<tr>
<td>4</td>
<td>Animer le dragon en faisant défiler les images</td>
<td>
<ul>
 	<li>Il faut créer une variable <code>index</code> qui stocke le numéro de l'image à afficher.</li>
 	<li>Changer la valeur de <code>index</code> dans la fonction <code>draw()</code>.</li>
 	<li>Attention : <code>index</code> doit correspondre à un élément du tableau, il ne peut pas prendre n'importe quelle valeur.</li>
</ul>
</td>
</tr>
<tr>
<td>5</td>
<td>Remplacer le dragon par un rouge-gorge à en utilisant les fichiers <code>assets/images/rouge-gorge_frame-i.png</code>.</td>
<td>
<ul>
 	<li>Vu le nombre d'image il faut utiliser une boucle <code>for</code>.</li>
 	<li>Pour transformer un nombre en chaîne de caractère on peut utiliser <a href="http://p5js.org/reference/#/p5/str"><code>srt()</code></a></li>
 	<li>Pour concaténer deux chaînes de caractère <code>a</code> et <code>b</code> utiliser simplement <code>a+b</code>.</li>
</ul>
</td>
</tr>
</tbody>
</table>
&nbsp;]]></content-encoded>
			<excerpt-encoded><![CDATA[]]></excerpt-encoded>
			<wp-post_id>571</wp-post_id>
			<wp-post_date>2017-11-03 19:26:15</wp-post_date>
			<wp-post_date_gmt>2017-11-03 18:26:15</wp-post_date_gmt>
				</item>
</upm-export>
