Notions Windows :
Editeur. Notions opératoires :
Commandes : si ec mot donne chose Opération : lismot hasard vide?
Faire un programme pour jouer au jeu des allumettes.Objectif pédagogique :
Introduire les notions d'algorithne, de stratégie.
Faire un programme pour jouer au jeu des allumettes.
Initialisation:
La procédure allumettes <nombre d'allumettes> formera
le tas d'allumettes.
La mémoire :tot contient le nombre d'allumettes.
pour allumettes :n
donne "tot :n
end
1.- L'ordinateur joue au hasard.
Le jeu sera divisé en deux procédures:
- La procédure joueur qui s'occupe de saisir le coup du joueur et de mettre a jour la situation du jeu.
- La procédure ordi qui s'occupe de la réplique de l'ordinateur et de la mises à jour de la situaton de jeu.
A la fin de chaque procédure, on appelle la procédure adverse.Si après avoir joué, le total est zéro, il y a victoire et le jeu s'arrête.
Procédure joueur.
Pour saisir la réponse du joueur on utilise la primitive lismot qui ouvre un fenêtre de dialogue et retourne le contenu de la zone de saisie comme un mot.
Les procédures peuvent avoir des données facultatives, qui ont une valeur par défaut (au départ), on peut aussi considérer ces données comme des variables initialisées.
Pour définir une donnée facultative, il faut donner dans la ligne de titre une liste avec le nom de la variable suivi d'une expression donnant la valeur par défaut. exemple : pour joueur [:n lismot] (n recevra le résultat de lismot, ce que l'on aura écrit dans la fenêtre de saisie.)
pour joueur [:n lismot]Procédure ordinateur.
donne "tot :tot - :n
(ec [vous jouez] :n [il reste ] :tot)
si :tot = 0 [ec [Voua avez gagné] stop ]
ordi
end
Si :tot est inférieur à 4. l'ordinateur joue le nombre d'allumettes restantes (et gagne), sinon l'ordinateur joue au hasard un nombre de 1 à 3 .
pour ordi
sisinon :tot < 4 [donne "ordi :tot][donne "ordi 1 + hasard 3]
donne "tot :tot - :ordi
(ec [je joue ] :ordi [il reste ] :tot )
si :tot = 0 [ec [j'ai gagné] stop]
joueur
end
! Ouvrir l'éditeur avec le bouton programme et définir les procédures.
! Dans le commander:
allumettes 15
joueur (ou ordi si l'ordinateur doit commencer).On peut améliorer la procédure joueur en introduisant un contrôle sur la validité de la saisie.
Une entrée vide provoque l'arrêt de la partie avec le message abandon.
Un nombre supérieur à 3 ou inférieur à 1 ou une donnée autre qu'un nombre provoque une nouvelle saisie.
pour joueur [:n lismot]
si vide? :n [ec "Abandon stop]
si (ou :n > 3 :n < 1 non nombre? :n) [ joueur stop]
donne "tot :tot - :n
(ec [vous jouez] :n [il reste ] :tot)
si :n = 0 [ec [Vous avez gagné] stop ]
ordi
end
2.- L'ordinateur apprend.
A chaque nombre, on peut jouer 1, 2 ou 3.
Pour chaque nombre, on va mettre en mémoire une liste [1 2 3], si l'ordinateur perd, il enlève de la liste le nombre qui l'a fait perdre.
Si une liste devient vide, c'est que cette position est perdante, l'ordinateur jouera alors au hasard et avertira qu'il peut perdre.La procédure init met associe la liste des coups possible : [1 2 3] à chaque nombre de 1 à :max .
Les mémoires recevant la liste seront nommées c1 c2 c3 ...
Les noms c1, c2, c3 ... sont construits avec l'expression mot "c compteur .
Le rapporteur compteur donne le nombre de répétitions déjà effectuées y compris la répétion en cours.L'expression mot "c :tot + :ordi + :n donne le nom de la mémoire correspondant au dernier coup joué par l'ordinateur. (:tot est la position actuelle, :n les allumettes enlevées par le joueur, :ordi celles enlevées par l'ordinateur.
Ainsi :tot + :n + :ordi donne le nombre d'allumettes au tour précédent de l'ordinateur.
Et mot :tot + :n + :ordi donne le nom de la mémoire contenant la liste des coups possibles au tour précédent .pour init :max
repete :max [donne mot "c compteur [ 1 2 3 ] ]
end
La procédure perte enlève le dernier coup joué.pour perte [:coup mot "c :tot + :ordi + :n]
si vide? chose :coup [stop]
donne :coup sp chose :coup
end
La procédure ordi devient:pour ordi [:coups chose mot "c :tot]
sisinon vide? :coups ~
[ec [En jouant bien vous gagnerez] donne "ordi 1 + hasard 3]~
[donne "ordi premier :coups]
donne "tot :tot - :ordi (ec [je joue ] :ordi [il reste ] :tot )
si :tot = 0 [ec [j'ai gagné] stop]
joueur
end
Dans la procédure joueur il faut exécuter perte quand le joueur gagne.La procédure joueur devient.
pour joueur [:n lismot]Si l'on examine les mémoires après un grand nombre de parties, il y a des listes vides pour chaque multiple de 4.
si vide? :n [ec "Abandon stop]
si (ou :n > 3 :n < 1 non nombre? :n) [ joueur stop]
donne "tot :tot - :n (ec [vous jouez] :n [il reste ] :tot)
si :n = 0 [perte ec [Vous avez gagné] stop ]
ordi
end
Ce sont les positions perdantes. Conaissant la solution du problème, on peut programmer l'ordinateur pour appliquer cette règle.3.- L'ordinateur cherche à laisser le plus proche multiple de 4
pour ordi2
donne "ordi reste :tot 4
si :ordi = 0 [donne "ordi 1 + hasard 3]
si :tot < 4 [donne "ordi :tot]
donne "tot :tot - :ordi (ec [je joue ] :ordi [il reste ] :tot )
si :tot = 0 [ec [j'ai gagné] stop]
joueur2
end
! Copier joueur , renommer la copie joueur2 et changer la fin de joueur2 pour appeler ordi2 et supprimer l'appel à perte.
pour joueur2 [:n lismot]
si vide? :n [ec "Abandon stop]
si (ou :n > 3 :n < 1 non nombre? :n) [ joueur stop]
donne "tot :tot - :n
(ec [vous jouez] :n [il reste ] :tot)
si :n = 0 [ec [Vous avez gagné] stop ]
ordi2
end
Retour
au sommaire
Activité précédente : L'interface,
les boutons le terrain de jeu du morpion.
Activité suivante : Labyrinthe
1, le dessin.