Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
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...
LES LABYRINTHES SONT "PARFAITS" SELON LA DEFINITION MATHEMATHIQUE !!!
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 !!!
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"
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:
"1:Quitter",touche "Entrer","FIN !" dans le prgm Labygénérator.
REMARQUE:
--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.
Sangohan38ld le 13/12/2010 à 09:48
la vertion 4.2 du Labygénérateur ! 770 octets...
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.
(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
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 !
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 !
J'aurais juré tout l'inverse ! Mais je veut bien te croire,
j'écrirait çà et je te dirait quoi...
Comme quoi on en apprend tout les jours et que ce forum n'est pas
qu’utile aux débutants !
PS: A tu eu le temps de le tester ? Perso il claque !

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.
Sangohan38ld le 13/12/2010 à 12:52
Je vais peut'être passer pour un con, mais qu'entend tu par "83p" ?

ld le 13/12/2010 à 17:20
AAARRGGG !!! Horreur !
J'ai demander confirmation a un amis et tu semble avoir bien raison !
Les "Then Else End" dans mon prgm le ralentissant. Fichtre !
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 !
Le probleme, je n'y parvient pas ! Alors que la vitesse est primordial dans ce genre prgm...
HELP !!!

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 !!!!
Et méchamment rapide !
Des labyrinthes Plus-Que-Parfaits,prgm plus léger
et des améliorations déconcertantes !!!
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.

ld le 29/12/2010 à 15:27
Punaise ! C'est vrai, je ne connaisse pas !
Tank You So Much !

L.Davin...
PS: Tu le trouve comment ce prgm ?
Quelqu'un sur le forum a poster un labyrinthe 3D, je ne l'ai pas encore
essayer mais çà me laisse perplexe...
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 !!!

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 fairemetallica 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

ld le 03/01/2011 à 10:52
OUAHH !! C'est génial, toutes c'est petites astuces Metallica pour
économiser des octets !
Je kiffe grave ! Va y ! Déchire toi, balance en plein !
Çà fait gagner de la place et de la vitesse au prgm !
Merci aussi a persalteas pour cet quelques modifications, je vais l'ais
essayer sans attendre et je vous dirais quoi !
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)...
Vérifie si tu n'a pas fait d'erreur ! Quel plaie ce recopiage !

Et oui il n'y a pas de "et" entre les Pxl-Test...
Pour info j'ai déjà écrit la version 4.5 !
je prendrait en compte vos modifications et la publirée bientôt !
Merci a tous pour votre soutient !

ld le 03/01/2011 à 13:59
Çà y est j'ai tester vos propositions et toutes fonctionnent !

C'est officiel elles seront intégrées à la version 4.5 du prgm !
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...
Merki !

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...
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...
Mais qu'entend tu par "chemin coupé au milieu de l'écran" ???
PS: Merci Metalica !

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 !

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...).

ld le 06/01/2011 à 13:09
4.5 ! La version musclée du Labygénérateur !

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.
Sangohan38metallica 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

B=1)+3(B=93-)L
Est faux si L=0
Je propose donc :

B=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 !

ld le 07/01/2011 à 09:15
4.6 ! La version musclée du Labygénérateur !
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:
ld le 10/01/2011 à 10:45
Aïe !!! Une erreur !
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 !
Elle génère des erreurs lorsque A et B=1...
Ne l'utilisée pas !
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...

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...
PS: Merci a Métalica. Çà fonctionne !

f/x=x² le 10/01/2011 à 17:23
merci.Ca marche!
Mais il y a quand même des îlots... Or, tu as dit qu'il n'y en avais pas.
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...
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...

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
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

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

Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.