Salut à toi, élève de NSI, comment puis-je t'aider ?
Il existe plusieurs manière de concevoir un programme; on parle de paradigmes de programmation.
Jusqu'ici, vous avez utilisé ( a priori ) uniquement la programmation impérative; dans ce type de programmation, le code est constitué de données stockées dans des variables de différents types ( entiers, tableaux,...), et sont manipulées par des fonctions.
Mais il existe bien d'autres paradigmes, et vous en verrez deux autres cette année :
Chaque langage ne permet pas forcément tous les paradigmes de programmation : le langage C par exemple ne permet pas la POO, le langage Haskell est uniquement fonctionnel, etc...
Avec Python, tous les paradigmes de programmation sont possibles, impératif, objet, fonctionnel,....c'est une chance !
L'utilisation de tel ou tel paradigme de programmation dépend du but visé et des contraintes du programme à écrire : par exemple, le paradigme fonctionnel est utilisé dans les domaines où l'on cherche un code robuste dans lequel les données ne sont pas susceptibles d'être modifiées accidentellement, comme par exemple dans le domaine spatial; la POO permet d'écrire un code clair et facilement maintenable, etc...Chaque paradigme a ses avantages et ses inconvénients.
En introduction au concept de POO, nous allons tout de suite voir un exemple de problème dans lequel ce paradigme montre ses avantages.
Vous allez coder en Python une petite animation qui, dans un premier temps, fera "monter" une "bulle" dans une fenêtre.
Les scripts de ce chapitre utilisent le module Pyxel ( du moins, une version "light"...)
C'est le module que vous utiliserez pour créer des jeux lorsque vous participerez à la Nuit du c0de au mois de mai 😊.
Pour pouvoir utiliser ce module dans les éditeurs de ce chapitre, penser auparavant à installer le module poorpyxel
à l'aide du
bouton .
Attention, ce module est disponible uniquement dans les éditeurs en ligne, mais n'est pas installé pas sur vos machines.
Pour commencer, nous allons considérer l'ébauche de code ci-dessous qui vous permettra de démarrer :
import poorpyxel as ppx
from random import randint
ppx.init(150, 150)
def update():
global x, y, couleur, taille, vitesse
# Déplacement de la bulle vers le haut en tenant compte de sa vitesse;
# Quand la bulle arrive en haut de la fenêtre, on réinitialise ses caractéristiques.
pass
def draw():
# 1. Effacement global de la fenêtre :
ppx.cls(0)
# 2. Dessin de la bulle dans la fenêtre :
ppx.circ(x, y, rayon, couleur)
# initialisation des caractéristiques de la bulle
x = randint(10, 140)
y = ppx.height
couleur = randint(1, 15)
rayon = randint(2 ,5)
vitesse = randint(2, 10)
ppx.run(update, draw)
Quelques commentaires sur ce code :
ppx
.update
sert, comme son nom l'indique, à modifier les variables utilisées dans l'animation; c'est dans cette fonction
que vous coderez la "mécanique" de votre script, c'est à dire les instructions pour déplacer la bulle.draw
est quant à elle chargée uniquement de l'affichage des objets.On remarque que les variables caractéristiques de la bulle ( x, y, vitesse, ...) sont définies dans le programme principal, mais qu'elles devront
être modifiées dans la fonction update
de façon à faire bouger la bulle.
Cependant, une fonction ne peut modifier que les variables qui lui sont locales, c'est à dire définies dans sa propre portée ( autrement dit, définies dans
le corps de cette fonction )...la solution est donc ici de rendre ces variables globales au script, c'est à dire modifiables
à n'importe quel endroit; c'est le rôle du mot clé global
placé au début de la fonction update
.
Revoir au besoin le chapitre de Première au sujet de la portée des variables.
L'usage des variables globales est à limiter au strict nécessaire, car souvent source de problèmes...vous verrez que la POO est un moyen de s'affranchir de ce genre de problème !
A vous de compléter le code dans la fonction draw
de façon à :
Compléter votre code précèdent de façon à faire "monter" deux bulles en même temps.
Compléter votre code précèdent de façon à faire "monter" plusieurs bulles en même temps !
Vous commencez à voir le problème ??