Programmation TI-82: rendre intelligent

Fermé
Tofu-goutte Messages postés 17 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 13 juillet 2011 - Modifié par Tofu-goutte le 9/07/2011 à 17:39
Tofu-goutte Messages postés 17 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 13 juillet 2011 - 10 juil. 2011 à 17:23
Bonjour à tous !!

J'ai une calculatrice TI-82 Stats.fr et j'ai créé un jeu d'allumettes (que j'ai trouvé sur Internet). Le but du jeu est de prendre entre 1 et 6 allumettes (26 allumettes au total) sans prendre la dernière.
Le programme à la fin de ce message.

J'aimerais arranger ce jeu ainsi:
-Avoir au total 15 allumettes (et non 26) et pouvoir enlever 1 à 3 allumettes (et non de 1 à 6).
Vous remarquerez que d'après le programme:
:entAléat(1,6)?E
:Outpout(1,1,"L'ordinateur en:")
:Outpout(2,10,E)
l'ordinateur enlève aléatoirement les allumettes. Il est donc quasiment impossible de perdre contre lui.

-J'aimerais le rendre "intelligent": il doit enlever la 2, 6, 10 et 14ème allumettes. Exemple: si le joueur prend 4 allumettes, il devra en prendre 2 (4+2=6).

Malheureusement je ne sais pas comment faire pour faire ces deux modifications. Pourriez-vous m'aider ?? Merci ;)

Voici le programme:
_____________________________________________________________________
:EffEcr
:EffDessin
:Texte(20,17, "Jeu des allumettes"
:Texte(26,35,"by Lancelot")
:Pause
:EffDessin
:EffEcr
:Lbl 02
:Menu("Menu principale","jouer",04,"regles",03,"quitter",09)
:Lbl 03
:EffDessin
:Texte(0,0,"Regles du jeu:")
:Texte(6,0,"Enlevez entre 1 et 6")
:Texte(12,0,"allumettes sans prendre")
:Texte(18,0,"la dernière.")
:Pause
:Goto 02
:Lbl 04
:Menu("Nombre de joueurs","un",41,"deux",42)
:Lbl 41
:1->J
:Goto 05
:Lbl 42
:2->J
:Lbl 05
:entAléat(0,1)->T
:36->A
:{2,12,12}?L1
:Repeat A<1
:For(I,1,3)
:For(K,1,L?(I))
:Outpout(2I+2,K+2,"I")
:End
:End
:If J=1 et T=1
:Then
:entAléat(1,6)?E
:Outpout(1,1,"L'ordinateur en:")
:Outpout(2,10,E)
:Pause
:Else
:Repeat E<7 et E>0
:Outpout(2,8,"Joueurs")
:Outpout(2,16,T+1)
:Inpout"Nombre à enlever",E
:End
:End
:EffEcr
:non(T)->T
:L1(1)-E>L1(1)
:If L1(2)<0
:Then
:L1(2)+L1(1)?L?(2)
:0->L1(1)
:If L?(2)<0
:Then
:L1(3)+L1(2)->L1(3)
:0->L1(2)
:End
:End
:L1(1)+L1(2)+L1(3)->A
:End
:Outpout(3,4,"Vainqueur:")
:If J=1 et T=1
:Then
:Outpout(4,4,"Ordinateur")
:Else
:Outpout(4,5,"Joueur")
:Outpout(4,12,T+1)
:End
:Pause
:EffEcr
:Menu("Recommencer ?","Oui",05,"Non",02,"Quitter",09)
:Lbl 09
:EffEcr
:EffDessin
_______________________________________________________________

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 9/07/2011 à 15:27
Tu dois calculer le nombre d'allumettes restantes modulo 4
Si le résultat est 2, 3 ou 0, il faudra enlever respectivement 1, 2 ou 3 allumettes.
Si le résultat est 1, c'est que l'autre joueur est en train de gagner donc peu importe combien tu en enlèves, le joueur peut toujours gagner et dès qu'il se plantera la calculatrice reprendra la main jusqu'à gagner...

Remarque : si la calculatrice commence toujours, le joueur n'a aucune chance de gagner.
Il faut donc laisser le joueur commencer, et éventuellement faire varier le nombre d'allumettes au départ, sauf n=4k+1 car l'ordinateur gagnerait quand même !

PS. Je connais pas le code TI mais avec mes explications ça devrait aller ;-)
La confiance n'exclut pas le contrôle
0
Tofu-goutte Messages postés 17 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 13 juillet 2011
9 juil. 2011 à 17:42
Merci de ta réponse, mais je n'ai pas tout compris...

J'ai rajouté une petite modification: il faut enlever seulement entre 1 et 3 allumettes (et non entre 1 et 6).
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 juil. 2011 à 18:37
Je suis bien d'accord ^^
Ce que je voulais dire c'est que quand il reste N allumettes, la calculatrice doit faire un calcul simple de congruence : (N-1) modulo 4, dont le résultat vaut 0, 1, 2 ou 3 et correspond au nombre d'allumettes qu'il faut enlever. Remarque si c'est 0, tu dois te forcer à jouer quand même ;-)
0
Tofu-goutte Messages postés 17 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 13 juillet 2011
9 juil. 2011 à 18:59
Que veux dire "modulo" ?? Désolé si je ne comprend rien, mais je suis seulement en seconde et nous n'avons pas accord appris ça. Et c'est essentiel de comprendre pour mon programme.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 juil. 2011 à 19:11
C'est juste le terme que tu ne connais pas, mais tu dois connaitre ça depuis le CE2 ^^
Quand tu fais la division de A par B, tu as le quotient Q et le reste R.
A modulo B, c'est le reste R de la division de A par B.

Si tu as N=15 allumettes, (N-1) modulo 4, c'est le reste de la division de 14 par 4.
14 divisé par 4 donne 3 il reste 2 (on a donc 14 modulo 4 qui est égal à 2) tu dois enlever 2 allumettes.

Après quelques recherches tu peux calculer A modulo B avec fpart ([MATH]+[NUM]+4 à vérifier)
:fPart(A/B)*B

Dans ton programme, tu devras donc enlever :fPart((N-1)/4)*4 allumettes...
0
Tofu-goutte Messages postés 17 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 13 juillet 2011
10 juil. 2011 à 17:23
Merci de tes éclaircissements ;-)
J'ai tenté de modifier mon programme hier soir, et malgré toute une soirée d'essais, je n'ai pas réussis...
Merci, pour ceux qui connaissent le languague de la TI-82 Stats.fr, de m'aider.

A bientôt à tous.
0