Défi : bonhomme de neige
// bottom circle: ellipse(200,300,150,150); // middle circle: ellipse(200,214,114,114); // top circle: ellipse(200,148,84,88);
Défi : bonhomme de neige avec des bras
rect(0,355,400,44); ellipse(200, 300, 150, 150); ellipse(200, 200, 100, 100); ellipse(200, 120, 75, 75); line(160,200,100,100); line(240,200,300,100);
Défi : jour de neige ensoleillé
background(0, 196, 255); // The ground fill(27, 181, 68); rect(0, 300, 400, 100); // The sun fill(238, 255, 0); ellipse(80, 64, 100, 100); // The snowman fill(250, 245, 245); ellipse(200, 300, 150, 150); ellipse(200, 200, 100, 100); ellipse(200, 120, 75, 75);
Spin-off of « Projet : qu’avons-nous pour dîner ce soir ? »
background(186, 145, 20); // wooden table ellipse(200, 200, 350, 350); // plate ellipse(200, 200, 300, 300); //pizza paste fill(148, 130, 10); stroke(143, 2, 2); ellipse(200,200,290,290); //tomato fill(255, 0, 0); ellipse(147,116,100,100); //tomato fill(255, 0, 0); ellipse(247,280,100,100); //cheese fill(204, 214, 131); rect(70,199,85,40,9);
Défi : le lapin aux dents longues
var eyes = 47; var hTeeths = 32; ellipse(150, 70, 60, 120); // left ear ellipse(240, 70, 60, 120); // right ear ellipse(200, 170, 150, 150); // face fill(0, 0, 0); ellipse(170, 150, eyes, eyes); // left eye ellipse(230, 150, eyes, eyes); // right eye line(150, 200, 250, 200); // mouth noFill(); rect(185, 200, 15, hTeeths); // left tooth rect(200, 200, 15, hTeeths); // right tooth
Défi : la grenouille funky
var x = 200; var y = 250; noStroke(); fill(30, 204, 91); // a nice froggy green! ellipse(x, y, 200, 100); // face fill(10, 10, 10); ellipse(x,y,100,50); ellipse(x - 50, y - 50, 40, 40); // left eye socket ellipse(x + 50, y - 50, 40, 40); // right eye socket fill(255, 255, 255); // for the whites of the eyes! ellipse(x - 50, y - 50, 30, 30); // left eyeball ellipse(x + 50, y - 50, 30, 30); // right eyeball fill(3, 3, 3); rect(x-53,y-53,10,10); rect(x+46,y-53,10,10);
Défi : explosion solaire
noStroke(); // the beautiful blue sky background(82, 222, 240); // the starting size for the sun var sunSize = 30; draw = function() { sunSize = sunSize + 1 ; // The sun, a little circle on the horizon fill(255, 204, 0); ellipse(200, 298, sunSize, sunSize); // The land, blocking half of the sun fill(76, 168, 67); rect(0, 300, 400, 100); };
Défi : dissiper les nuages
noStroke(); var leftX = 118; var rightX = 295; var sunRadius = 100; draw = function() { background(184, 236, 255); fill(255, 170, 0); ellipse(200, 100, sunRadius, sunRadius); // clouds fill(255, 255, 255); // left cloud ellipse(leftX, 150, 126, 97); ellipse(leftX+62, 150, 70, 60); ellipse(leftX-62, 150, 70, 60); // right cloud ellipse(rightX, 100, 126, 97); ellipse(rightX+62, 100, 70, 60); ellipse(rightX-62, 100, 70, 60); leftX -= 1 ; rightX += 1 ; sunRadius += 2 ; };
Défi : la tomate goûteuse
background(255, 255, 255); // tomato noStroke(); fill(224, 90, 90); ellipse(150, 200, 150, 150); ellipse(212, 200, 150, 150); // stem fill(48, 130, 31); rect(176, 103, 12, 32); draw = function() { // take a bite out of the tomato! fill(255, 255, 255); ellipse(mouseX, mouseY, 60, 60); };
Défi : la manie du mouvement de la souris
draw = function() {<br> stroke(255, 0, 0);<br> fill(mouseX, mouseY, 0);<br> ellipse(mouseX, mouseY, mouseX, 10);<br> };
Défi : les yeux de l’ours brun
noStroke(); var x = 204; var y = 212; var faceSize = 428; // ears var earSize=faceSize*1/2; fill(89, 52, 17); ellipse(x-faceSize*2/5, y-faceSize*2/5, earSize, earSize); ellipse(x+faceSize*2/5, y-faceSize*2/5, earSize, earSize); // face fill(163, 113, 5); ellipse(x, y, faceSize, faceSize); //eyes var eyes = faceSize/8; fill(0, 0, 0); ellipse(x-faceSize/4, y-faceSize/8, eyes, eyes); ellipse(x+faceSize/4, y-faceSize/8, eyes, eyes); //nose fill(89, 52, 20); ellipse(x, y+faceSize/8, faceSize*4/15, faceSize/5);
Défi : mes aliments préférés
fill(255, 0, 0);<br> textSize(25);<br> text('My Favorite Foods',12,24);<br> text("1.cheeseburger",12,60);<br> text("2.pizza",12,85);<br> text("3.okonomiyaki",12,110);
Défi : le traqueur de souris
fill(255, 0, 255); draw = function() { background(255, 255, 255); ellipse(mouseX, mouseY, 12, 12); var label = "(" + mouseX + "mm" +" , "+ mouseY + "mm" + ")"; text(label, mouseX + 10 , mouseY +5 ); };
Défi : donnez votre nom
var test = function (){ var textX = random(0, 300); var textY = random(0, 300); var yourName = "Benjamin"; fill(255, 0, 0); textSize(30); text("Hiiii, " + yourName, textX, textY); }; test(); test(); test(); test();
Défi : des taupes dans les trous
var drawMole = function(moleX,moleY) { noStroke(); fill(125, 93, 43); ellipse(moleX, moleY, 60, 60); // face fill(255, 237, 209); ellipse(moleX, moleY+10, 33, 28); fill(0, 0, 0); ellipse(moleX-10, moleY-15, 10, 10); // eyes ellipse(moleX+10, moleY-15, 10, 10); ellipse(moleX, moleY-5, 10, 10); // nose ellipse(moleX, moleY+10, 20, 5); // mouth }; background(52, 168, 83); // green grass fill(0, 0, 0); ellipse(200, 200, 100, 30); // holes! ellipse(70, 119, 100, 30); ellipse(300, 60, 100, 30); ellipse(297, 350, 100, 30); drawMole (196,171); drawMole (292,321); drawMole (300,40); drawMole (50,80);
Défi : la calculatrice
var add = function(num1, num2) { return num1 + num2; }; var subtract = function(num1, num2) { return num1 - num2; }; var multiply = function(num1, num2) { return num1 * num2; }; var divide = function(num1, num2) { return num1 / num2; }; fill(255, 0, 0); text("15 + 3 is " + add(15, 3), 10, 20); text("15 - 3 is " + subtract(15, 3), 10, 50); text("15 * 3 is " + multiply(15, 3), 10, 80); text("15 / 3 is " + divide(15, 3), 10, 110); text("8 + 4 is " + add(8, 4), 10, 170); text("8 - 4 is " + subtract(8, 4), 10, 200); text("8 * 4 is " + multiply(8, 4), 10, 230); text("8 / 4 is " + divide(8, 4), 10, 260);
Challenge: Bouncy Ball
// position of the ball var y = 0; // how far the ball moves every time var speed = 2; draw = function() { background(127, 204, 255); fill(66, 66, 66); ellipse(200, y, 50, 50); // move the ball y = y + speed; if(y > 400) { speed = - 50; } if(y < 0) { speed = + 50; } };
Challenge: Your First Painting App
draw = function() { if (mouseIsPressed){ noStroke(); fill(random(0,255),random(0, 255),random(0, 255)); ellipse(mouseX, mouseY, 20, 20); } };
Challenge: Number Analyzer
var theNumber = 10; fill(0, 0, 0); textSize(30); text("Analysis of: " + theNumber, 10, 36); text("It's positive", 10, 90); text("It's negative", 10, 140); text("It's zero", 10, 190); noFill(); if (theNumber > 0){ rect(5, 60, 200, 40); } if (theNumber < 0){ rect(5, 108, 200, 40); } if (theNumber === 0){ rect(5, 155, 200, 40); }
Défi : votre premier bouton
Dans cette première étape, ajoutez un if
qui colore en rouge le bouton quand on presse la souris n’importe où sur la zone de dessin.
draw = function() { fill(0, 255, 68); // start color if (mouseIsPressed && mouseY <200){ fill(255, 0, 0); } rect(0, 0, 400, 200); // the button // The button text fill(0, 0, 0); textSize(30); text("Press me!", 145, 115); };
Défi : un bouton plus intelligent
Nous voulons que le bouton change de couleur uniquement quand nous cliquons à l’intérieur. Pour réaliser cela, vous allez utiliser des opérateurs de comparaison (>, <) sur les coordonnées x et y actives de la souris. Vous allez devoir vérifier plusieurs conditions (comme x plus grand qu’un nombre, mais plus petit qu’un autre), et donc utiliser l’opérateur &&.
draw = function() { fill(0, 255, 68); // start color if (mouseIsPressed && mouseX > 50 && mouseX < 300 && mouseY >150 && mouseY < 250) { fill(33, 112, 52); // click color } rect(50, 150, 250, 100); // the button // The button text fill(0, 0, 0); textSize(30); text("PRESS ME!", 93, 193); };
Défi : la fiche flashy
Vous afficherez la réponse quand la souris est pressée, et la question quand elle ne l’est pas.
draw = function() { background(165, 219, 162); fill(255, 254, 222); rect(20, 100, 364, 200); fill(0, 0, 0); if(mouseIsPressed) { textSize(20); text("JavaScript", 39, 200); } else { text("What programming language is this?",39,200); } };
Résumé : la logique et les instructions conditionnelles
Projet : la boule magique numéro 8
fill(0, 0, 0); ellipse(200, 200, 375, 375); fill(60, 0, 255); triangle(200, 104, 280, 280, 120, 280); fill(255, 255, 255); var answer = floor(random(1, 5)); text (answer,178,52); if (answer === 1) { text("NOT YET", 176, 200); text("IMPLEMENTED", 159, 229); } else if (answer ===2){ text("la reponse 2",176, 200); } else if (answer ===3){ text(" obiwan kenobi",167,200); } else { text("on en a", 176, 200); text("gros", 159, 229); }
Déboguer
Déboguer avec la fonction Print
vous pouvez insérer des print()
, ou des println()
, dans votre code pour vous aider à déterminer quel code est appelé et avec quelles valeurs. Ces deux fonctions affichent les valeurs dans une console qui apparaît sur la zone de dessin. Vous pouvez également utiliser debug()
pour envoyer l’affichage dans la console JavaScript de votre navigateur, si vous savez comment l’utiliser.
Défi : une règle en boucle
The Three Loop Questions:
What do I want to repeat?
What do I want to change each time?
How long should we repeat?
fill(17, 0, 255); // a handy dandy ruler across the top var x = 0; var y = 0; while ( x < 400) { text (x , x ,10); x += 50 ; } while ( y < 400) { text (y , 10 , y ); y += 50 ; }
Défi : un paysage en boucle
background(144, 240, 234); // Draw the sun noStroke(); fill(255, 140, 0); ellipse(335, 66, 70, 70); // Get images from library and remember in variables var grass = getImage("cute/GrassBlock"); var tree = getImage("cute/TreeUgly"); var x = 0; while(x < 400) { // Draw the tree and grass once image(grass, x, 270); image(tree, x, 200); x += 101 ; }
Les boucles for ! Un nouveau type de boucles
// For Loops! fill(120, 9, 148); // for (start; how long; change) for (var y = 63; y < 313; y += 41) { text("Pineapple pizza is the best!", 69, y); } /* var y = 27; while (y < 354) { text("Pineapple pizza is the best!", 80, y); y += 24; } */
Défi : le papier réglé
background(255, 255, 247); stroke(173, 222, 237); /*var i = 0; while (i < 20) { var lineY = 20 + (i * 20); line(0, lineY, 400, lineY); i++; } */ for ( var i = 0 ; i < 20 ;i++ ){ var lineY = 20 + (i * 20); line(0, lineY, 400, lineY); } for ( var y = 0 ; y < 20 ; y++) { var lineX = 20 + (y * 20); line (lineX, 0, lineX, 400); }
Boucles for imbriquées
for (var j = 0; j < 13; j++) { fill(255, 0, 0); text(j, 13, j*30+30); for (var i = 0; i < 12; i++) { fill(130, 56, 56); text(i, i*36, j*30+30); image(getImage("cute/GemOrange"), i*36, j*30, 40, 60); } }
Une boucle while est un moyen de répéter du code jusqu’à ce qu’une condition ne soit plus vérifiée. Par exemple, cette boucle while va afficher les valeurs de y aux coordonnées (30, y), tant que y est plus petit que 400. La boucle ajoute 20 à y, à chaque itération. y s’initialise à 40 et la boucle l’incrémente à 60, 80, 100, 120, etc…
var y = 40; while (y < 400) { text(y, 30, y); y += 20; }
La boucle for est similaire à la boucle while, mais avec une syntaxe plus spécialisée. Les programmeurs ont inventé la boucle for quand il se sont aperçus qu’ils reproduisaient souvent les 3 mêmes actions : créer des variables compteur (comme la variable y ci-dessus), les incrémenter d’une certaine valeur, et vérifier si elles sont plus petites qu’une valeur. La syntaxe d’une boucle for détient un emplacement spécifique pour chacune de ces trois actions. Voici la même boucle que la première boucle while ci-dessus, écrite selon la syntaxe de la boucle for :
for (var y = 40; y < 400; y += 20) { text(y, 30, y); }
Les boucles peuvent également être imbriquées. C’est d’ailleurs assez courant d’imbriquer des boucles for, en particulier dans le cas des dessins en 2 dimensions, car cela facilite la représentation de formes pouvant être vues comme des quadrillages. Quand on imbrique une boucle dans une autre boucle, on demande au programme de « faire une chose X fois, et pour chaque fois qu’il le fait, de faire également une autre chose Y fois ». Imaginez le dessin d’une grille : nous demandons au programme de « créer une colonne 10 fois, et pour chaque colonne, de créer 15 cellules à l’intérieur ». Voilà comment utiliser des boucles for imbriquées pour réaliser cela :
for (var col = 0; col < 10; col++) { for (var row = 0; row < 15; row++) { rect(col*20, row*20, 20, 20); } }
Défi : vos fruits favoris
var fruit = ["pomme","poire","banane"]; fill(255, 0, 0); text ("le top " + fruit.length + " de mes fruits favoris" , 50 , 50); text (fruit[0] , 50, 100 ); text (fruit[1] , 50, 150 ); text (fruit[2] , 50, 200 );
Défi : le faiseur de constellations
var xPositions = [100,150]; var yPositions = [200,250]; var drawStars = function() { background(9, 5, 59); imageMode(CENTER); for (var i = 0; i < yPositions.length; i++) { image(getImage("space/star"), xPositions[i], yPositions[i], 30, 30); } }; mouseClicked = function() { xPositions.push(mouseX); yPositions.push(mouseY); drawStars(); };
Spin-off of « Projet : faites pleuvoir »
var xPositions = [200]; var yPositions = [0]; draw = function() { background(204, 247, 255); for (var i = 0; i < xPositions.length; i++) { noStroke(); fill(0, 200, 255); ellipse(xPositions[i], yPositions[i], 10, 10); yPositions[i] += 5; } }; mouseClicked = function() { xPositions.push(mouseX); yPositions.push(mouseY); draw(); };