-Coco- le 07/12/2011 à 12:48
Bonjour à tous chers membres (et invités !) de Tout 82 !
Cela doit faire un petit bout de temps que vous ne m'avez pas vu (et je ne pense pas que cela vous dérangeait), mais me voilà de retour avec un Démineur !
Il se nomme DEMINE2 (tout simplement parce que c'est le second que je fais, mais vous n'avez jamais connu le premier : nommez le comme vous voulez après tout)
Propriétés/fonctionnalités :
-Poids : 1328 octets
-Lorsque la case découverte est vide, cela découvre également les 8 cases autour (bien), et cela marche également si on appuie sur une case vide déjà découverte.
-Il est en mode graphique
-Possibilité de quitter instantanément à tout moment, et de reprendre après en appuyant sur la touche [annul] puis en sélectionnant REPRENDRE dans le menu principal
-Propre = une fois terminé, ne laisse pas de matrice traîner
-Possibilité de choisir ou non la taille de la grille
-On peut mettre de jolis petits drapeaux
-La case par défaut sur laquelle se trouve le curseur est toujours vide
-Détection de victoire quand toutes les cases (sauf les mines) ont été découvertes
-rapide et optimisé (Et oui les If, Then et Else sont plus rapides que les Lbl !)
Touches :
-[2nde] : découvrir une case
-[alpha] : poser un petit drapeau / enlever un petit drapeau déjà posé
-flèches : déplacer le curseur
-[annul] : Quitter la partie à tout moment
Screenshots :
Image manquante
Réflexion...
Image manquante
I won !
Le programme !
Allez, pour ceux qui ont le câble pu qui veulent tester sur émulateur, je vous épargne du boulot !
http://www.mediafire.com/?c15e46o441v4def (télécharger en format .83p)
Et pour les autres, voilà le code :
(avant de commencer à taper comme un bourrin, voir les notes en dessous)
Code
:12[sto>]W
:7[sto>]H
:FnOff
:AxesOff
:0[sto>]Xmin
:94[sto>]Xmax
:(-)62[sto>]Ymin
:0[sto>]Ymax
:ClrHome
:Menu(" DEMINEUR 2 ","NOUVEAU",N,"REPRENDRE",R,"QUIT",Q
:Lbl Q
:ClrHome
:Stop
:Lbl N
:Menu(">TAILLE<","STANDARD",TS,"PERSONNALISEE",TP
:Lbl TP
:Disp "LA TAILLE EST","LIMITEE","AUTOMATIQUEMENT
:Input "LARGEUR:",W
:Input "HAUTEUR:",H
:min(H,7[sto>]H
:min(W,15[sto>]W
:Lbl TS
:ClrDraw
:Input "MINES:",M
:ClrHome
:iPart(W/2[sto>]Z
:iPart(H/2[sto>]¤
:DelVar [A]
:{H,W[sto>]dim([A]
:W*H-M[sto>]O
:For(A,1,M
:Output(4,8,A
:Lbl 00
:randInt(1,W[sto>]U
:randInt(1,H[sto>]V
:If 9=[A](V,U
:Goto 00
:If U[supérieur ou égal]Z-1 and U[inférieur ou égal]Z+1 and V[supérieur ou égal]¤-1 and V[inférieur ou égal]¤+1
:Goto 00
:9[sto>][A](V,U
:For(B,max(1,V-1),min(H,V+1
:For(C,max(1,U-1),min(W,U+1
:If 9[pas égal][A](B,C
:1+[A](B,C[sto>][A](B,C
:End
:End
:End
:For(A,0,W
:Line(A*6,0,A*6,(-)H*8
:End
:For(B,0,H
:Line(0,(-)B*8,W*6,(-)B*8
:End
:For(A,1,W
:For(B,1,H
:Text(B*8-7,A*6-4,"O
:0.1+[A](B,A[sto>][A](B,A
:End
:End
:Lbl R
:1[sto>]P
:While P
:Line(Z*6-5,(-)¤*8+7,Z*6-1,(-)¤*8+7
:Line(Z*6-5,(-)¤*8+7,Z*6-5,(-)¤*8+1
:0[sto>]T
:Repeat T
:getKey[sto>]T
:End
:Line(Z*6-5,(-)¤*8+7,Z*6-1,(-)¤*8+7,0
:Line(Z*6-5,(-)¤*8+7,Z*6-5,(-)¤*8+1,0
:Z+(T=26)-(T=24[sto>]Z
:¤+(T=34)-(T=25[sto>]¤
:Z-(Z=W+1)+(Z=0[sto>]Z
:¤-(¤=H+1)+(¤=0[sto>]¤
:If T=45
:Goto Q
:If T=31
:Then
:fPart([A](¤,Z[sto>]A
:If .1=A
:Then
:.1+[A](¤,Z[sto>][A](¤,Z
:Text(¤*8-7,Z*6-4,"P
:End
:If .2=A
:Then
:[A](¤,Z)-.1[sto>][A](¤,Z
:Text(¤*8-7,Z*6-4,"O
:End
:End
:If T=21
:Then
:If 0=[A](¤,Z
:Goto 01
:If 9.1=[A](¤,Z
:0[sto>]P
:If .1=fPart([A](¤,Z
:Then
:O-1[sto>]O
:[A](¤,Z)-0.1[sto>][A](¤,Z
:If 0[pas égal][A](¤,Z
:Then
:Text(¤*8-7,Z*6-4,[A](¤,Z
:Else
:Text(¤*8-7,Z*6-4," //3 espaces
:Lbl 01
:For(A,max(Z-1,1),min(Z+1,W
:For(B,max(¤-1,1),min(¤+1,H
:If .1=fPart([A](B,A
:Then
:[A](B,A)-.1[sto>][A](B,A
:O-1[sto>]O
:If 0=[A](B,A
:Then
:Text(B*8-7,A*6-4," //3 espaces
:Else
:Text(B*8-7,A*6-4,[A](B,A
:End
:End
:End
:End
:End
:End
:End
:If O=0
:0[sto>]P
:End
:If 9=[A](¤,Z
:Then
:Text(¤*8-7,Z*6-4,"X
:Text(57,35,"PERDU!
:Else
:Text(57,35,"GAGNE!
:End
:For(A,1,W
:For(B,1,H
:If fPart([A](B,A
:Then
:If 0[pas égal]iPart([A](B,A
:Then
:Text(B*8-7,A*6-4,iPart([A](B,A
:If 9<[A](B,A
:Text(B*8-7,A*6-4,"X
:Else
:Text(B*8-7,A*6-4," //3 espaces
:End
:End
:End
:End
:DelVar [A]
Notes avant de taper le code :
Voici quelques explications sur la notation du code :
-[sto>] : la flèche sto (en dessus du bouton ON)
-[inférieur ou égal], [supérieur ou égal], [pas égal], >, <, = : Se trouvent dans tests : [2dne]+[math]
-Toutes les fonctions de dessin, comme Ligne (Line), Texte (Text), EffDessin (ClrDraw) ect se trouvent dans le menu dessin : [2nde]+[prgm]
-Les fonctions min() et max() se trouvent dans le menu NUM (touche [math]+[flèche droite])
-"[A]" : Il s'agit bien de la matrice [A] (touche [matrice]), n'allez pas me mettre un crochet, un A et un autre crochet !
-Xmin,Xmax et tout ça sont des variables que l'on trouve en faisant [var]+[entrer]
-AxesNAff (AxesOff pour les francophones) se trouve avec [2nde]+[zoom] (format)
-FonctOff -> [var]+[fleche droite]+[4]+[2]
OMGZ ! Cette fonction n'existe pas sur ma calculatrice !
Pas de panique ! Si vous possédez une Ti-82 stats fr, toutes les fonctions ont été traduites en Français. Si vous êtes mauvais en anglais, vous pouvez aller voir la table de traduction ici présente sur ce forum :
TRADUCTIONS ET EMPLACEMENTS
J'arrive pas à trouver la touche pour cette fonction !
Pas de problème ! Allez dans le Catalogue (touche catalog : [2nde]+[0]), puis tapez la première lettre de la fonction (par exemple, un "E" pour "EffDessin") : le catalogue vous donnera toutes les fonctions de la calculatrice commençant par un "E" (par exemple) : vous n'aurez plus qu'à chercher la bonne et appuyer sur Entrée.
Des questions, des suggestions, des commentaires, des critiques (j'accepte tout!) : une seule chose à faire : Cliquer sur Répondre!
sandro le 07/12/2011 à 17:42
ça a l'air pas mal, mais on peut encore grater quelques octés si on vet:
Code
:12[sto>]W
:7[sto>]H
:FnOff
:AxesOff
:0[sto>]Xmin
:94[sto>]Xmax
:(-)62[sto>]Ymin
:0[sto>]Ymax
:ClrHome
:Menu(" DEMINEUR 2","NOUVEAU",N,"REPRENDRE",R,"QUIT",Q //ici: les 3 espaces après 2
:Lbl Q
:ClrHome
:Stop
:Lbl N
:Menu(">TAILLE<","STANDARD",TS,"PERSONNALISEE",TP
:Lbl TP
:Disp "LA TAILLE EST","LIMITEE","AUTOMATIQUEMENT
:Input "LARGEUR:",W
:Input "HAUTEUR:",H
:min(H,7[sto>]H
:min(W,15[sto>]W
:Lbl TS
:ClrDraw
:Input "MINES:",M
:ClrHome
:iPart(.5W[sto>]Z //remplacer W/2 par .5W est plus rapide pour la même place
:iPart(.5H[sto>]¤ //remplacer W/2 par .5W est plus rapide pour la même place
:DelVar [A]{H,W[sto>]dim([A] //ici: l'instruction suivant un DelVar peut
// toujours être coller sauf parfois si précédé d'un If ou suivit d'un End
:WH-M[sto>]O //ici
:For(A,1,M
:Output(4,8,A
:Lbl 00
:randInt(1,W[sto>]U
:randInt(1,H[sto>]V
:If 9=[A](V,U
:Goto 00
:If U[supérieur ou égal]Z-1 and U[inférieur ou égal]Z+1 and V[supérieur ou égal]¤-1 and V[inférieur ou égal]¤+1
:Goto 00
:9[sto>][A](V,U
:For(B,max(1,V-1),min(H,V+1
:For(C,max(1,U-1),min(W,U+1
:If 9[pas égal][A](B,C
:1+[A](B,C[sto>][A](B,C
:End
:End
:End
:For(A,0,W
:Line(6A,0,6A,(-)8H //ici*3:multiplication implicite
:End
:For(B,0,H
:Line(0,(-)8B,6W,(-)8B //ici:idem
:End
:For(A,1,W
:For(B,1,H
:Text(8B-7,6A-4,"O //ici:idem
:.1+[A](B,A[sto>][A](B,A //ici : 0.1 et .1 est interprété de la même manière
:End
:End
:Lbl R
:1[sto>]P
:While P
:Line(6Z-5,(-)8¤+7,6Z-1,(-)8¤+7 //ici:*4:mult implicite
:Line(6Z-5,(-)8¤+7,6Z-5,(-)8¤+1 //idem
:delVar TRepeat T //ici:*2:delvar
:getKey[sto>]T
:End
:Line(6Z-5,(-)8¤+7,Z6-1,(-)8¤+7,0
:Line(6Z-5,(-)8¤+7,6Z-5,(-)8¤+1,0
:Z+(T=26)-(T=24[sto>]Z
:¤+(T=34)-(T=25[sto>]¤
:Z-(Z=W+1)+not(Z[sto>]Z //ici : (Z=0 est interprété parreil que not(Z
:¤-(¤=H+1)+not(¤[sto>]¤ //ici:idem
:If T=45
:Goto Q
:If T=31
:Then
:fPart([A](¤,Z[sto>]A
:If .1=A
:Then
:.1+[A](¤,Z[sto>][A](¤,Z
:Text(8¤-7,6Z-4,"P //ici: mult implicite
:End
:If .2=A
:Then
:[A](¤,Z)-.1[sto>][A](¤,Z
:Text(8¤-7,6Z-4,"O //ici: mult implicite
:End
:End
:If T=21
:Then
:If not([A](¤,Z //not(? <=> (?=0
:Goto 01
:If 9.1=[A](¤,Z
:0[sto>]P
:If .1=fPart([A](¤,Z
:Then
:O-1[sto>]O
:[A](¤,Z)-0.1[sto>][A](¤,Z
:If [A](¤,Z //ici: 0[différent de]? <=> ?
:Then
:Text(8¤-7,6Z-4,[A](¤,Z //mult implicite
:Else
:Text(8¤-7,6Z-4," //3 espaces //ici : idem
:Lbl 01
:For(A,max(Z-1,1),min(Z+1,W
:For(B,max(¤-1,1),min(¤+1,H
:If .1=fPart([A](B,A
:Then
:[A](B,A)-.1[sto>][A](B,A
:O-1[sto>]O
:If 0=[A](B,A
:Then
:Text(8B-7,6A-4," //3 espaces //mult implicite
:Else
:Text(8B-7,6A-4,[A](B,A //mult implicite
:End
:End
:End
:End
:End
:End
:End
:If not(O //ici
:0[sto>]P
:End
:If 9=[A](¤,Z
:Then
:Text(8¤-7,6Z-4,"X //mult implicite
:Text(57,35,"PERDU!
:Else
:Text(57,35,"GAGNE!
:End
:For(A,1,W
:For(B,1,H
:If fPart([A](B,A
:Then
:If not(iPart([A](B,A //ici
:Then
:Text(8B-7,6A-4,iPart([A](B,A //mult implicite
:If 9<[A](B,A
:Text(8B-7,6A-4,"X //mult implicite
:Else
:Text(8B-7,6A-4," //3 espaces //mult implicite
:End
:End
:End
:End
:DelVar [A]
Sandro
programmaths le 07/12/2011 à 21:02
yeah pas mal !!

il y a quelque optimisation a faire (pour une question de jouabilité):
en bas a droite, mettre les mines restantes (si ya 10 mine, ça marque 10, si on met un drapeau ça met 9, si on met X drapeau ça met 10-X ^^, si on met 10 drapeau (et que c'est pas gagné) on met erreur
pour savoir a combien on en est, si on a fais une erreur ou pas a la fin
Code
Disp "LA TAILLE EST","LIMITEE","AUTOMATIQUEMENT
:Input "LARGEUR:",W
:Input "HAUTEUR:",H
plutot:
Code
input "largeur(1-15):",W
input "hauteur(1-7):",H
ça économise quelque octet et ça montre le max/min
quand on perd, si un drapeau a été mal placé ça mette un "!" au lieu de rien, ça montre l'endroit ou l'on s'est planté

dans le chargement des drapeaux, j'ai déja fais un ptti truck pas mal, ça ne doit pas concorder avec le tiens mais si ça te plais tu peux l'éssayé
Code
0->xmin:94->xmax
0->ymin:62->ymax
text(19,26,"chargement...
horizontal 31
horizontal 33
pt-On(0,32
pt-On(94,32
94/N->A //N nombre de mines
0->I:O->D
repeat N=D
D+1->D
text(37,35,D," / ",N
line(0,32,I+A,32
I+N->I
.. // ici une génération de mine avec les matrices
end
comme ça si ya 10 mine, a chaque mine généré le chargement augmente de 1/10 avec un bel effet graphique
voila voila, très bon démineur sinon
