HomeTortue graphiqueGPanelRobotique WebTigerPython
 Python - Online
ereignisse
Deutsch   English   Français   

11. ÉVÉNEMENTS DE LA SOURIS

 

 

TU APPRENDRAS ICI...

 

que la programmation événementielle est un nouveau concept de programmation. Au lieu de donner des instructions à la tortue à l'aide de ton programme, tu peux la contrôler avec des clics de souris.

 

 

EXEMPLES DE PROGRAMMES

 

Les événements de la souris permettent de déclencher des actions à l'aide de la souris. Les clics sont détectés par le système et provoquent l'appel d'une fonction appelée fonction de rappel (callback). Cette fonction reçoit les coordonnées du clic de souris et définit ce qui doit se passer lorsqu'on clique. Elle est enregistrée comme paramètre nommé de makeTurtle().

Dans ton exemple, la tortue se déplace à chaque clic vers la position de la souris et y dessine un point. Tu définis ce comportement dans la fonction de rappel onMousePressed(x, y). Cette fonction reçoit également les coordonnées du clic.

La fonction de rappel est enregistrée à l'aide d'un paramètre de makeTurtle(). Tu indiques ainsi au système qu'il doit appeler cette fonction à chaque clic de souris.

 

Programme:

from gturtle import *

def onMousePressed(x, y):
    moveTo(x, y)
    dot(20)

makeTurtle(mousePressed = onMousePressed)
hideTurtle()
setPenColor("blue")
dot(20)
►Copy to clipboard
 

 

Dans le deuxième exemple, une étoile est dessinée à chaque clic de souris. Pour cela, tu définis d'abord une fonction drawStar(), qui dessine une étoile. Dans la fonction de rappel onMousePressed(x, y), tu définis ce que la tortue doit faire lorsqu'un bouton de la souris est enfoncé. Ici, elle appelle ta fonction drawStar() à la position du clic pour y dessiner une étoile.

La fonction de rappel est enregistrée comme paramètre de makeTurtle(). Tu indiques ainsi au système qu'il doit appeler cette fonction à chaque clic de souris. Les coordonnées x et y du clic lui sont alors transmises.

 

Programme:

from gturtle import *

def drawStar():
    repeat 9:
        forward(40)
        right(160)

def onMousePressed(x, y):
    setPos(x, y)
    drawStar()

makeTurtle(mousePressed = onMousePressed)
hideTurtle()
setPenColor("magenta")
►Copy to clipboard
 

 

Dans l'exemple suivant, tu dessines un polygone rempli à n côtés à l'aide de clics de souris. Pour cela, tu définis une fonction de rappel drawPoint(x, y), qui dessine un point lors du premier clic. Lors des clics suivants, elle relie la position actuelle de la souris au point précédent et dessine un nouveau point. Tu peux saisir le nombre de sommets à l'aide d'une boîte de dialogue. Le nombre de points déjà dessinés est enregistré dans la variable n. Celle-ci augmente de 1 à chaque clic de souris.Lorsque n correspond au nombre de sommets saisi, la figure est remplie en rouge avec fillPath(). Comme la variable n est modifiée dans la fonction drawFigure(), elle doit être déclarée comme variable global.

 

Programme:

from gturtle import *

def drawFigure(x, y):
    global n
    if n == 1:
        setPos(x, y)        
        startPath()
    else:
        moveTo(x, y) 
    dot(5)
    if n == nbCorners:
        fillPath()  
    n += 1

makeTurtle(mousePressed = drawFigure)
hideTurtle()
setFillColor("red")
n = 1
nbCorners = inputInt("Gib die Eckenzahl ein:")
► Copy to clipboard

 

 

 

À RETENIR...

 

Cette nouvelle technique de programmation se caractérise par le fait que la fonction onMousePressed(x, y) n'est appelée nulle part directement dans ton programme.

Elle est appelée par le système lorsqu'un événement se produit. Une telle fonction est appelée fonction de rappel, ou simplement callback.

Dans le dernier exemple, la variable n est appelée variable globale, car elle est utilisée à la fois dans le programme principal et dans la fonction de rappel drawFigure(x, y).

Une variable utilisée uniquement à l'intérieur d'une fonction est appelée variable locale.

 

 

EXERCICES À RÉSOUDRE TOI-MÊME

 

1.

À chaque clic de souris, un disque rempli (dot) doit être dessiné. La couleur de remplissage et le diamètre du disque sont choisis au hasard.

Tu trouveras comment générer des couleurs aléatoires dans le deuxième exemple du chapitre « Nombres aléatoires ».

 

2.

ur un fond bleu foncé, une étoile remplie en jaune doit être dessinée à chaque clic de souris.

Tu peux créer le fond bleu avec la commande clear("darkblue").

 

3.

Comme dans l'exercice précédent, les étoiles sont dessinées aux positions des clics de souris.

La couleur de remplissage des étoiles alterne entre le rouge et le bleu.

(Après avoir dessiné une étoile rouge, tu dois définir la couleur bleue pour la suivante, et inversement.)

 

 

 

 

POUR ALLER PLUS LOIN

 

TON PREMIER JEU

 

Le Tic-Tac-Toe est un jeu bien connu dans lequel deux joueurs placent à tour de rôle des croix ou des cercles dans les cases d'une grille de 3 × 3.

Le but est d'être le premier à aligner trois de ses symboles horizontalement, verticalement ou en diagonale.

 

Ici, au lieu de dessiner des croix et des cercles, tu dessines un point rouge ou vert selon le joueur.

Tu définis d'abord la fonction drawBoard() qui dessine la grille de 3 × 3. Pour changer de couleur, tu introduis une variable player qui identifie le joueur (elle prend la valeur 1 ou 2). Tu dois déclarer cette variable comme globale dans la fonction de rappel drawDot(x, y), car elle est initialisée dans le programme principal et change de valeur entre 1 et 2 après chaque clic de souris dans la fonction drawDot().

 


Programme:
from gturtle import *

def square():
    for i in range(4):
        forward(60)
        right(90)

def drawBoard():
    for x in range(3):
        for y in range(3):
            setPos(60 * x, 60 * y)
            square()

def drawDot(x, y):
    global player
    if player == 1:
        setPenColor("red")
        player = 2
    elif player == 2:
        setPenColor("lime")
        player = 1
    setPos(x, y)
    dot(45)

player = 1        
makeTurtle(mousePressed = drawDot)
hideTurtle()
drawBoard()
► Copy to clipboard

Il serait intéressant d'améliorer ce jeu pour qu'il détecte automatiquement lorsqu'un joueur a gagné ou lorsque la partie se termine par un match nul.

 

 

À RÉSOUDRE PAR TOI-MÊME

 
4*.


Crée un jeu de Nim avec 15 pierres rouges. Chaque joueur peut retirer au maximum 3 pierres en cliquant dessus avec la souris. Il doit ensuite cliquer sur le bouton vert, qui sert de bouton « OK ». C'est alors au tour de l'autre joueur. Le joueur qui retire la dernière pierre a perdu. Pour déterminer si un joueur a cliqué sur une pierre rouge ou sur le bouton vert, utilise la commande getPixelColorStr(). Cette fonction renvoie la couleur du fond à la position concernée (par exemple "red" ou "green"). Pour faire disparaître les pierres, il suffit de les recouvrir de blanc. Ce jeu se joue traditionnellement avec des allumettes.