Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 13842
Réponses : 95
Type : discussion
Etat : réponses autorisées

DEMINEUR SP - Page 1 / 2

coc5 le 24/12/2007 à 12:35
J’avais déjà tout pleins de projets en cours, mais aucun près d’être terminé. Je me suis donc dit, quel dommage, je n’ai rien à offrir pour noël !
Donc voici un démineur assez particulier car sortant de ma ligne de production habituel, c'est-à-dire un code court (867 octets) pour un programme de travaillant pas dans la finesse, tout en restant efficace winkle.gif .

En attendant un vrai programme complet à reliure, voici néanmoins un démineur simple mais court et facile (à priori) à recopier^^


http://www.badongo.com/file/7012833



Code
ClrHome
Disp "   DEMINEUR SP","----------------","
Output(8,1,"(C)COC5  2007
Input "NBR MINE ",N
N -> X
{7,15 -> dim([A]
Fill(0,[A]
ClrHome
min(150,max(1,N -> N
0 -> D
Output(4,9,"/
Output(4,10,N
Repeat N=D
D+1 -> D
Output(4,8-int(log(D)),D
Repeat 9-[A](A,B
1+round(6rand,0 -> A
1+round(14rand,0 -> B
End
9 -> [A](A,B
For(I, -1,1
For(J, -1,1
If A+I and B+J and A+I-8 and B+J-16:Then
If 9ø[A](A+I,B+J
1+[A](A+I,B+J -> [A](A+I,B+J
End:End:End:End
[A] -> [B]
For(I,1,7
Output(I,1,"***************
End
8 -> B:4 -> A
Lbl A
Repeat K=22
Repeat K : getKey -> K : End
Output(A,16," "
Output(8,B," "
min(7,max(1,A+(K=34)-(K=25 -> A
min(15,max(1,B+(K=26)-(K=24 -> B
Output(A,16,"O
Output(8,B,"O
If K=21 and 8-[B](A,B:Then
[A](A,B
If Ans:Output(A,B,Ans
If not(Ans:Output(A,B,"
If Ans=9:Then
ClrHome
Disp "PERDU !
Pause
Lbl 1
For(I,1,7
For(J,1,15
[A](I,J -> A
If not(A:Output(I,J," "
If A>0 and A<9:Output(I,J,A
If A=9:Output(I,J,"X
End
End
{1,1 -> dim([A]
Ans -> dim([B]
Return
End
End
If K=31:Then
Output(A,B,"+
N-([B](A,B)=9 and [A](A,B)=9 -> N
8 -> [B](A,B
If not(N
Then
ClrHome
Disp "GAGNE !
Pause
{1,2 -> dim([E]
If X÷ ( ) [E](1,2
Then
Disp "RECORD ACTUEL :
Else
Disp "NOUVEAU RECORDS:
X -> [E](1,2
End
Disp [E](1,2
{1,1 -> dim([A]
Ans -> dim([B]
Stop
End
End
If K=32:Then
Output(A,B,"*
N+([A](A,B)=9 and [B](A,B)=8 -> N
[A](A,B -> [B](A,B
End
End
Menu("ETES-VOUS SUR ?","NON",A,"OUI",1
mad67 le 24/12/2007 à 18:29
ben moi je croi que c'est vista qui va arriver o nouvel an par contre faut que je le teste mais il a l'air bien laugh.gif
Jcotnys le 13/05/2008 à 22:03
salut salut cupsmiley.gif cupsmiley.gif bon désolé je ramène mon grain de sel laugh.gif laugh.gif
juste pour ajouter ca a ton code coc5 (je pense que ca doit etre un oubli xD)
Code

......
Output(A,16,"O
Output(8,B,"O
Output(A+1,16,"esp
Output(A-1,16,"esp

PB :Output(A-1,16,"esp ->la calculette me met: ERR:DOMAIN d'ou cette condition :If (A-1) inf à 0:2->A
mais il faudrait enlever la première ligne des mines d'ou question : c quoi le bon code ?? ahh.gif ahh.gif
encore désolé...crazy.gif crazy.gif et très bon jeu par contre c vraiment cho à finir laugh.gif
coc5 le 14/05/2008 à 16:42
Le code que tu montre n'existe pas... Et n'a pas lieu d'être eyeonly.gif


Code
Output(A,16,"
Output(8,B,"
min(7,max(1,A+(K=34)-(K=25 -> A
min(15,max(1,B+(K=26)-(K=24 -> B
Output(A,16,"O
Output(8,B,"O


Ce code efface d'abord les "O" enregistre le changement de position (selon K, qui à la valeur de getkey), puis replace les "O"

Note: pour améliorer le confort, il est mieux de mettre

Code
Repeat K : GetKey->K : End

A la place de :

Code
Getkey -> K
mad67 le 15/05/2008 à 18:04
vlan dans la face lol
j'ai essayé c'est génial!
Jcotnys le 15/05/2008 à 20:52
ok ok mais je l'ai testé et pas moyen c'est la touche 34 :quand on fait descendre le "O" , ben ya plusieurs "O" crazy.gif crazy.gif crazy.gif crazy.gif crazy.gif
j'ai vérifié et mon code est bon, comprends pa... moodforlove.gif moodforlove.gif et ca me donne ca:
Code

***************O
***************O
***************O
***************O
***************O
***************
       O

pour 24 et 26 c bon mais pa pour 34 et pour 25 faut rajouter :
Code

Output(8,B,"O
Output(A+1,16,"esp

sinon ca fait pareil que pour 34...
PS: c'est pas une critique c'est juste une remarque sur ce jeu
voila encore désolé ... eyeonly.gif eyeonly.gif (ou alors c'est peut etre ma caltos qui bug crazy.gif )
mad67 a écrit :

vlan dans la face lol
j'ai essayé c'est génial!

et ta pas eu de bug ahh.gif ahh.gif toi qui t'y croit à fond crazy.gif crazy.gif
coc5 le 15/05/2008 à 21:24
J'ai vérifié mon code, et il marche. Je pense que ton erreur de recopiage se situe ici :
Code

Output(A,16,"

si on ne fait pas attention on ne marque pas l'espace. Rajoute un espace et tu verras. (j'ai modifié mon code pour éviter cette erreur aux recopieurs, tan pis pour les 2 octets !)
Jcotnys le 17/05/2008 à 21:54
crazy.gif crazy.gif crazy.gif crazy.gif crazy.gif uai c'est ca c'etait mon erreur alor que j'avais mis un espace à
Code

Output(8,B,"esp

mais pa pour
Code
Output(A,16,"

pff...vraiment désolé, jsui étourdi parfois (kel c** crazy.gif crazy.gif ...)
mais la fin j'ai pas pu la tester parcske c vraiment cho chaque foi je tombe sur une bombe.. cupsmiley.gif cupsmiley.gif et sinon un trés bon démineur minied.gif minied.gif
Sangohan38 le 22/05/2008 à 08:10
Jcotnys, fait un effort pour ton orthographe car le langage SMS n'est pas autorisé sur ce forum.

Sangohan38
pasdepsedo le 26/05/2009 à 17:49
voilà j'ai recopié le code sur ma ti 82.
tout se passe bien sauf que lorsque je découvre une case, il y a soit du vide soit une mine (et pas les chiffres autour des mines...).
j'ai du faire une erreur de recopiage mais je n'arrive pas a voir où...
désolé pour la remontée du sujet...
coc5 le 26/05/2009 à 18:04
Pas de problème c'est normal, je prends en charge ce programme jusqu'au boût^^

Regarde vers le milieu de cette partie du programme si tu as bien écris : (vers le If Ans : Output(..., Ans )

Code
Repeat K=22
Repeat K : getKey -> K : End
Output(A,16," "
Output(8,B," "
min(7,max(1,A+(K=34)-(K=25 -> A
min(15,max(1,B+(K=26)-(K=24 -> B
Output(A,16,"O
Output(8,B,"O
If K=21 and 8-[B](A,B:Then
[A](A,B
If Ans:Output(A,B,Ans
If not(Ans:Output(A,B,"
If Ans=9:Then
ClrHome
Disp "PERDU !
Pause
pasdepsedo le 26/05/2009 à 19:44
j'ai revérifié et ca ne marche toujours pas...
coc5 le 26/05/2009 à 19:48
Dans ce cas le problème peut venir de par ici :
Code
1+round(14rand,0 -> B
End
9 -> [A](A,B
For(I, -1,1
For(J, -1,1
If A+I and B+J and A+I-8 and B+J-16:Then
If 9ø[A](A+I,B+J
1+[A](A+I,B+J -> [A](A+I,B+J     <<<<<<<<<<<<<<<<< Ici plus particulièrement
End:End:End:End
[A] -> [B]
For(I,1,7
Output(I,1,"***************
pasdepsedo le 26/05/2009 à 20:04
le symbole "ø" c'est bien la combinaison de touches alpha+3 ?
coc5 le 26/05/2009 à 20:24
non j'ai voulu mettre =/= je vois pas pourquoi ça affiche ça.
pasdepsedo le 26/05/2009 à 20:36
et bien voilà c'était ca...
merci

super jeu et ca prend pas beaucoup de place...
fabrice le 24/09/2009 à 23:40
Bonsoir,
J'ai rentré le programme, mais lorsque je rentre un nombre N de mines, la calculatrice afiche erreur syntaxe et envois le curseur sur
:{7,15->dim([A]
D'où vient l'erreur ?
Et faut-il faire la difference entre / et le signe diviser ?
Merci
coc5 le 25/09/2009 à 16:07
As-tu bien tapé [A] ?

Ce signe désgine une matrice, et il ne faut pas inscrire "[" + "A" + "]" mais [A] en un seul bloque (dans le menu des matrices).
Rézus le 25/09/2009 à 19:45
Ton programme est très bien mais j'ai l'impression que tu t'es un peu compliqué la vie ^^.
fabrice le 25/09/2009 à 19:59
Effectivement, mes [A] n'étaient pas en un seul bloc
Mais maintenant, apres avoir rentré le nombre de mines apparait "erreur:division par 0" et me renvoit à If 9/[A](A+I,B+J
coc5 le 25/09/2009 à 23:27
Rézus : Au contraire, j'ai fais l'un des programmes de démineur le plus court tout en restant agréable à jouer. Il est simplissime par rapport à l'autre version graphique que j'ai fais.

Sinon pour l'erreur c'est normal, la ligne que tu cites est mal tapé, vérifie car c'est surement un signe d'égalité, d'inégalité, ou du genre, mais pas une division.

Pour l'explication technique je t'affirme ça car cette ligne test si 9/[A](A+I,B+J est égal à 0 ou non. Ors une division dont le nominateur est 9 sera toujours égal à un nombre différent de 0...
Johann le 18/10/2009 à 13:40
excusez moi, "=/=" veut dire "différnt de" soit "=" barré?
merci beer.gif
Rézus le 18/10/2009 à 14:42
C'est la même chose ^^
WoKeRnOZ le 24/11/2009 à 16:14
J'ai tenté de faire un demineur aujourd'hui..
Tout fonctionne, sauf pour l'affichage.. J'veux dire:
Quand on est pres d'une mine par exemple, j'arrive pas a metttre 1 ou 2 ou autre chose...
Obligé d'utiliser les matrices?
Ou on peut contourner par un autre moyen?
Sangohan38 le 24/11/2009 à 17:56
Si tu utilisait les listes?

Sangohan38
WoKeRnOZ le 25/11/2009 à 12:47
Euuuh merci mais..
Tu pourrais m'expliquer stp?
Comment tu veux que je les utilise?
J'veux bien le faire, mais c'qui me manque, c'est la methode :/
Stupid le 25/11/2009 à 14:54
Les matrices c'est le mieux. Tu peux essayer de bidouiller avec partdec et partent. en gros pour cette deuxième technique tu fous toute ta ligne dans une variable et tu la divise de 10^N, puis tu multiplies la partdec par 10 pour ne plus que garder la partent. mais tu seras obligé de rajouter des for et d'autres trucs qui rendront le programme assez lourd. Bien sur une matrice ça bouffe beaucoup de place, mais bon c'est efficace. Et je ne vois pas en quoi utiliser les listes présente un quelconque avantage.

ah et bonjour tous. beer.gif
Sangohan38 le 26/11/2009 à 19:42
L'avantage c'est qu'une liste c'est pas lourds (800 octets pour une liste à 99 lignes contre 1000 octets pour une matrice 5*5) et quand tu l'utilise, tu as juste besoin d'indiquer la ligne alors que pour une matrice, il faut indiquer la ligne et la colonne soit deux octets en plus à chaque fois.
Et le gain de vitesse est négligeable vu que la matrice est lourde et ton programme aussi.

Sangohan38
Stupid le 26/11/2009 à 23:03
Une liste 5x5 pèse 233 octets chez moi :/
Rézus le 28/11/2009 à 19:33
Une matrice tu veux dire lol.
Pour moi,une matrice 5*5 pèse 237 octets et une liste de 25 membres 237 octets itou,donc pas de différence si ce n'est que la liste nécessite un plus grand nombre de calculs...
Sangohan38 le 28/11/2009 à 23:30
Mais aussi moins de coordonnées à données donc plus d'octets au final.

Sangohan38
Stupid le 29/11/2009 à 15:20
Non mais ça se compense, et une matrice c'est beaucoup plus pratique niveau calcul dans le cas d'un démineur.
coc5 le 07/12/2009 à 00:12
Un démineur est déjà un peu lent à la base, alors avec le système de liste ce serait injouable.

Et en aucun cas un problème d'affichage ne peut être lié à l'utilisation de matrice.
val91 le 13/12/2009 à 20:53
bonsoir a tous,
je voudrai savoir quelles sont les touches à utiliser pour ce démineur car j'arrive a déplacer les 0 avec les flèches, ainsi qu'à mettre des "+" avec la touche "alpha", mais n'arrive pas a mettre de chiffres sur la grille.
merci
sypotu le 13/12/2009 à 22:45
bonsoir
c'est la touche 2nde winkle.gif
val91 le 14/12/2009 à 18:32
Bah, non, j'ai essayé, et sa marche pas... ou si mais ça a marché que 2 fois sans que je m'en rende compte, et ça a marché que une fois dans les deux parties, quand je rappuyais sa marchai pas.
sypotu le 14/12/2009 à 20:39
relit toi tu as du faire une erreur...
valrom le 16/12/2009 à 11:42
En fait il me manquais un espace. mais maintenant ma ti 82 ne détecte pas les mines, soit, quand je clique, il y a un blanc qui apparait, soit il y a un 10, 11, 12, 13 ou 14 qui apparait (je suppose que c'est quand je fait exploser une mine).

Ah oui, et aussi, je ne peut ni perdre une partie, ni la gagner.

Pourquoi ???
coc5 le 13/01/2010 à 16:22
Excuse la réponse tardive.

Donc en fait vu toutes ces erreurs le plus simple serait de tout retaper.
Néamoins, regarde au niveau des matrices ([A](X,Y) par exemple) l'erreur se trouve plus surement par là, si il n'y en a qu'une.
valrom le 23/01/2010 à 11:56
merci mais j'ai supprimé le programme parce qu'il prenait beaucoup de place et que je pouvait pas l'utiliser... et puis j'ai la flème de tout recopier minied.gif mais bon je vais quand meme essayéhappy.gif
jojo le 12/03/2010 à 20:01
j'ai un problème
tout fonctionne normalement sauf que quand je fais"seconde" a un endroit ou il n'y a pas de bombe la croix ne s'efface pas
merci de me répondre
sinon le programme est super bigmouth.gif bigmouth.gif bigmouth.gif bigmouth.gif
coc5 le 13/05/2010 à 20:34
Il faut enlever la croix avant (avec [alpha] )
adele le 03/11/2010 à 16:06
Bonjour
j ai ecrit le programme et lorsque je fait le jeu et que j appuie sur la touche seconde il ne se passe rien alors qu il devrait me montrer les chiffres sauf quand je tombe sur une bombe il me di perdu
Sangohan38 le 03/11/2010 à 20:25
Regarde à partir de cette ligne si tu n'as pas fait d'erreur:

Code
If K=21 and 8-[B](A,B:Then


Sangohan38
adele le 04/11/2010 à 15:18
Non j'ai verifie tout est bon
Par contre il me renvoie a la ligne
Repeat K:codeTouche(fleche)K
adele le 09/11/2010 à 19:54
je me n sort pas !!!!
pourtant g tout verifier
coc5 le 24/11/2010 à 01:30
Bonjour adele.

Quand tu dis "il me renvoie", tu parles bien d'un arrêt du programme suite à une erreur (pense à dire quelle erreur il t'indique) ?
Et la calculatrice te renverrait donc à cette ligne là ?

Supprime la parenthèse à droite de la flèche.

Ce qui doit te donner :
Code
Repeat K:codeTouche(->K
godzlove le 24/11/2010 à 19:46
j'ai un petit problème : je fais 2nde sur des * et il ne se passe rien, c'est parceque il n'y a ni mines ni chiffre, mais dans ce cas là, sa devrait pas afficher un blanc ? ou alors c'est pas la bonne touche ? crazy.gif sinon ou est l'erreur ? (j'ai pris soin de bien revérifier)
coc5 le 25/11/2010 à 14:19
Ce programme est sur ma calculatrice et fonctionne correctement, un blanc est affiché en lieu et place d'un * quand on presse [2nd].

Il y a eu donc une erreur lors du recopiage.


Hmm...



Si t'y connais un petit peu en Ti-Basic ? Il faudrait que tu me passes le morceau de code qui entoure la pression sur [2nd].
Si tu ne vois pas, c'est autour du code
Code

If K=21
godzlove le 25/11/2010 à 19:46
oui je me débrouille,en recopiant le code, j'ai constaté que sur la ligne de commande qui doit afficher un blanc j'avais mis :

Code
If no(Ans
Output(A,B,"


l'erreur venait du fait que je n'avais pas refermé les guillemets je ne sais pas pourquoi mais sa ne marchait pas, peu être du fait que j'ai une ti-82 stats.fr...

je l'ai corrigé comme ceci :

Code
If no(Ans
Output(A,B," "


PS : un ptit prob : qd on perd, ne serait il pas meiux à l'aide d'un goto de ramener au choix final : etes vous sur....

Donc sa marche, merci, très beau jeu !