Forum

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

La vertion 4 béta du Labygénérateur ! - Page 1 / 3

ld le 10/12/2010 à 09:41
Et voici comme promis la vertion 4 béta du Labygénérateur ! 726 octets... glasses.gif

LES LABYRINTHES SONT "PARFAITS" SELON LA DEFINITION MATHEMATHIQUE !!! bigmouth.gif

Ce prgm génére des labyrinthes des plus magnifiques, le principe n'a
rien en commain avec la première version, il en crée des "parfaits"
selon la définition mathématique (aucunes zones inaccéssibles, pas "d'ilôts").
Deplus il est optimiser au maximum pour tourner le plus correctement possible...

Vous allez en avoir plein les yeux ! J'ai réfléchis, j'ai écris, j'ai réussit !!! glasses.gif

Code
:Menu("LABYRINTHE","REPET",2,"NEW",1,"FIN !",3)
:Lbl 1
:AxesNaff:EffDessin
:RappelImage (le n° de votre image):Pause:EffDessin  ----(Ligne facultative).
:0-)Xmin:0-)Ymin:94-)Xmax:62-)Ymax
:Vertical 1:Vertical 93
:Horizontale 1:Horizontale 61
:Lbl 3:0-)R
:{0,4,0,-4}-)L1:{4,0,-4,0}-)L2
:Lbl 0
:5+4entAléat(0,13)-)A
:5+4entAléat(0,21)-)B
:If pxl-Test(A,B)=0:Then:Pxl-On(A,B):0-)teta:Else:1-)teta:End
:
:While 1
:
:entAléat(1,4)-)L
:L1(L)-)C:L2(L)-)D
:A+C-)Y:B+D-)X
:
:If pxl-Test(Y,X)=0:Then
:
:Y-)A:X-)B:62+C/1.3-)Z
:Ligne(B,Z-A,B-D/1.3,Z-A-C/1.33)
:
:Else
:If Y=1 ou Y=61 ou X=1 ou X=93:Then
:If teta=0:Then
:Y-)A:X-)B:62+C/1.3-)Z
:Ligne(B,Z-A,B-D/1.3,Z-A-C/1.33)
:Goto 0:End:End
:
:If pxl-Test(A+4,B)+Pxl-Test(A-4,B)+pxl-Test(A,B+4)+pxl-Test(A,B-4)=4
:Goto 0
:End:End
______________________________________________________________________
A métre à la suite du prgm si vous souhaitez pouvoir vous déplacer
à l'intérieur (le but est d'ateindre le point se placant de façon
alétoire sur le labyrinthe).
______________________________________________________________________
:Lbl 2
:
:0-)X:0-)Y
:4entAléat(1,14)+3-)C
:4entAléat(1,21)+3-)D
:Pxl-On(C,D)
:If R=0:Then:3-)A:3-)B:End:1-)R
:
:While A(différent de)C ou B(différent de)D
:codeTouche-)K
:
:If K=45:Stop
:If K=24:-4-)Y
:If K=26:4-)Y
:If K=25:-4-)X
:If K=34:4-)X
:
:If Pxl-Test(A+X/2,B+Y/2)=0:Then
:Pxl-Off(A,B):Pxl-Off(A-1,B):Pxl-Off(A+1,B):Pxl-Off(A,B-1):Pxl-Off(A,B+1)
:A+X-)A:B+Y-)B
:Pxl-On(A,B):Pxl-On(A-1,B):Pxl-On(A+1,B):Pxl-On(A,B-1):Pxl-On(A,B+1)
:End:0-)X:0-)Y
:
:End
:
:Menu("GAGNE !","REPET",2,"QUITTER",4)
:Lbl 4:EffListe L1:EffListe L2:AxesAff:ZStandard:EffEcr:Stop


IMPORTANT !

Lorsque, après avoir séléctioner NEW, le prgm à terminer de
générer le labyrinthe, celui-ci ne peut malheuresement pas encore s'arreter seul
(sous paine de ralentir ce prgm déjà assez long...). Vous devez donc, une fois
que vous penser que toutes les cases ont étaient dessinées, appuyer sur "ON" et
choisir "Quitter". Puis redémarer le prgm et choisir cette fois la commande "REPET" crazy.gif
pour le voir réaparaître. Vous devez appuier sur l'une des touches directionelles
pour commancer à jouer...

ATTENTION ! Si un "erreur mémoire" survient lors de la création du labyrinthe,
éxecuter les commande ci-dessous: karate.gif
"1:Quitter",touche "Entrer","FIN !" dans le prgm Labygénérator.

REMARQUE: ahh.gif

