Show pageOld revisionsBacklinksCopy this pageBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. <title>Morpion - Etape 7</title> ==== Ce qu'on veut faire ==== Pour le moment, il est possible de jouer plusieurs fois dans la même case. Ce n'est pas quelque chose qui est autorisé quand on joue au morpion ! Pour cela, il va falloir : * identifier le numéro de la case dans laquelle on a cliqué * vérifier le ce numéro ne correspond pas à une case qui a déjà été jouée Pour identifier le numéro de la case, on va les numéroter comme ci-dessous : {{:scratch:cells_01.png|}} ==== Ce qu'il faut faire ==== Nous allons avoir besoin de 3 nouvelles variables : * ''case'' : c'est une variable classique qui va nous permettre de savoir le numéro de la case dans laquelle on a cliqué * ''cases_joueur_0'' : c'est une variable un peu particulière. C'est une liste qui va contenir les cases jouées par le joueur 0. * ''cases_joueur_1'' : c'est une variable un peu particulière. C'est une liste qui va contenir les cases jouées par le joueur 1. Pour créer une liste, il faut : * sélectionner la scène * aller dans la catégorie ''Données'' * cliquer sur le bouton ''Créer une liste'' Ensuite, dans le fenêtre qui s'ouvre, il faut donner un nom à la liste puis cliquer sur le bouton ''Ok'' : {{:scratch:pasted:20200227-213344.png}} Il faut donc créer la variable et les 2 listes pour obtenir le résultat : {{:scratch:pasted:20200227-213758.png}} On peut cacher les variables ''joueur'', ''ligne'' et ''colonne'' en les désélectionnant : {{:scratch:pasted:20200227-214138.png}} Afficher les variables est utile pour comprendre comment fonctionne une script et surtout comprendre quand il y a des erreurs dans un script. C'est pour cela que pour l'instant, on affiche la nouvelle variable et les 2 listes. D'après la numérotation que l'on a choisie, on peut dire : * si ''ligne = 1'' et ''colonne = 1'', alors ''case = 1'' * si ''ligne = 1'' et ''colonne = 2'', alors ''case = 2'' * si ''ligne = 1'' et ''colonne = 3'', alors ''case = 3'' * si ''ligne = 2'' et ''colonne = 1'', alors ''case = 4'' * si ''ligne = 2'' et ''colonne = 2'', alors ''case = 5'' * si ''ligne = 2'' et ''colonne = 3'', alors ''case = 6'' * si ''ligne = 3'' et ''colonne = 1'', alors ''case = 7'' * si ''ligne = 3'' et ''colonne = 2'', alors ''case = 8'' * si ''ligne = 3'' et ''colonne = 3'', alors ''case = 9'' On peut donc créer 9 éléments comme celui-ci : {{:scratch:pasted:20200227-215216.png}} On obtient une longue suite d'éléments qu'il faudrait positionner avant l'élément ''créer un clone de Lutin_morpion'' : {{:scratch:pasted:20200227-221301.png}} On obtiendrait alors une suite vraiment très longue d'éléments ! Nous allons donc faire autrement : * nous allons définir un bloc avec tous les éléments de droite * nous allons utiliser ce bloc comme un élément juste avant l'élément ''créer un clone de Lutin_morpion'' Pour cela, il faut : * aller dans la catégorie ''Ajouter blocs'' * cliquer sur le bouton ''Créer un bloc'' * donne le nom ''identifier la case'' * cliquer sur le bouton ''Ok'' {{:scratch:pasted:20200227-221958.png}} Il ne reste plus qu'à : * positionner l'élément ''définir identifier la case'' en haut des éléments de droite * positionner l'élément ''Ajouter blocs -> identifier la case'' juste avant l'élément ''créer un clone de Lutin_morpion'' {{:scratch:pasted:20200227-222502.png}} Nous pouvons tester que nous identifions correctement la case. Avant d'aller plus loin, on va définir 2 nouveaux blocs : ''identifier ligne'' et ''identifier colonne'' afin de simplifier le script : {{:scratch:pasted:20200227-223505.png}} Dans le script du lutin, on créer également un bloc ''positionner le lutin'' de la façon suivante : {{:scratch:pasted:20200227-223811.png}} Ensuite, il faut ajouter 2 éléments ''Données -> ajouter ... à ...'' : {{:scratch:pasted:20200227-224226.png}} Si on teste, on observe que le numéro des cases jouées par chaque joueur est bien ajouté à la liste de chaque joueur. {{:scratch:pasted:20200227-224340.png}} ATTENTION ! Même quand on clique sur l'hexagone rouge, les listes ne sont pas vidées ! Nous allons donc modifier le script de la scène pour vider les listes lorsque l'on clique sur le drapeau vert. Pour vider une liste, le principe est le suivant : on supprime le premier élément de la liste plusieurs fois jusqu'à ce qu'il n'y ait plus d'élément dans la liste. On ajoute donc ce bout de script : {{:scratch:pasted:20200227-225535.png}} Chaque partie devra donc commencer par un clic sur le drapeau vert. On y est presque ! Il ne plus qu'à vérifier que la case dans laquelle on veut créer un lutin n'est présente dans aucune des listes des joueurs. On peut le dire de la manière suivante : si la liste ''cases_joueur_0'' ne contient pas la ''case'' et la liste ''cases_joueur_1'' ne contient pas la ''cases'', alors on créer le lutin. Ce qui donne : {{:scratch:pasted:20200227-230559.png}} C'est terminé ! ==== Ce qu'on pourrait faire de mieux ==== D'après la numérotation que l'on a choisie, on peut aussi dire : * si ''ligne = 1'', alors : * si ''colonne = 1'', alors ''case = 1'' * si ''colonne = 2'', alors ''case = 2'' * si ''colonne = 3'', alors ''case = 3'' * si ''ligne = 2'', alors : * si ''colonne = 1'', alors ''case = 4'' * si ''colonne = 2'', alors ''case = 5'' * si ''colonne = 3'', alors ''case = 6'' * si ''ligne = 3'', alors : * si ''colonne = 1'', alors ''case = 7'' * si ''colonne = 2'', alors ''case = 8'' * si ''colonne = 3'', alors ''case = 9'' On peut donc créer 3 éléments comme celui-ci : {{:scratch:pasted:20200227-215835.png}} [[scratch:morpion_step_06|Etape précédente]] [[scratch:morpion_step_08|Etape suivante]] scratch/morpion_step_07.txt Last modified: 2020/02/28 10:29by fab