Le programme que j'ai présenté au TI-Concours 2013, au tour 1
I. Spécifications:
- Taille: 3840 octets, 3934 octets en fin de partie.
Nécessite donc 4000 octets de mémoire RAM libre.
Envoyez MIND83.83p et Pic9.83i à votre calculatrice.
- Règles du jeu:
Mastermind est un jeu de code à deviner.
Selon le mode choisi dans les options, un joueur entre un code secret, ou la calculatrice en choisit un tout seul.
Puis l'autre joueur entre des essais de code.
Enfin, la calculatrice répond avec des carrés et des croix:
- Un carré signifie que le chiffre entré est présent dans le code est correctement placé
- Une croix signifie que le chiffre entré est présent dans le code, mais à la mauvaise place
- Un point signifie que le chiffre entré n'est pas présent dans le code.
- Contrôles:
- Dans les menus: flèches du haut et du bas pour changer d'option sélectionnée
- Menu Options: flèches droite et gauche pour modifier les valeurs, [clear] ou [annul] ou [enter] pour quitter
- Dans le jeu:
Code:
I. Spécifications:
- Taille: 3840 octets, 3934 octets en fin de partie.
Nécessite donc 4000 octets de mémoire RAM libre.
Envoyez MIND83.83p et Pic9.83i à votre calculatrice.
- Règles du jeu:
Mastermind est un jeu de code à deviner.
Selon le mode choisi dans les options, un joueur entre un code secret, ou la calculatrice en choisit un tout seul.
Puis l'autre joueur entre des essais de code.
Enfin, la calculatrice répond avec des carrés et des croix:
- Un carré signifie que le chiffre entré est présent dans le code est correctement placé
- Une croix signifie que le chiffre entré est présent dans le code, mais à la mauvaise place
- Un point signifie que le chiffre entré n'est pas présent dans le code.
/!\ par abus de langage étant donné l'édition réelle du jeu
mastermind, les chiffres peuvent être appelés "couleurs".
Selon le mode d'affichage des réponses, vous aurez une suite de points/carrés/croix permettant donc de déterminer lesquels de vos chiffres sont présents dans le code et où ils sont placés, ou alors simplement le nombre de carrés et de croix (plus difficile), qui ne permet pas de déterminer facilement lesquels des chiffres entrés sont concernés.- Contrôles:
- Dans les menus: flèches du haut et du bas pour changer d'option sélectionnée
- Menu Options: flèches droite et gauche pour modifier les valeurs, [clear] ou [annul] ou [enter] pour quitter
- Dans le jeu:
- flèches haut et bas pour augmenter/diminuer la valeur du chiffre
- Touches du pavé numérique pour entrer directement le chiffre
- flèches gauche et droite pour changer de chiffre à modifier
- [enter] pour valider le coup
- [2nd] et [alpha] pour revoir les anciens coups après 6 coups (hauteur de l'écran insuffisante alors
scrolling)
- [1] pour retourner au menu principal
- [2] ou [clear] ou [annul] pour quitter le jeu
II. Téléchargement:
- Sur TI-Planet (version 83+/84+ incluse) : http://tiplanet.org/forum/archives_voir.php?id=12483
- Sur Mega (82 Stats(.fr)/83 seulement) : https://mega.co.nz/#!jBFSzb4R!T_OaRy0F1yit3SkLHWexqxnB-G4VmFHa7Hy9llEr5RA
Code:
- Code:
PleinEcr:FonctOff :AxesNAff
0->Xmin:0->Ymin
1->PasX:1->PasY
EffVar L9->dim(|LMS
If non(|LMS(4:{4,0,0,1,99,99,99,99,0->|LMS
Lbl M
EffDessin
1->C
RappelImage 9
{0,36,39,44,39,50,57->L1
Repeat max(K={45,105
codeTouche->K
Text(L1(2C),L1(2C+1),"[
If K:Text(L1(2C),L1(2C+1),"
C-(K=25)+(K=34->C
If non(C:3->C
If C=4:1->C
End
If C=3 ou K=45:Goto Q
If C=2:Then
|LMS->L1
Horizontale 0
For(A,1,39
Ligne(0,A,94,A,0
Pt-On(0,A
Pt-On(94,A
End
Horizontale 40
Text(26,6,"-A[n][s]|w[e][r][s] :
Text(33,6,"-D[i][|F][|F][i][|c]|u1[t][yhat] :
Text(40,6,"-N[|b][r] [p]1[|a][yhat][e][r][s]:
Text(47,6,"-S[e]|v[e][r][|a]1 [s][|a]M[e]
Text(54,10,"[|c]O1O[r][s] :
1->C
{26,33,40,54->L2
Repeat K=45 ou K=105
L2(C->A
codeTouche->K
Text(26,56,sous-chaîne("P1[|a][|c][e][|d]D[i]G[i][t][s]",6L1(9)+1,6
Text(33,56,sous-chaîne(" E[|a][s][yhat] NO[r]M[|a]1 M[e][|d][i]|uM H[|a][r][|d] ",8L1(1)-16,8
Text(40,56,1+L1(2
Text(54,56,sous-chaîne("D[i][s][|a][|b]1[e][|d]E[n][|a][|b]1[e][|d] ",8L1(3)+1,8
Text(A,51,"<
Text(A,90,">
If K:Then
Text(A,51,"
Text(A,90,"
C+(K=34)-(K=25->C
If non(C:4->C
If C=5:1->C
If C=2:Then
L1(1)+(K=26)-(K=24->L1(1
If 3>L1(1:6->L1(1
If 6<L1(1:3->L1(1
End
If max(K={24,26:Then
If C=1:non(L1(9->L1(9
If C=3:non(L1(2->L1(2
If C=4:non(L1(3->L1(3
If max(C={2,1,4
Text(26+7(C=2)+28(C=4),56,"
End
End
End
2->C
L1->|LMS
End
If C=2:Goto M
|LMS(1->N
N+3->P
If |LMS(2
Then
Horiz
RappelImage 9
Ligne(10,7,84,6
For(A,8,55
Ligne(11,A,83,A,0
Pt-On(10,A
Pt-On(84,A
End
Ligne(10,56,84,56
Text(6,18,"ENTER ",N," DIGITS
Text(14,18,"BETWEEN 1 AND ",P
Lbl A
EffVar BEffVar L2
Input ">",Chaîne1
If N!=longueur(Chaîne1:1->B
N->dim(L2
If non(B:Then
For(A,1,N
expr(sous-chaîne(Chaîne1,A,1->L2(A
If Rép>P:1->B
If 3=somme(suite(L2(A)=L2(K),K,1,N))+non(|LMS(3:2->B
End
End
If B:Disp "ERROR
If B=2:Disp "SAME [|d][i]G[i][t][s]!
If B:Goto A
PleinEcr
Else
If |LMS(3:Then
entAléat(1,P,N->L2
Else
Repeat min(DeltaListe(L2
entAléat(1,P,N->L1
L1->L2
TriCroi(L2
End
L1->L2
End:End
1+12N->N
{N-1,61,1,61,0,60,0,1,1,0,N,0,N,1,N,60,N+1,1,N+1,59,77,53,94,53,76,46,94,46,76,60,76,0,76,0,94,0,94,0,94,60,94,60,76,60
EffDessin
For(A,1,44,4
Ligne(Rép(A),Rép(A+1),Rép(A+2),Rép(A+3
End
{59,54,52,47
For(A,1,4
Pt-On(77,Rép(A
Pt-On(93,Rép(A
End
{1,1,1,60,N-1,1,N-1,60
For(A,1,8,2
Pt-On(Rép(A),Rép(A+1
End
Ligne(3,16,N-3,16
Ligne(3,59,N-3,59
(N-1)/12->N
For(A,7,7N,7
{A-5,4,A,4,A,11,A-5,11,A-5,4
For(B,1,7,2
Ligne(Rép(B),Rép(B+1),Rép(B+2),Rép(B+3
End
End
Text(47,78,"BEST
Text(54,78,"= ",|LMS(2+|LMS(1
{1,N->dim([J]
[J]->[H]
Remplir(1,L1
EffVar VEffVar C1->B
{0->L4
Lbl I
L1(V+1->R:C+1->C
2+dim(L4->dim(L4
For(A,0,N-1
Text(52,7A+3,L1(A+1
End
Repeat max(K={105,45
Text(52,7V+3,R
codeTouche->K
R+(K=25)-(K=34->R
If max(K={92,93,94,82,83,84,72,73,74:Then
2-(K=92)+(K=94)+2(K=82)+3(K=83)+4(K=84)+5(K=72)+6(K=73)+7(K=74
If Rép<=P:Rép->R
End
If non(R:P->R
If R>P:1->R
If B OuExcl max(K={24,26
Then
7V
Pt-Change(Rép+4,2
Pt-Change(Rép+5,1
Pt-Change(Rép+6,2
Pt-Change(Rép+4,13
Pt-Change(Rép+5,14
Pt-Change(Rép+6,13
End
EffVar BEffVar YIf max(K={24,26,105:Then
R->L1(V+1
V+(K=26)-(K=24->V
If V=N:0->V
If V<0:N-1->V
L1(V+1->R
1-(K=105->B
End
If 6<Cmax(K={21,31:Then
L-(K=21 et L)+(K=31 et L<C-7->L
Lbl B
For(A,1,6
For(K,1,N
Text(7A-3,7K-4,[J](A+L,K
End
If |LMS(9:Then
Y=9
dim(L4)-1-2(A+L)+3Rép+non(Rép
Text(7A-3,7N+5(N>3),"plotsquare",L4(Rép-1),"plotcross",L4(Rép
Else
7N+4
For(K,1,N
Rép+3
Pt-Off(Rép,63-7A,2
Pt-Off(Rép,63-7A
Pt-On(Rép,63-7A,[H](A+L,K
End
End
End
If Y=9:Goto C
End
End
If K=45:Goto M
EffVar LN->dim(L1
Liste>matr(L1,[I]
chaîne([I],[J]^^T)^^T->[J]
Text(3,82,C
Text(10,82,15-C,"
N->dim(L3
For(A,1,N
1->K
If L1(A)=L2(A
Then
2->K
Else
If max(suite(L2(B)=L1(A),B,1,N
3->K
End
K->L3(A
End
Liste>matr(L3,[G]
chaîne([G],[H]^^T)^^T->[H]
For(A,1,N
If 2=L3(A:1+L4(2C->L4(2C
If 3=L3(A:1+L4(2C+1->L4(2C+1
End
If C<7:Then
For(A,0,N-1
Text(46-7C,7A+3,L1(A+1
End
If |LMS(9
Then
Text(46-7C,7N+5(N>3),"plotsquare",L4(2C),"plotcross",L4(2C+1
Else
For(A,1,N
Pt-On(7N+3A+4,14+7C,L3(A
End
End
Else
9->Y
Goto B
Lbl C
End
EffVar BIf N=somme(L2=L1 ou C=15:Then
Horizontale 10
For(A,11,51
Ligne(0,A,94,A,0
End
Horizontale 52
If C=15:Then
Text(12,10,"THE CODE WAS :
Text(37,30,"YOU LOSE !
Else
Text(12,10,"CODE BROKEN ! :
If |LMS(2+|LMS(1))>C
C->|LMS(2+|LMS(1
End
For(A,1,N
Text(12,60+5A,L2(A
End
Text(21,25,"- T[r][i][e][s] : ",C
Text(28,25,"- B[e][s][t] : ",|LMS(2+|LMS(1
Text(45,10,"1: R[e][p]1[|a][yhat]
Text(45,60,"2: Q|u[i][t]
Repeat max(B={92,93,45
codeTouche->B
End
End
If non(B:Goto I
If B=92:Goto M
Lbl Q
ZStandard:AxesAff
EffVar [J]EffVar [I]EffVar [H]EffVar [G]EffVar L1EffVar L2EffVar L4EffVar L3EffVar Chaîne1EffVar AEffVar BEffVar CEffVar KEffVar NEffVar PEffVar REffVar LEffVar YEffVar VOutput(1,1,"