--Une fois arriver sur le petit point, vous avez gagné, vous pouvez y
rejouer en réutilisant "REPET"
--Si un labyrinthe vous plait, pourquoi pas ne pas l'enregistrer avec la commande
"SauveImage" dans le menu Dessin de la calto. Il vous sufirat de faire un
"RappelImage" puis "REPET" dans le prgm pour y rejouer !
--"REPET" sert à en rejouer un... (une fois l'avoir générer, et si toutes fois vous
n'ayez pas éxécuter la commande NEW ou EffDessin après celui-ci)...
--"ANNUL" pour quitter pandant le jeu.
Sangohan38 le 10/12/2010 à 19:35
Ce programme à l'air sympathique mais est encore perfectible notamment au niveau de la sauvegarde.
Et je pense que l'on peut réduire le programme et partir à la chasse à l'octet.
Sinon, évite au maximum les Then/else/End dans tes prog car c'est ce qui ralentis pas mal.

Je vais essayer de te faire un 83p si tu veux.

Sangohan38
ld le 13/12/2010 à 09:48
la vertion 4.2 du Labygénérateur ! 770 octets... glasses.gif

Ayant l'intantion de rajouter beucoups de fonctions à ce prgm et appréciant
le travail bien fait, je me devait de massurer que le prgm de basse tourne
de façon optimal afin qu'il accepte, en le ralentissant un minimum, les lignes
suplémentaires, destinées à faire de lui un réel jeu...
Cette vertion est, quoi qu'un peu plus longue et utilisant plus de listes,
optimiser à mort, et écrite de façon à battre des records de vitesse. karate.gif
(Le plus de lecture, et le moin d'écriture de variables possible (plus long)).

ATTENTION: Cette vertion du prgm n'est pas définitive et est déstinée en priorité aux programmeurs comfirmés, elle n'aportera rien de plus aux débutant de ce forum,à part des chances en plus de faire des érreurs de recopiage.
Si vous n'avez pas l'intention de déveloper le prgm, ne passez pas à la 4.2, elle est semsiblement la même que la prècedante vertion...

REMARQUES:
"LA"= Liste A (Le petit L dans le cataloge + la variable A)
"LB","LC" IDM...
"{" et "}" = Acolades (Touches 2nde + paranthéses)
"-)" = "sto-)".

Code
:Menu("LABYRINTHE","PLAY",2,"NEW",1,"REPET",3)
:Lbl 1
:AxesNaff:EffDessin
:RappelImage (le n° de votre image):Pause:EffDessin  ----(Ligne facultative).
:0-)Xmin:0-)Ymin:94-)Xmax:62-)Ymax
:Vertical 1:Vertical 93
:Horizontale 1:Horizontale 61
:Lbl 3:0-)R
:{0,4,0,-4}-)LA:{0,3.1,0,-3.1}-)LB:{62,65.1,62,58,9}LC
:Lbl 0
:5+4entAléat(0,13)-)A
:5+4entAléat(0,21)-)B
:If pxl-Test(A,B)=0:Then:Pxl-On(A,B):0-)teta:Else:1-)teta:End
:
:While 1
:
:entAléat(1,4)-)L
:If pxl-Test(A+LA(L),B+LA(L+1))=0:Then
:
:Ligne(B,LC(L)-A,B-LB(L+1),LC(L)-A-LB(L))
:
:Else
:A+LA(L)-)Y:B+LA(L+1)-)X
:If Y=1 ou Y=61 ou X=1 ou X=93:Then
:If teta=0:Then
:Y-)A:X-)B
:Ligne(B,LC(L)-A,B-LB(L+1),LC(L)-A-LB(L))
:Goto 0:End:End
:
:If pxl-Test(A+4,B)+Pxl-Test(A-4,B)+pxl-Test(A,B+4)+pxl-Test(A,B-4)=4
:Goto 0
:End:End
______________________________________________________________________
A métre à la suite du prgm si vous souhaitez pouvoir vous déplacer
à l'intérieur (le but est d'ateindre le point se placant de façon
alétoire sur le labyrinthe).
______________________________________________________________________
:Lbl 2
:
:0-)X:0-)Y
:4entAléat(1,14)+3-)C
:4entAléat(1,21)+3-)D
:Pxl-On(C,D)
:If R=0:Then:3-)A:3-)B:End:1-)R
:
:While A(différent de)C ou B(différent de)D
:codeTouche-)K
:
:If K=45:Stop
:If K=24:-4-)Y
:If K=26:4-)Y
:If K=25:-4-)X
:If K=34:4-)X
:
:If Pxl-Test(A+X/2,B+Y/2)=0:Then
:Pxl-Off(A,B):Pxl-Off(A-1,B):Pxl-Off(A+1,B):Pxl-Off(A,B-1):Pxl-Off(A,B+1)
:A+X-)A:B+Y-)B
:Pxl-On(A,B):Pxl-On(A-1,B):Pxl-On(A+1,B):Pxl-On(A,B-1):Pxl-On(A,B+1)
:End:0-)X:0-)Y
:
:End
:
:Menu("GAGNE !","REPET",2,"QUIT",4)
:Lbl 4:EffListe L1:EffListe L2:AxesAff:ZStandard:EffEcr:Stop
Sangohan38 le 13/12/2010 à 10:16
Citation
...770 Ko...


