Poster un nouveau sujet Poster une réponse
Un démineur !
Auteur Message
Mlakuss
Invité
Posté le : Lun 07 Mai 2012, 16:59   Citer 

Bonjour à tous, je me présente: Mlakuss. Je suis actuellement à quelques semaines (si ce n'est moins) de passer mon baccalauréat et mes années de lycée, m'ont permis de découvrir la programmation sur ces merveilleuses petites machines que sont les TI (et même plus).
Mon dernier programme en date (et certainement le plus abouti) est un démineur dont je suis assez fier.
Voici le code:

Code
2->dim(listeD
Normal
Flottant
PleinEcr
Réel
Lbl 0
If listeD(1
Goto QX
SauveBDG 0
1->listeD(1
EffEcr
{6,12->dim[A]
Menu("    DEMINEUR    ","JOUER",J,"Creer Img5",P,"QUITTER",QX
Lbl P
If non(listeD(2
2->listeD(2
0->listeD(1
Goto 0
Lbl J
Menu("    NIVEAU:    ","NIV.1",JF,"NIV.2",JM,"NIV.3",JD,"CUSTOM",0
Lbl JF
10->R
R->V
2->U
Goto JS
Lbl JM
15->R
5->V
3->U
Goto JS
Lbl JD
20->R
EffVar V
4-> U
Goto JS
Lbl O
[couleur=#00AA00]Output(1,1,":    PARTIE    :: PERSONALISEE :
Output(4,2,"Mines:
Repeat K=105
CodeTouche->K
partEnt(min(25,max,5,R-(K=24)+(K=26->R
Output(5,4+(R<=9),R
If R<=9
Output(5,4,0
End
Output(4,11,"Vies:
Repeat K=105
CodeTouche->K
partEnt(min(10,max(0,V-(K=24)+(K=26->V
Output5,13-(V>9),V
If V=! 10
Output(5,12,"
End
Output(7,4,"Vitesse:
Repeat K=105
CodeTouche->K
partEnt(min(4,(max(2,U-(K=24)+(K=26->U
Output(7,12,U-1[/couleur]
End
Lbl JS
EffEcr
Disp "CHARGEMENT..."
AxesNAff
EffDessin
FonctOff
11.75->Xmax
-Xmax->Xmin
7.75->Ymax
-Ymax->Ymin
R->M
V->L
7E3->T // Utiliser le E pour les puissances de 10
M->dim(ListeX
M->dim(ListeY
Repeat R=0
Lbl RM
entAléat(1,6->A
entAléat(1,12->B
If [A](A,B)=.1
Goto RM
.1->[A](A,B
A->ListeX(R
B->ListeY(R
R-1->R
Output(2,1+partEnt(6(1-R/M)),"*
End
M->R
Repeat R=0
ListeX(R->A
ListeY(R->B
For(X,A-(A=!1),A+(A=!6
For(Y,B-(B=!1),B+(B=!12
1+[A](X,Y->[A](X,Y
End
End
R-1->R
Output(2,7+partEnt(6(1-R/M)),"*
End
M->R
Disp "Lancement...
Repeat R=0
9->[A](listeX(R),listeY(R
R-1->R
End
EffVar listeX
Effvar listeY
EffEcr
M->R
If 1=listeD(2  // Ne pas utiliser If listeD(2 ici
Then
RappelImage 5
Else
[couleur=#0000FF]-9.75->X
Texte(3,28,"D  E  M  I  N  E  U  R
Ligne(-5,7.25,6.5,7.25
Repeat X=9.75
Ligne(X,5+2(X>-6 et X<7),X,-6.5
X+1,5->X
End
7.25->Y
Repeat Y=-8.75
Y-2->Y
Ligne(-9.5,Y,8,Y
End
.25->Y
Ligne(-45Y,7.5,-9,7.5
Ligne(-9,7.5,-9,25Y
Ligne(-9,25Y,-45Y,25Y
Ligne(-45Y,25Y,-45Y,7.5Y
Ligne(-43Y,7,-9.5,7
Ligne(-43Y,27Y,-9.5,27Y
Ligne(10,11Y,10,-2.5
Ligne(10,-3,10,-23Y
Ligne(42Y,11Y,42Y,-2.5
Ligne(42Y,-3,42Y,-23Y
Pt-On(41Y,-2.5
Pt-On(41Y,-5.75
Pt-On(41Y,-3
Pt-On(41Y,2.75
For(A,1,6
For(B,1,12
For(X,4+6B,6+6B
For(Y,4+8A,8+8A
Pxl-On(Y,X
End
End
End
End[/couleur]
If listeD(2
Then
SauveImage 5
1->listeD(2
End
End
Ligne(10.25,-5.75,10.25,-3.25-L/4
Ligne(10.25,-2.5,10.25,-2.5+(M-(M-20)(M>20))/4
-9.5->X
-5->Y
6->A
1->B
10->J
51->I
1->G
[couleur=#0055FF]Repeat non(M
T-U->T
Pxl-Off(3,4+partEnt(T/1E3  // E des puissances de 10
Pxl-Off(4,4+partEnt(T/1E3
If T<1
Goto X
codeTouche->K
If K
Then
If K>=24 et K<=34
Then
Pt-Off(X,Y
Pt-Off(X+1,Y
Pt-Off(X,Y-1.5
Pt-Off(X+1,Y-1.5
min(12,max(B-(K=24)+(K=26->B
min(6,max(1,A-(K=25)+(K=34->A
-11+1.5B->X
7-2A->Y
3+8A->I
4+6B->J
Pt-On(X,Y
Pt-On(X+1,Y
Pt-On(X,Y-1.5
Pt-On(X+1,Y-1.5
End
If K=105
Then
[A](A,B->C
If 9<=C et non(G
Goto X
If G et C=9
Then
95->K
Else
EffVar G
Texte(I,J,C
End
If non(C
Then
Texte(I,J,"   "  //3 espaces ici, les guillemets à la fin sont optionnels
For(D,A-(A!=1),A+(A!=6
For(E,B-(B!=1),B+(B!=12
If [A](D,E
Then
Texte(3+8D,4+6E,[A](D,E
Else
Texte(3+8D,4+6E,"   " // idem
End
End
End
End
End
Pt-On(X+1,Y
End
If K=45
Then
Disp
Pause
AffGraph
End
If K=95
Then
If 9=[A](A,B
Then
Texte(I,J,"°  //Ici, j'utilise le petit carré situé sous le symbole "supérieur ou égal" dans le catalogue. Vous pouvez utiliser " ! " à la place.
M-1->M
If M<20
Pxl-Off(40-M,88
9.1->[A](A,B
Else
Pt-On(10.25,-3-L/4
L-1->L
If L<0
Goto X
End
End
End[/couleur]
EffEcr
Disp "::: VICTOIRE :::
Goto X1
Lbl X
For(A,1,6
For(B,1,12
If 9=[A](A,B
Texte(3+8A,4+6B,"X
End
End
Pause
EffEcr
Disp ":::  PERDU  :::
Lbl X1
Disp "","Mines:    /","Vies: +","Rapidite: +","SCORE:" // Ici, j'utilise des petites lettres (situées dans var/stats/EQ), pour le i, j'utilise celui des complexes.
Output(3,8,R-M
Output(3,11,R
max(0,L->L
10-V+L->L
50*non(V)+160L/10->L
U60(T>3E3)/(1+(M=!0->T
Fixe 0
Output(4,8,L
Output(5,12,T
L+T+30(R-M)+50non(M->S
Output(6,8,S
For(I,1,partEnt(16S/1250
Output(8,I,"+
End
Pause
Lbl QX
AxxeAff
Flottant
RappelBDG 0
EffVar BDG0
0->listeD(1
EffVar [A]
EffEcr
Output(1,1,"



Comment jouer ?
Le déplacement s'effectue à l'aide des touches fléchées (pas de souci normalement). Pour découvrir une case, vous devez utiliser la touche "Enter".
Une fois que vous avez trouvé une mine, appuyez sur le bouton "+" au dessus de la touche "Enter".
Ce démineur présente une particularité, si vous pensez qu'il y a une mine et que vous faites "+" alors qu'il n'y en a pas, il ne se passera rien !
Mais c'est trop facile me direz vous... Eh bien non.
Plutôt que de gérer les "cases" découvertes et posséder une fonction de "vérification de la victoire", j'ai préféré instauré un système de vie.
A chaque fois que vous utilisez le bouton "+" dans le vide, vous perdez une vie.
Dans le cas contraire, la mine se désamorce et s'affiche.

Le compteur de mine est représenté par la jauge en haut à droite.
Dès que cette jauge est vide, c'est la fin de la partie.
Le compteur de vie est représenté par la jauge sous celle des mines.
Dès que cette jauge est pleine, c'est la fin de la partie.
Vous remarquerez une petite jauge en haut à gauche, c'est un compteur de temps.
Si cette jauge se vide, c'est aussi la fin de la partie.

Le bouton "Annul" permet de mettre le jeu en pause. Le bouton "Enter" permet un retour au jeu.

Caractéristiques:
Taille: 2330 environ + une matrice (656) et trois listes dont deux temporaires.
La grille fait 72 cases (6*12) et peut accueillir de 5 à 25 mines.
Trois niveaux prédéfinis sont accessible depuis le menu jouer mais l'onglet "CUSTOM" vous permet de créer une partie personnalisée.
Niv1: 10 mines, 10 vies, durée: long (vitesse:1 dans le menu "CUSTOM")
Niv2: 15 mines, 5 vies, durée: moyenne (vitesse:2 ---)
Niv3: 20 mines, 0 vies, durée: courte (vitesse:3 ---)

Si jamais vous tombez sur une mine lors de votre première tentative, le jeu va découvrir la mine plutôt que de vous forcer à recommencer une partie. Cette sécurité reste active jusqu'à ce que vous tombiez sur une case vide.

Note: si le en lançant le jeu, il se ferme tout seul sans erreur, c'est que vous avez quitté le programme avec "on", c'est normal, il vous suffit de le relancer immédiatement. Cela permet de conserver vos réglages du graphe.
Note 2: Dans mon programme, j'utilise pas mal de minuscule. Notamment pour les mots "Mines", "Vies", "Vitesse", "Rapidite" et "Creer"
Libre à vous de les mettre ou non. Si vous les cherchez elles sont dans [var] - Statistiques (5)

En cas de souci avec le code, de question ou de suggestion pour l'optimisation, je garderai un œil sur ce topic pendant quelques jours.

  Haut de page Bas de page 
 
Mlakuss
Invité
Posté le : Lun 07 Mai 2012, 19:15   Citer 

Petite erreur de ma part, j'ai voulu coloré trois parties du programme, mais ça ne fonctionne pas (et je n'avais pas vu que les balises restaient visible).
Ne copiez pas les [ couleur=#xxxxxx][ /couleur].

  Haut de page Bas de page 
 
mystery_enigma



Autorisation : Membre
Nb de messages : 16
Inscrit le : Sam 04 Fév 2012, 23:16
Posté le : Mar 08 Mai 2012, 1:19   Citer 

Je n'ai pas encore essayé ton programme (la longueur du code m'en a dissuadé laugh.gif) mais je l'ai analysé et je pense qu'il serait possible d'y apporter quelques optimisations:

-Tout d'abord, il faut savoir que l'on peut faire suivre sur la même ligne une instruction précédée de la commande "EffVar", exemple :
Code
EffVar V
4-> U

peut devenir

Code
EffVar V4-> U



- Des petites erreurs d'étourderies, je pense godgrace.gif , liées aux guillemets de fin d'instructions qui pourraient être supprimées, comme là :

Code
Disp "CHARGEMENT..."



- Les multiplications sont généralement préférables aux divisions car elles sont plus rapides à l’exécution et moins lourdes comme ici :

Code
Ligne(10.25,-2.5,10.25,-2.5+(M-(M-20)(M>20))/4

que l'on peut remplacer par :
Code
Ligne(10.25,-2.5,10.25,-2.5+M-.25(M-20)(M>20 // avec une parenthèse de début en moins (celle juste devant le "+")

Ou encore là :
Code
Pxl-Off(3,4+partEnt(T/1E3     //TE-3



- Deux autres petits oublies à cet endroit et un peu plus haut pour des tests de nullités sur une variable:
Code
Disp "Lancement...
Repeat R=0    // Repeat non(R
9->[A](listeX(R),listeY(R



Je reste tout de même bouche-bée vis à vis du courage et de la ténacité dont tu as dû faire preuve pour coder cette "bible"! Il serait aussi intéressant que tu publies ton programme sur TI-BANK afin que l'on puisse le télécharger sans avoir à le recopier entièrement godgrace.gif

 Adresse email Haut de page Bas de page 
 
Mlakuss
Invité
Posté le : Mar 08 Mai 2012, 9:42   Citer 

Eh bien merci pour ces petits conseils.
Je le mettrais volontiers en téléchargement direct, mais je vais essayer de récupérer un câble afin de ne pas reretaper le code (à moins que je puisse faire un copier/coller dans un émulateur puis corriger ensuite ?)

  Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 08 Mai 2012, 11:19   Citer 

Tu peux effectivement faire un copier-coller vers un éditeur de programme (tu as TI-Programm Editor et TI-Graph Link téléchargeables chez TI, http://www.cemetech.net/projects/basicelite/sourcecoder2.php et http://tiforge.info/ti_editor/), mais dans tous les cas, tu devra faire un bon nombre de modifications manuelles, d'autant plus que ces éditeurs sont faits pour des instrucions en anglais (sauf TI Graph Link TI83+.fr)

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 08 Mai 2012, 11:36   Citer 

Les nombreuses optimisations minimes sont la spécialité de sandro.

====
convertion en programme :

Soit on se prend la tête avec de multiples logiciels, soit on seprend la tête avec un traîtement de texte.

ti-graph-link_83plus_fr est probablement l'éditeur qui demande le moins de modifications du code français.
Mais si tigl_83plus_fr permet de convertir un code français en *.8xp, il ne permet pas de convertir en *.83p pour les ti82stat(fr)/ti83.
Hélas tigl_83plus_fr est le seul éditeur que je connaisse qui utilise un code écrit en français.

Si on veut éviter les nombreuses modifs mais tout-de-même obtenir un 83p, il faut utiliser plusieurs éditeurs :
-coller le code français dans tigl_83plus_fr et sauver en 8xp.
-ouvrir le 8xp avec un éditeur de 83plus anglais (comme ti-graph-link_83plus_english par exemple)
Vous pouvez alors copier le code anglais. Pour convertir en 83p, poursuivre ainsi :
-coller le texte dans un éditeur 83/82stat dont les caractères sont compatibles avec l'éditeur 83plus anglais précédent.

Par exemple tigl_83 et tigl_83plus_english utilisent des caractères compatibles.
Je préfère Ti-Program-Editor pour ces deux étapes, car il connaît aussi bien 83p que 8xp.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Mlakuss
Invité
Posté le : Mar 08 Mai 2012, 16:42   Citer 

Finalement, j'ai opté pour une modification de masse au "Rechercher et remplacer".
Voici le fichier obtenu mais j'ai peur qu'il ne fonctionne pas.
Télécharger le fichier [DropBox/.82p]
Si c'est le cas, c'est que les minuscules ne fonctionnent pas mais, au moins, j'ai un "truc" exploitable.
(J'ai utilisé http://tiforge.info/ti_editor/ pour vérifier que c'était "ok").

  Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mer 09 Mai 2012, 10:19   Citer 

J'ai recopié ton programme...

Il me mets plusieurs erreurs, tout de même...
1) L'erreur "TYPE DONNEE" quand je presse une flèche, à la ligne

Code
min(12,max(B-(K=24)+(K=26->B



2) L'option CUSTOM qui fait quitter le programme...

Effectivement, ton 82p est très très buggé.

J'ai corrigé de nombreuses erreurs, mais hélas mon émulateur bugue je n'arrive pas à récupérer le fichier...

Si quelqu'un a un Wabbitemu qui beugue pas, le Démineur débuggé est cette sauvegarde: http://tiemulation.kegtux.org/files/perso/demineur.sav

Ceci dit, j'ai toujours les deux erreurs dites ci dessus malgré mes corrections syntaxiques...



 Adresse email Haut de page Bas de page 
 
Mlakuss
Invité
Posté le : Mer 09 Mai 2012, 13:10   Citer 

Pour le 1, c'est:

Code
:min(12,max(1,B-(K=24)+(K=26->B


L'autre, je vois pas.
J'ai demandé à un ami de me prêter un câble, s'il n'est pas trop étourdi, je poste le fichier correct ce week-end.

  Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mer 09 Mai 2012, 14:16   Citer 

Exact, le 1 ça va mieux. glasses.gif

 Adresse email Haut de page Bas de page 
 
Mlakuss
Invité
Posté le : Jeu 10 Mai 2012, 22:26   Citer 

Pour la seconde erreur, il est possible que tu ais confondu un 0 et un O (dans le menu je pense:

Code
Menu("NIVEAU:","NIV.1",JF,"NIV.2",JM,"NIV.3",JD,"CUSTOM",O

)

  Haut de page Bas de page 
 
Mlakuss
Invité
Posté le : Ven 11 Mai 2012, 7:03   Citer 

Et je n'ai rien dit, c'est moi qui ai fait l'erreur. Enfin, le correctif est bien celui indiqué ci-dessus.

  Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Ven 11 Mai 2012, 9:49   Citer 

O_o exact, la seconde erreur happy.gif

 Adresse email Haut de page Bas de page 
 
Mlakuss
Invité
Posté le : Lun 14 Mai 2012, 18:59   Citer 

Bon, impossible de récupérer un câble apparemment, faudra vous limiter au code posté et aux deux erreurs de copie.
Et je n'arrive pas non plus à lire le fichier .sav donné avec wabbitemu (il plante à chaque fois).

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 14 Mai 2012, 19:07   Citer 

Essaie ces deux chose :
-fermer wabbitemeu avec "close" puis le redémarrer normalement et voir si le sav est chargé (cela règlais mon propre problème sur une ancienne version)
-placer wabbitemu en simulation de ti83 avant le chargement du sav.

J'ai décelé d'autres erreur en testant le fichier sav_wabbitemu de persalteas.

D'autre part, et j'ignore si c'est un bug :
Les commandes "entrer" et "+" doivent être ratées car la touche entrer écrit quelques carrés de temps en temps, parfois elle dévoile des cases vierges, et la touche + ne déclenche rien.

Je ne peux pas extraire de fichier de la ti83 émulée, wabbitemu semble défectueux avec les calculatrices non-flash.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink