Le robot joue au ballon
Comment aller chercher le ballon
Dans ce chapitre, vous allez programmer le robot pour qu'il trouve le ballon, puis le lance.
Il est donc d'abord nécessaire de savoir faire aller le robot dans une case du terrain, celle où se trouve le ballon. (La gestion du ballon sera expliquée au paragraphe suivant)
Vous allez donc écrire un sous-programme AllerALaCaseXY faisant aller le robot dans une case de coordonnées (x, y) x et y étant deux variables dont les valeurs auront été affectées avant d'appeler le sous-programme. Pour faire aller le robot à la case x,y on le déplacera en direction de la position x,y et ceci tant que le robot ne sera pas en x,y. On utilisera pour cela une boucle TantQue et un autre sous-programme AllerVersXY
Avant de commencer :
- Ouvrez un nouveau programme
- Choisissez le niveau 6
- Choisissez le terrain Terrain9x9.bog (menu Terrain > Modifier, puis menu Terrain > Ouvrir, puis clic sur Utiliser ce terrain)
Enregistrer le programme
- Fichier > Enregistrer sous ...
- Aller en Mes documents > Devoirs > gilletm
- Donner comme nom : robot_joue_ballon_VosNoms
N'oubliez d'enregistrer votre programme de temps en temps, cela ne sera jamais rappelé. Et parfois RobotProg plante !
Sous-programme AllerVersXY
Ce sous-programme permettra de faire avancer le robot s'il est orienté vers la case à atteindre sinon il fera tourner le robot
- Créez un nouveau sous-programme auquel vous donnerez le nom AllerVersXY
- Construire l'organigramme suivant :
Conditions logiques utilisées pour tester la direction du robot :
dyRobot=0 et (x-xRobot)*dxRobot > 0
- la condition dyRobot = 0 est vraie dans le cas où le robot est orienté suivant l'axe des x, dxRobot vaut alors 1 pour une orientation vers la droite et - 1 pour une orientation vers la gauche
- La valeur x - xRobot représente le parcours à effectuer suivant l'axe des x, le robot est orienté vers la colonne x à atteindre si sa direction dxRobot et le parcours à effectuer sont de même signe, le produit des deux doit alors être positif, ce qui est traduit par la condition (x-xRobot)*dxRobot > 0
- Si x-xRobot = 0 alors le robot est dans la bonne colonne, le produit (x-xRobot)*dxRobot est égal à zéro, le robot tourne.
- De la même façon la condition dxRobot=0 et (y-yRobot)*dyRobot > 0 permet de tester l'orientation du robot suivant l'axe des y.
Verifiez que l'organigramme est correct en cliquant le bouton "Vérifier organigramme"
Sous-programme AllerALaCaseXY
- Créez un nouveau sous-programme de nom AllerALaCaseXY
- Construisez l'organigramme suivant :
La boucle TantQue est représentée par un bloc boucle de même forme que la boucle Pour. L'en-tête de la boucle contient l'instruction TantQue qui est de la forme : le mot-clef TantQue suivi d'une condition logique (comme celles utilisées dans les tests)
Si la condition logique donne le résultat Vrai l'organigramme présent dans le corps de la boucle est exécuté, puis l'instruction Fin TantQue ramène l'exécution à l'en-tête de la boucle, la condition est à nouveau évaluée, etc ...
Si la condtion logique donne le résultat Faux, le corps de la boucle n'est pas exécuté et l'exécution se poursuit au bloc suivant la boucle.
Dans le sous-programme AllerALaCaseXY, le corps de la boucle, c'est à dire l'appel du sous-programme AllerVersXY sera exécuté tant que la condition xRobot différent de x ou yRobot différent de y sera vraie:
- xRobot <> x est une expression logique qui compare xRobot et x, le résultat est vrai si xRobot est différent de x ;
- de même yRobot <> y est vrai si yRobot est different de y ;
- en conséquence la condition xRobot <> x ou yRobot <> y sera vraie si le robot tant que le robot n'est pas dans la case x, y
* Test du sous-programme AllerALaCaseXY :
- Entrez l'organigramme suivant dans le programme principal.
- Lancer l'exécution et verifiez que la robot arrive bien dans la case indiquée par les variables x et y.
- Changez la position de départ du robot et relancer le programme. Le robot doit arriver dans la bonne case.
- Changer les valeurs de x et y dans le programme principal et relancer le programme. Le robot doit arriver dans la nouvelle case.
Comment programmer le ballon
- Le ballon apparaît sur le terrain uniquement quand le programme utilise un mot-clef relatif au ballon.
Au début de l'exécution le ballon est placé dans une case déterminée au hasard.
- La position du ballon sur le terrain est donnée par deux mots-clef xBallon et yBallon.
On peut par exemple tester si le robot est dans la même case que le ballon en utilisant la condition :
xRobot = xBallon et yRobot = yBallon
- Commandes du robot relatives au ballon : PrendreBallon, PoserBallon, LancerBallon
Ces commandes doivent être écrites dans des blocs de commande éditables.
- PrendreBallon : le robot prend le ballon s'il se trouve dans la même case que le ballon.
- PoserBallon : le robot pose le ballon dans la case qu'il occupe.
- LancerBallon : le robot lance le ballon à trois cases devant lui. Si le ballon sort du terrain, il est relancé automatiquement dans une case prise au hasard.
Un robot joue au ballon
Ici vous allez écrire un programme dans lequel le robot trouve le ballon et le lance.
On réutilisera le sous-programme AllerALaCaseXY en donnant à x et y les valeurs de xBallon et yBallon dans le programme principal.
- Remplacer l'organigramme du programme principal par le suivant :
- Lancer l'exécution et admirer votre travail.
Enregistrer votre travail
Comment programmer et faire jouer plusieurs robots
Au niveau 6, on peut faire exécuter simultanément les programmes de plusieurs robots sur le même terrain. Chacun des robots est associé à une fenêtre de programme. Quand le niveau est inférieur à 6, l'ouverture d'un programme ou la création d'un nouveau programme entraîne la fermeture du programme courant : il ne peut y avoir qu'un seul programme utilisé à la fois. Au niveau 6, quand vous ouvrez un autre programme les autres précedemment ouverts le restent.
L'ensemble des programmes des robots constituent le projet. Vous pouvez voir la liste de ces programmes dans la fenêtre du projet avec le menu Fenêtre > Projet. Cette fenêtre vous permet aussi d'afficher les programmes masqués ou de supprimer des programmes du projet. Au niveau 6, quand une fenêtre de programme est fermée, le programme proprement dit reste dans le projet même s'il n'est plus affiché
Au niveau 6 il est possible aussi de faire jouer les robots à différents jeux. Ici les robots vont jouer au basket.
- Choisissez le menu Configuration > Choisir un jeu. La fenêtre de choix de jeu apparaît.
- Sélectionnez le jeu de basket
- Consultez les règles de ce jeu en cliquant sur le bouton "Règles du jeu"
- Validez le choix en cliquant sur le bouton OK
Vous constaterez que l'objectif du programme est devenu "Lancer le ballon dans le panier" : c'est l'objectif du jeu et il n'est plus modifiable tant qu'un jeu est en cours.
Le terrain est aussi fixé et non modifiable, vous pouvez voir le terrain de basket en affichant la fenêtre exécution. Le panier est la case centrale entourée de murs.
Enregistrer le programme sous un nouveau nom
- Fichier > Enregistrer sous ...
- Aller en Mes documents > Devoirs > gilletm
- Donner comme nom : basket_1_VosNoms
N'oubliez d'enregistrer votre programme de tant en tant, cela ne sera jamais rappelé. Et parfois RobotProg plante !
Partie de basket
Essai du programme précédent
- Lancer le programme précédent : problème ! Dans certains cas le robot s'écrase contre les murs au centre du terrain, il faut revoir le sous programme AllerVersXY qui ne tenait pas compte des obstacles sur le terrain
- Modifier le sous-programme AllerVersXY en remplaçant le bloc Avancer par un test qui permet soit d'avancer soit de tourner avant d'avancer pour éviter le mur.
- Relancez l'exécution : c'est dèja mieux, le robot ne s'écrase plus contre les murs au centre. Par contre il lance le ballon n'importe où !
Pour pouvoir marquer un point au jeu de basket , le robot doit lancer le ballon dans le panier au centre. Or, quand le robot lance le ballon, le ballon va à 3 cases devant lui. Donc avant de lancer le ballon le robot doit aller dans une case distante de 3 pas du panier, par exemple la case [2 , 5] puis s'orienter vers le panier.
- Modifier le programme principal :
- Lancez le programme, vous constaterez que maintenant le robot marque des points ....
Exercice à rendre
* La partie de basket à plusieurs robots :
- Lancer l'exécution : et il apparait encore des problèmes : en effet, d'abord quand il y a plusieurs robots ils peuvent s'écraser les uns contre les autres, il faut donc tester la présence d'un autre robot avec le mot-clef CaseDevantOccupée, en modifiant le programme AllerVersXY.
- Tester votre nouveau programme (il ne faut pas oublier qu'il faut modifier tous les programmes ouverts)
- Maintenant il faut modifier l'un des 2 programmes ouvert pour que le robot ne lance pas le ballon du même endroit en choisissant une autre case que [2 , 5]
- A vous de jouer .... en essayant qu'il n'y ait plus de problème !
Envoi du fichier dans Chamilo :
Vérifie que tu es toujours indentifié. Vas dans la page d'accueil du cours Techno_3ème, et en haut à droite tu dois retrouver cet onglet bleu : avec ton nom écrit. Si ce n'est pas le cas retourne à la page d'accueil de Chamilo et réindentifie-toi.
- Vas dans Techno_3ème
- Clique sur Travaux
- Clique sur le bon dossier : RobotProg_Tutoriel5
- Clique sur "Envoyer un document"
- Choisis les diagrammes (basket1 -2 -3 - 4) que tu viens d'enregistrer en utilisant le bouton "Parcourir"
- Remplis tous les champs
- Clique sur "Envoyer le document"