Une calto c'est 28 ko si mes souvenirs sont bons y'a une légère erreur d'unité on dirais.
De plus, je vois encore beaucoup de Then/else/end et c'est à proscrire au maximum dans un programme pour qu'il tienne sur la durée.

Un lien 83p serais possible?

Sangohan38
ld le 13/12/2010 à 10:33
A oui sut! Effectivement, c'est plutôt 770 octets...Merci ! crazy.gif
Pour ce qui est d’augmenter la vitesse en utilisant un minimum
de Then/else/End dans les prog, c'est marrant mes tu m'apprend
là quelque chose ! ahh.gif
J'aurais juré tout l'inverse ! Mais je veut bien te croire,
j'écrirait çà et je te dirait quoi... happy.gif
Comme quoi on en apprend tout les jours et que ce forum n'est pas
qu’utile aux débutants ! bigmouth.gif

PS: A tu eu le temps de le tester ? Perso il claque ! glasses.gif
Sangohan38 le 13/12/2010 à 11:01
Non, j'ai pas pris le temps de le recopier mais si tu fournis le 83p ça me motivera sans doute.

Sangohan38
ld le 13/12/2010 à 12:52
Je vais peut'être passer pour un con, mais qu'entend tu par "83p" ? crazy.gif
ld le 13/12/2010 à 17:20
AAARRGGG !!! Horreur ! maxiangry.gif
J'ai demander confirmation a un amis et tu semble avoir bien raison ! angry.gif
Les "Then Else End" dans mon prgm le ralentissant. Fichtre ! cry.gif
Les modifications que je lui est apporter le rendant bien plus rapide, certes,
mais je ne cherchait donc pas là où il faut, et les résultats en supprimant
les "Then Else End" pourraient se révéler bien plus efficace ! ahh.gif
Le probleme, je n'y parvient pas ! Alors que la vitesse est primordial dans ce genre prgm... evil.gif

HELP !!! frozen.gif
linkakro le 13/12/2010 à 23:05
Apprend à remplacer des THEN etc par des goto et des boucles. Regarde l'article de vibra si besoin.
Et le pire du pire : un goto à l'intérieur d'un then...End. Cela fait plus encore que ralentir quand on a des boucles (ralentis + bugs possibles).
ld le 28/12/2010 à 16:55
la vertion 4.4 du Labygénérateur ! 715 Ko...

Elle est ÉNORME !!!! bigmouth.gif bigmouth.gif bigmouth.gif bigmouth.gif bigmouth.gif
Et méchamment rapide ! evil.gif evil.gif evil.gif evil.gif
Des labyrinthes Plus-Que-Parfaits,prgm plus léger
et des améliorations déconcertantes !!! bigmouth.gif glasses.gif


Code
:Menu("LABYRINTHE","PLAY",2,"NEW",1,"REPET",3)
:Lbl 1
:AxesNaff:EffDessin
:RappelImage (le n° de votre image):Pause:EffDessin  ----(Ligne facultative).
:0-)Xmin:0-)Ymin:94-)Xmax:62-)Ymax
:Vertical 1:Vertical 93
:Horizontale 1:Horizontale 61
:Lbl 3:0-)R
:{0,4,0,-4,0}-)LA:{0,3.1,0,-3.1,0}-)LB:{62,65.1,62,58,9}LC
:Lbl 0
:Reapet pxl-Test(A,B)=1
:1+4entAléat(0,15)-)A
:1+4entAléat(0,23)-)B:End
:If A=1:2-)L
:If A=61:4-)L
:If B=1:1-)L
:If B=93:3-)L
:
:While 1
:
:If pxl-Test(A+LA(L),B+LA(L+1))=0:Then
:A+LA(L)-)A:B+LA(L+1)-)B
:Ligne(B,LC(L)-A,B-LB(L+1),LC(L)-A-LB(L))
:Else
:If pxl-Test(A+4(A=/=61),B)Pxl-Test(A-4(A=/=1),B)pxl-Test(A,B+4(B=/=93))pxl-Test(A,B-4(B=/=1))=1
:Goto 0
:End
:entAléat(1,4)-)L
:End
______________________________________________________________________

