Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Ven 10 Déc 2010, 9: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.
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Ven 10 Déc 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.
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Lun 13 Déc 2010, 9: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
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Lun 13 Déc 2010, 10:16
Citer
...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.
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Lun 13 Déc 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 !
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Lun 13 Déc 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...
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 13 Déc 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).
---------------------- 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)
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Mer 29 Déc 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 !!!
Autorisation : Membre
Nb de messages : 108
Inscrit le : Lun 28 Jui 2010, 11:14
Posté le : Mer 29 Déc 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
Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Jeu 30 Déc 2010, 9: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.
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Lun 03 Jan 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 !
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Lun 03 Jan 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...
Autorisation : Membre
Nb de messages : 108
Inscrit le : Lun 28 Jui 2010, 11:14
Posté le : Mar 04 Jan 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:
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Mer 05 Jan 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" ???
Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mer 05 Jan 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.
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Jeu 06 Jan 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...).
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Lun 10 Jan 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
Autorisation : Membre
Nb de messages : 149
Inscrit le : Sam 28 Nov 2009, 16:09
Posté le : Lun 10 Jan 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...
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Jeu 13 Jan 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...
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 13 Jan 2011, 21:12
Va dans le menu var>fenêtre pour Xmin etc.
---------------------- 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)
Autorisation : Membre
Nb de messages : 57
Inscrit le : Jeu 08 Oct 2009, 20:56
Posté le : Jeu 13 Jan 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