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 : 3370
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 : 3370
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 : 3767
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 : 2164
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.