:Lbl 2
:0-)X:0-)Y
:4entAléat(1,14)+3-)C
:4entAléat(1,21)+3-)D
:Pxl-On(C,D)
:If R=0:Then:3-)A:3-)B:End:1-)R
:
:Repeat A=C ou B=D
:codeTouche-)K
:
:If K=45:Goto 6
:Y-2(K=24)+2(K=26)-)Y
:x-2(K=25)+2(K=34)-)x
:
:If Pxl-Test(A+X,B+Y)=0:Then
:Pxl-Off(A,B):Pxl-Off(A-1,B):Pxl-Off(A+1,B):Pxl-Off(A,B-1):Pxl-Off(A,B+1)
:A+2X-)A:B+2Y-)B
:Pxl-On(A,B):Pxl-On(A-1,B):Pxl-On(A+1,B):Pxl-On(A,B-1):Pxl-On(A,B+1)
:End:0-)X:0-)Y
:End:Goto 2
:Lbl 6
:Menu("GAGNE !","QUIT",5,"SAVE",4)
:Lbl 4:SauveImage 0
:Lbl 5:EffListe LA:EffListe LB:EffListe LC:AxesAff:ZStandard:EffEcr:Stop
metallica le 28/12/2010 à 19:54
Je n'ai pas tout regardé mais pour économiser encore quelque octets, tu peux remplacer:
Code
:{0,4,0,-4,0}-)LA:{0,3.1,0,-3.1,0}-)LB:{62,65.1,62,58,9}-)LC

par:
Code
:{0,4,0,-4,0-)A:{0,3.1,0,-3.1,0-)B:{62,65.1,62,58,9-)C

Ce qui fait un gains de 6 octets. glasses.gif
ld le 29/12/2010 à 15:27
Punaise ! C'est vrai, je ne connaisse pas ! bigmouth.gif

Tank You So Much ! minied.gif
L.Davin... glasses.gif

PS: Tu le trouve comment ce prgm ? happy.gif
Quelqu'un sur le forum a poster un labyrinthe 3D, je ne l'ai pas encore
essayer mais çà me laisse perplexe... crazy.gif
J'ai trouver une propriété intéressante du Laby, il y a toujours 308 murs !
De quoi faire un barre de chargement et qui s’arrête quant il à finit !!! glasses.gif
metallica le 29/12/2010 à 15:52
Pas encore tester (plus de place sur ma TI-82 Stats.fr et sur ma 83+ je programme en Axe Parser et ça arrive parfois d'avoir des RAM Cleard).
Je peux voir encore pas mal de modifs pour économiser de la RAM:
Code
:Menu("LABYRINTHE","PLAY",2,"NEW",1,"REPET",3)
peut devenir:
:Menu("LABYRINTHE","PLAY",2,"NEW",1,"REPET",3

:Lbl 3:0-)R
:{0,4,0,-4,0}-)LA:{0,3.1,0,-3.1,0}-)LB:{62,65.1,62,58,9}LC
devient:
:Lbl 3:Delvar R{0,4,0,-4,0-)A:{0,3.1,0,-3.1,0-)B:{62,65.1,62,58,9-)C

:Repeat pxl-Test(A,B)=1
:1+4entAléat(0,15)-)A
:1+4entAléat(0,23)-)B:End
correspond à:
:Reapet pxl-Test(A,B
:1+4entAléat(0,15-)A
:1+4entAléat(0,23-)B:End

Et j'en passe surement plein.
Persalteas le 30/12/2010 à 09:17
je suis en train de recopier ton prog, et je me demande si c'est bien ça à la ligne:

Code

If pxl-Test(A+4(A=/=61),B)Pxl-Test(A-4(A=/=1),B)pxl-Test(A,B+4(B=/=93))pxl-Test(A,B-4(B=/=1))=1

il n'y aurait pas des "et" ou des "ou" entre les pixels test ?


PS: c'est moi qui ait fait laby3D , mais je te rasssure il est totalement aléatoire.Le but c'est de trouver des diamants pour accéder au niveau suivant où il faut plus de diamants. Rien de très sophistiqué.

EDIT: ah non, j'ai compris... ok pour les pixels test: c'est une multiplication.
ça évite de mettre les "et" .


dans ce cas, tu peux même supprimmer le "=1" après.
Persalteas le 30/12/2010 à 09:31
ça y est je l'ai recopié.

il marche bien, c'est vrai qu'il est rapide pour un prog de ce type.

le seul truc, ben c'est que le labyrinthe n'a pas de solution.

pour gagner encore quelques octets, remplace:
Code

:Pxl-Off(A,B):Pxl-Off(A-1,B):Pxl-Off(A+1,B):Pxl-Off(A,B-1):Pxl-Off(A,B+1)
:A+2X-)A:B+2Y-)B
:Pxl-On(A,B):Pxl-On(A-1,B):Pxl-On(A+1,B):Pxl-On(A,B-1):Pxl-On(A,B+1)
:End:0-)X:0-)Y


par:
Code

:Pt-Off(B,62-A,3
:A+2X-)A:B+2Y-)B
:Pt-On(B,62-A,3
:End:0-)X:0-)Y

metallica le 30/12/2010 à 10:37
On peut aussi modifier ceci:
Code
:0-)X:0-)Y
par
:Delvar XDelvar Y
lover-lol le 31/12/2010 à 23:47
J'aurais peut-etre l'air un peu idiot mais qu'est-ce-que le
Code
RappelImage (le n° de votre image)
?

Car, j'ai essayé en mettant 1 puis Img1 mais on me dit "Indéfini" !
Merci d'avance !
metallica le 01/01/2011 à 17:27
Enregistre d'abord une image dans ta TI à l'emplacement que tu auras écrit.
lover-lol le 01/01/2011 à 20:09
Argh, j'ai oublié comment faire
metallica le 01/01/2011 à 20:54
SauveImg/StorePic (le n° de ton choix) après avoir dessiné ton image avec les options de dessin se trouvant en faisant [2nd]+[PRGM].
lover-lol le 01/01/2011 à 20:59
Merci !
metallica le 01/01/2011 à 22:16
De rien winkle.gif
ld le 03/01/2011 à 10:52
OUAHH !! C'est génial, toutes c'est petites astuces Metallica pour
économiser des octets ! bigmouth.gif
Je kiffe grave ! Va y ! Déchire toi, balance en plein ! bigmouth.gif
Çà fait gagner de la place et de la vitesse au prgm ! karate.gif

Merci aussi a persalteas pour cet quelques modifications, je vais l'ais
essayer sans attendre et je vous dirais quoi ! bigmouth.gif
Par contre ta remarque sur le fait que le labyrinthe n'a pas de solution
m’inquiète beaucoup, car les miens sont bel et bien PARFAITS !
(Un seul est unique chemin possible et cela dans tout les cas, et aucune zone inaccessible)... loupe.gif
Vérifie si tu n'a pas fait d'erreur ! Quel plaie ce recopiage ! maxiangry.gif
Et oui il n'y a pas de "et" entre les Pxl-Test... godgrace.gif

Pour info j'ai déjà écrit la version 4.5 !
je prendrait en compte vos modifications et la publirée bientôt ! glasses.gif

Merci a tous pour votre soutient ! bigmouth.gif
ld le 03/01/2011 à 13:59
Çà y est j'ai tester vos propositions et toutes fonctionnent ! happy.gif
C'est officiel elles seront intégrées à la version 4.5 du prgm ! glasses.gif
Sauf peut'être les "delvar x" à la place de "0-)x".
Car elle prend la même place et n'est pas forcement plus facile à écrire...
Cependant si elle va plus vite à s'exécuter je la l'adopterais... minied.gif

Merki ! kiss.gif
Persalteas le 03/01/2011 à 20:26
j'ai vérifié ça me fait bien un labyrinthe avec le chemin coupé au milieu de l'écran.
metallica le 04/01/2011 à 18:34
Tu veux d'autres optimisations. Tiens:
Tous les "If {EXPRESSION}=0" peuvent être remplacer par "If non({EXPRESSION}"
Ensuite toutes parenthèses se trouvant avant un [sto->] peut être supprimer. (Ce qui fait pas mal d'octets économiser.)
Je te conseil d'écrire Delvar {VARIABLE} au lieu de 0->{VARIABLE} car tu peux par exemple écrire:
Code
:Delvar X{0,1,4->A
au lieu de:
:0->X
:{0,1,4->A
ld le 05/01/2011 à 11:34
Persalteas, tu m’inquiète beaucoup, car ce prgm fonctionne vraiment
à la perfection... angry.gif
Si c'est moi qui est fait une erreur, ce n'ai pas grave,
garde ce que tu a déjà recopier car la version 4.5 ne devrait plus tardé.
Tu n'auras alors plus qu'a compléter ou modifier, et avec un peu de chance
çà rectifiera l'erreur... happy.gif
Mais qu'entend tu par "chemin coupé au milieu de l'écran" ??? crazy.gif

PS: Merci Metalica ! kiss.gif
Persalteas le 05/01/2011 à 15:29
j'entends qu'il y a une ligne (bon, pas une ligne droite, elle fait des détours) qui va du haut de l'écran au bas de l'écran, me barrant ainsi le chemin.
ld le 06/01/2011 à 13:08
C'est space ton truc ! crazy.gif Tu sais quoi ?
Je posterais un lien avec une vidéo et de images...
En attendant essaye de faire un "Reset défaut" de la calto.(çà ne suprime rien...). ahh.gif
ld le 06/01/2011 à 13:09
4.5 ! La version musclée du Labygénérateur ! evil.gif evil.gif 691 octéts...(avec les lignes facultatives et 640 sans).


Code
:Menu("LABYRINTHE","PLAY",2,"NEW",1,"REPET",3
:Lbl 1:Effvar c:Effvar P:1-)N  ----(Effvar C facultatif).
:AxesNaff
:RappelImage (le n° de votre image):Pause:EffDessin  ----(Ligne facultative).
:0-)Xmin:0-)Ymin:94-)Xmax:62-)Ymax
:Vertical 1:Vertical 93
:Horizontale 1:Horizontale 61
:Lbl 3
:{0,4,0,-4,0-)A:{0,3.1,0,-3.1,0-)B:{62,65.1,62,58,9-)C
:Lbl 0
:Reapet pxl-Test(A,B
:1+4entAléat(0,15-)A
:1+4entAléat(0,23-)B:End
:If A=1:2-)L
:If A=61:4-)L
:If B=1:1-)L
:If B=93:3-)L
:While 1
:If non(pxl-Test(A+LA(L),B+LA(L+1:Then
:A+LA(L-)A:B+LA(L+1-)B
:Ligne(B,LC(L)-A,B-LB(L+1),LC(L)-A-LB(L)
:C+1-)C:Pxl->On(62,partEnt(C/(154/45)+2  ----(Ligne facultative).
:Else
:If pxl-Test(A+4(A=/=61),B)Pxl-Test(A-4(A=/=1),B)pxl-Test(A,B+4(B=/=93))pxl-Test(A,B-4(B=/=1))=1
:Goto 0
:End
:entAléat(1,4-)L
:End
______________________________________________________________________

:Lbl 2
:Effvar X:Effvar Y
:3+4entAléat(1,14-)C
:3+4entAléat(1,21-)D
:Pxl-On(C,D
:If P=0:Then:3-)A:3-)B
:For(P,2,92:Plx-Off(62,P:End  ----(Ligne facultative).
:End:1-)P
:
:Repeat A=C ou B=D
:codeTouche-)K
:
:If K=45:Goto 6
:Y-2(K=24)+2(K=26-)Y
:x-2(K=25)+2(K=34-)x
:
:If non(Pxl-Test(A+X,B+Y:Then
:Pt-Off(B,62-A,3
:A+2X-)A:B+2Y-)B
:Pt-On(B,62-A,3
:End:Effvar X:Effvar Y
:End
:N+2-)N:Pxl-On(62,N:Goto 2
:Lbl 6
:Menu("GAGNE !","QUIT",5,"SAVE",4
:Lbl 4:SauveImage 0
:Lbl 5:EffListe LA:EffListe LB:EffListe LC:AxesAff:ZStandard:EffEcr:Disp (N-1)/2:Stop
metallica le 06/01/2011 à 17:21
Tiens je suis sympa, je vais t'optimiser ton code (regarde les commentaires):
Code
:Menu("LABYRINTHE","PLAY",2,"NEW",1,"REPET",3
:Lbl 1:Effvar cEffvar P1-)N  // Pas besoin de mettre ":" après Delvar {variable}
:AxesNaff
:RappelImage (le n° de votre image):Pause:EffDessin
:0-)Xmin:0-)Ymin:94-)Xmax:62-)Ymax
:Vertical 1:Vertical 93
:Horizontale 1:Horizontale 61
:Lbl 3
:{0,4,0,-4,0-)A:{0,3.1,0,-3.1,0-)B:{62,65.1,62,58,9-)C
:Lbl 0
:Reapet pxl-Test(A,B
:1+4entAléat(0,15-)A
:1+4entAléat(0,23-)B:End
:2(A=1)+4(A=61-)L  // Calcul de booléen évitant d'utiliser des If. Augmente la vitesse du programme
:(B=1)+3(B=93-)L
:While 1
:If non(pxl-Test(A+LA(L),B+LA(L+1:Then
:A+LA(L-)A:B+LA(L+1-)B
:Ligne(B,LC(L)-A,B-LB(L+1),LC(L)-A-LB(L)
:C+1-)C:Pxl->On(62,2+partEnt(C/(154/45  // Le 2+ au début pour supprimer ")"
:Else
:If pxl-Test(A+4(A=/=61),B)Pxl-Test(A-4(A=/=1),B)pxl-Test(A,B+4(B=/=93))pxl-Test(A,B-4(B=/=1  // Le =1 n'est pas nécessaire. 
:Goto 0
:End
:entAléat(1,4-)L
:End
______________________________________________________________________

:Lbl 2
:Effvar XEffvar Y3+4entAléat(1,14-)C // Même remarque qu'au début
:3+4entAléat(1,21-)D
:Pxl-On(C,D
:If non(P:Then:3-)A:3-)B
:For(P,2,92:Plx-Off(62,P:End
:End:1-)P
:Repeat A=C ou B=D
:codeTouche-)K
:If K=45:Goto 6
:Y-2(K=24)+2(K=26-)Y
:x-2(K=25)+2(K=34-)x
:If non(Pxl-Test(A+X,B+Y:Then
:Pt-Off(B,62-A,3
:A+2X-)A:B+2Y-)B
:Pt-On(B,62-A,3
:End:Effvar XEffvar YEnd // Encore même remarque.
:N+2-)N:Pxl-On(62,N:Goto 2
:Lbl 6
:Menu("GAGNE !","QUIT",5,"SAVE",4
:Lbl 4:SauveImage 0
:Lbl 5:EffListe LA:EffListe LB:EffListe LC:AxesAff:ZStandard:EffEcr:Disp (N-1)/2  // La dernière ligne du programme est déjà un Stop

A chque fois que tu aère le programme d'une ligne ça prend 1 octet en plus.
Sangohan38 le 06/01/2011 à 19:37
Faux! C'est quand tu rajoute un : que ça met des octets donc un retour à la ligne ou continuer en mettant les deux points consomme autant de mémoire.

Sangohan38
metallica le 06/01/2011 à 19:44
Oui mais je dit ça dès qu'il n'y a rien sur cette ligne (sauter plusieurs lignes pour séparer en plusieurs parties son code par exemple)
ld le 07/01/2011 à 09:11
Merci les copains ! Çà fonctionne très bien et sa économise tout pleins d’octets !
But :
:2(A=1)+4(A=61-)L
sad.gifB=1)+3(B=93-)L
Est faux si L=0 angry.gif

Je propose donc :
sad.gifB=1)+2(A=1)+3(B=93)+4(A=61
:Rép(Rép=/=0)+L(Rép=0-)L
C'est plus long mais çà fonctionne ! bigmouth.gif
ld le 07/01/2011 à 09:15
4.6 ! La version musclée du Labygénérateur ! happy.gif


Code
:Menu("LABYRINTHE","PLAY",2,"NEW",1,"REPET",3
:Lbl 1:Effvar cEffvar P1-)N  ----(Effvar C facultatif).
:AxesNaff
:RappelImage (le n° de votre image):Pause:EffDessin  ----(Ligne facultative).
:0-)Xmin:0-)Ymin:94-)Xmax:62-)Ymax
:Vertical 1:Vertical 93
:Horizontale 1:Horizontale 61
:Lbl 3
:{0,4,0,-4,0-)A:{0,3.1,0,-3.1,0-)B:{62,65.1,62,58,9-)C
:Lbl 0
:Reapet pxl-Test(A,B
:1+4entAléat(0,15-)A
:1+4entAléat(0,23-)B:End
:If A=1:2-)L
:If A=61:4-)L
:If B=1:1-)L
:If B=93:3-)L
:While 1
:If non(pxl-Test(A+LA(L),B+LA(L+1:Then
:A+LA(L-)A:B+LA(L+1-)B
:Ligne(B,LC(L)-A,B-LB(L+1),LC(L)-A-LB(L)
:C+1-)C:Pxl->On(62,2+partEnt(C/(154/45  ----(Ligne facultative).
:Else
:If pxl-Test(A+4(A=/=61),B)Pxl-Test(A-4(A=/=1),B)pxl-Test(A,B+4(B=/=93))pxl-Test(A,B-4(B=/=1
:Goto 0
:End
:entAléat(1,4-)L
:End
______________________________________________________________________

:Lbl 2
:Effvar XEffvar Y
3+4entAléat(1,14-)C
:3+4entAléat(1,21-)D
:Pxl-On(C,D
:If P=0:Then:3-)A:3-)B
:For(P,2,92:Plx-Off(62,P:End  ----(Ligne facultative).
:End:1-)P
:
:Repeat A=C ou B=D
:codeTouche-)K
:
:If K=45:Goto 6
:Y-2(K=24)+2(K=26-)Y
:x-2(K=25)+2(K=34-)x
:
:If non(Pxl-Test(A+X,B+Y:Then
:Pt-Off(B,62-A,3
:A+2X-)A:B+2Y-)B
:Pt-On(B,62-A,3
:End:Effvar XEffvar Y
End
:N+2-)N:Pxl-On(62,N:Goto 2
:Lbl 6
:Menu("GAGNE !","QUIT",5,"SAVE",4
:Lbl 4:SauveImage 0
:Lbl 5:EffListe LA,LB,LC:AxesAff:ZStandard:EffEcr:Disp (N-1)/2
Persalteas le 08/01/2011 à 08:53
je vais l'essayer.
qu'est ce qu'elle a de mieux que la précédente, selon toi?
metallica le 09/01/2011 à 11:59
J'avais pas vu un truc mais à la fin dès que t'écris:
Code
:EffListe LA:EffListe LB:EffListe LC

Tu peux remplacer par:
Code
EffListe LA,LB,LC
ld le 10/01/2011 à 10:45
Aïe !!! Une erreur ! ahh.gif
B=1)+2(A=1)+3(B=93)+4(A=61
:Rép(Rép=/=0)+L(Rép=0-)L
Ne fonctionne pas non plus ! angry.gif
Elle génère des erreurs lorsque A et B=1...
Ne l'utilisée pas ! extraterre.gif

Utilisez pour le moment :
:If A=1:2-)L
:If A=61:4-)L
:If B=1:1-)L
:If B=93:3-)L

Désolé, faudra faire avec... cry.gif
f/x=x² le 10/01/2011 à 17:06
LA,LB et LC c'est L1,L2 et L3?
ld le 10/01/2011 à 17:16
Oui, tu peut les remplacer par çà...
Si tu veut faire comme moi, c'est le petit "l" dans le catalogue
puis la lettre a, b ou c... happy.gif

PS: Merci a Métalica. Çà fonctionne ! happy.gif
f/x=x² le 10/01/2011 à 17:23
merci.Ca marche! cupsmiley.gif
Mais il y a quand même des îlots... Or, tu as dit qu'il n'y en avais pas. eyeonly.gif
C'est normal?
-Coco- le 10/01/2011 à 19:08
Hé j'en ai posté en moi aussi (un peu avant celui là)
Et je ne le retrouve pas !
Il est sorti du marché ?
Dans ma paranoïa habituelle je pourrai m'imaginer des trucs pas cool mais je ne retrouve pas le programme Algorithme générateur de labyrinthes. Par -Coco-, et à la place, je vois Algorithme de génération de labyrinthes. Par l.davin. (le premier)
Je trouverais ça un peu louche...
Persalteas le 10/01/2011 à 21:43
RAS pour moi.
ld le 13/01/2011 à 17:20
Non ! f/x=x², ce n'est pas normal, il fonctionne très bien...
Et oui excuse moi je suis pas d'humeur... maxiangry.gif
Ce nase de lieutenant vient de me faire glander 3h dehors pour rien et je viens juste de rentrer au casernement... Je suis "out of order", pas le temps de t'aider... angry.gif
rohirim le 13/01/2011 à 21:03
bonjour a tous, j'ai une erreur syntaxe a
Code
:0-)Xmin:0-)Ymin:94-)Xmax:62-)Ymax

Moi je l'ai ecris
Code
:0-)Xmin(:0-)Ymin(:94-)Xmax(:62-)Ymax(
car je n'ai pas trouvé les Xmin Ymin etc
linkakro le 13/01/2011 à 21:12
Va dans le menu var>fenêtre pour Xmin etc.
raboulave le 13/01/2011 à 22:18
Salut I.davin et les autres !
Merci pour ce programme intéressant d'un point de vue programmation, c'est vrai qu'il est très rapide en plus karate.gif
Cependant j'ai un petit problème ( je crois que pour toutes les fois où j'ai recopié un programme à la main, j'ai toujours eu au moins UNE erreur ^^ ) : J'ai une DIM invalide.
J'explique : je lance le prgm, je vais sur NEW, j'attends une bonne minute ( je ne sais pas en combien de temps il se génère mais j'espère qu'une minute entière est suffisant ^^ ). Ensuite, je fais ON pour quitter, je lance le prog et je vais sur PLAY. Là, j'ai une DIM invalide dès le premier If:non( et l'erreur pointe le premier L du pxl-Test.
Peut-être cela vient-il de moi crazy.gif
rohirim le 13/01/2011 à 22:27
et aussi sur:
Code
:If non(pxl-Test(A+LA(L),B+LA(L+1:Then

sur le : a la fin devant Then
rohirim le 13/01/2011 à 22:31
jai rajouter une parenthese et maintnant:
Code
:If non(pxl-Test(A+LA(L[b])[/b],B+LA(L+1:Then

Sur la parenthese de (A+LA(L)<-
rohirim le 13/01/2011 à 22:32
desoler du triple post mais ou trouve t-on les cables pour brancher les calculatrices a un ordinateur svp sa ira plus vite glasses.gif