Forum

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

[Générateur de forêt]+Sauvegarde+Fonctions rajoutées

cam! le 30/07/2011 à 13:50
Voici une nouvelle version de mon générateur de forêt , nettemement améliorée, comme me l'avais conseillé de faire linkakro. winkle.gif
On peut sauvegarder en quittant, couper des arbres, et il y a un

curseur.
Par rapport à ma première version, on peut dire que c'est une belle

avancée.

Code

EffEcr
4->S:4->T
Menu("QUE FAIRE?","NEW",0,"CHARGER",1
Lbl 0
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAX
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAY
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAT
For(L,1,20
entAléat(1,16->X
X->lAX(L)
entAléat(2,8->Y
Y->lAY(L)
entAléat(1,2->A
A->lAT(L):End
Lbl 1
For(L,1,20
lAX(L)->X
lAY(L)->Y
lAT(L)->A
If A=1
Output(Y-1,X,"O
If A=2
Output(Y-1,X,"Q
If A!=0
Output(Y,X,"I
End
While 1
Output(T,S,"+
codeTouche->K
If K=24 et S>1
Then
Output(T,S," "
S-1->S:Goto 1
End
If K=26 et S<16
Then
Output(T,S," "
S+1->S:Goto 1
End
If K=25 et T>1
Then
Output(Output(T,S," "
T-1->T:Goto 1
End
If K=34 et T<8
Then
Output(T,S," "
T+1->T:Goto 1
End
If K=105:Then
For(L,1,20
If S=lAX(L) et lAT(L)!=0 et T=lAY(L):Then
0->lAT(L)
EffEcr:Goto 1
End:End:End
End


Amusez vous bien!!! bigmouth.gif
calcugeek le 31/07/2011 à 16:07
Je n'ai pas testé ton prog mais je peux tout de suite te donner quelques améliorations simples et efficaces

Code

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAX
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAY
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAT


devient :

:20
:rep->dim LAX
:rep->dim LAY
:rep->dim LAT
:remplir(0,LAX
:remplir(0,LAY
:remplir(0,LAT


Ce qui nous fait tout de même une économie de 97 octets bigmouth.gif bigmouth.gif bigmouth.gif

sinon il y a
Code

If A=1
peut s'écrire
If A

If A!=0
devient
If non(A!



Ah et
Citation

Output(Output(T,S," "


Il n'y aurait pas un output en trop? godgrace.gif godgrace.gif godgrace.gif




Citation

If K=24 et S>1
Then
Output(T,S," "
S-1->S:Goto 1
End
If K=26 et S<16
Then
Output(T,S," "
S+1->S:Goto 1
End
If K=25 et T>1
Then
Output(Output(T,S," "
T-1->T:Goto 1
End
If K=34 et T<8
Then
Output(T,S," "
T+1->T:Goto 1
End


Peut s'écrire
Code

S-(K=24 et S>1)+(K=26 et S<16->S
T-(K=25 et T>1)+(K=34 et T<8->T
If K [différent de]0
Output(T,S," "
goto1
linkakro le 02/08/2011 à 00:09
J'ai eu du mal à comprendre la fonction de déforestation par appui sur "entrer" et l'intérêt de rafraîchir complètement l'écran.
C'eût été bien de préciser que la nouveauté est la déforestation.

calcugeek :
Ton "goto 1" est faux car il ne doit être executé que si les touches flèches ou entrer sont pressées.
Un deuxième inconvénient est lié à cette façon de condenser les déplacements : si on appuie sur une touche innutile, cela provoque de nouveau le chargement de l'écran.
Ces problèmes se résolvent avec d'autres éléments du programme.


Autre hic : si deux arbres ont été générés pile au même endroit, la fonction de déforestation n'efface que le prmier et cela peut surprendre.
De plus le Goto qui provoque ça est à l'intérieur d'une boucle.


Code
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAX
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAY
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}->lAT

devient :

20
rep->dim LAX
rep->dim LAY
rep->dim LAT
remplir(0,LAX
remplir(0,LAY
remplir(0,LAT

voire même

20->dim(lAX
Remplir(0,lAX
lAX->lAY
lAX->lAT
Et on peut même utiliser les listes de base : plus facile à saisir et nécessitant moins de code. (cf les codes complets)


Enfin :
Code
EffEcr
4->S:4->T
Menu("QUE FAIRE?","NEW",0,"CHARGER",1
Lbl 0
ClrList L1,L2,L3
For(L,1,20
entAléat(1,16->L1(L)
entAléat(2,8->L2(L)
entAléat(1,2->L3(L)
End

Lbl 1
For(L,1,20
L1(L)->X
L2(L)->Y
L3(L)->A
If A
Output(Y,X,"I
If A=1
Output(Y-1,X,"O
If A=2
Output(Y-1,X,"Q
End

Output(T,S,"+
Repeat somme(K={24,25,26,34,105       
codeTouche->K
End
Output(T,S," "
min(16,max(1,S-(K=24)+(K=26->S
min(8,max(1,T-(K=25)+(K=34->T

If 105=K
Then
For(L,1,20
If S=L1(L) et T=L2(L) et L3(L
Then
0->L3(L)
EffEcr
End:End:End
Goto 1


Cette autre grosse modif évite de rafraîchir l'écran systématiquement. (plus beau mais plus lourd)
J'ai tenté de l'éviter aussi dans la fonction de déforestation.
J'ai même tenté de tenir compte des plans.
J'ai abandonné ces deux dernières idées car c'était bien compliqué.

Néanmoins j'ai conservé la façon d'afficher les arbres pour simuler les mêmes enchevêtrement que le prog original.

Code
EffEcr
4->S:4->T
Menu("QUE FAIRE?","NEW",0,"CHARGER",1
Lbl 0
ClrList L1,L2,L3
{8,16}->dim([A]
For(L,1,20
entAléat(1,16->L1(L
entAléat(2,8->L2(L
entAléat(1,2->L3(L
End

Lbl 1
Remplir(0,[A]
For(L,1,20
L1(L)->X
L2(L)->Y
L3(L)->A
If A
3->[A](Y,X
If A
Output(Y,X,"I
A->[A](Y-1,X
If A=1
Output(Y-1,X,"O
If A=2
Output(Y-1,X,"Q
End

Lbl 2
Output(T,S,"+
Repeat somme(K={24,25,26,34,105       
codeTouche->K
End
Output(T,S," "
[A](T,S->A
If A=1
Output(T,S,"O
If A=2
Output(T,S,"Q
If A=3
Output(T,S,"I
min(16,max(1,S-(K=24)+(K=26->S
min(8,max(1,T-(K=25)+(K=34->T

If 105=K and A
Then
For(L,1,20
If S=L1(L) and T=L2(L) and L3(L
0->L3(L
End:End
If Rép
Goto 2
ClrHome
Goto 1
tonio 2 le 03/11/2011 à 15:15
Alors j'ai eu beaucoup de mal à comprendre toutes tes histoires de matrices, de min, de max, de x, de Y, etc ... et même maintenant c'est pas encore très clair mais je commence doucement à toucher du doigt ses notions laugh.gif
Simplement quand j'execute ton programme, parfois oui parfois non, il reste un ou deux arbres incoupables : quand je passe le + sur leur tronc, ces mêmes troncs disparaissent alors je suis très content que le tronc est disparu mais s'il y'a pas de tonc je peux pas faire disparaitre le " O" ou le "Q". frozen.gif
Si t'avais une solution miracle linkakro ... eyeonly.gif
cam! le 04/11/2011 à 19:30
Le programme n'a pas ete fait et reflechis par linkakro mais par moi déjà.
Ensuite linkakro ne fait que de corriger mais aussi critiquer les programmes. Sur ce , voilà.jespere que linkakro le sauveur taideras! Moi j'ai asser donne lol
tonio 2 le 04/11/2011 à 21:54
si ca peut te faire plaisir :p
mais la CORRECTION DE TON PROGRAMME FAIT PAR LINKA.... offrait plus d'avantage donc j'ai plutôt testé cette corection winkle.gif mais ne tkt pas le tien m'a également beaucoup interessé et je te suis grandement reconnaissant de l'avoir crée ;p
The K le 04/11/2011 à 23:29
Ouh ça c'était envoyé tonio winkle.gif

Allez euh cam une question ^^
A quoi peut bien servir ton programme ? Tu nous prépares un rpg sylvestre ? (remarque ça pourrait être sympa moi j'dis winkle.gif )
tonio 2 le 05/11/2011 à 11:38
nan mais sérieusement je trouvais que l'idée était bonne, on peut imaginer que dès qu'on coupe un arbre on gagne un " bois " et qu'après on aille le vendre pour tant de sou ou que ca nous permette de créer une arme ou n'importe quoi ... Quelques idées commencent à fleurir en moi laugh.gif
The K le 05/11/2011 à 13:45
j'aurais plutot dit "quelques idées commencent a POUSSER en moi".

Non ? godgrace.gif laugh.gif clown.gif
tonio 2 le 06/11/2011 à 21:02
non fleurir c'est plus joli :p
et ca y est j'ai TOUT compris laugh.gif en fait, c'est quand je supprime un arbre alors qu'un autre arbre est caché en dessous, eh bien l'arbre caché en dessous ne peut plus être coupé ... c'est triste mais c'est ainsi, la j'ai plus ma calto mais dès que je la récupère, je trouverais une solution, ayez foi en moi !!!!!!! laugh.gif
The K le 06/11/2011 à 23:17
Il y a des arbres cachés ... ? Uhh, va falloir que je recopie le programme pour y comprendre quelque chose moi !
Bon allez dès que je reçois la ti-84 pocket je regarde comment marche ti connect, je mets quelques petits (ou gros !) programmes, et après je regarde ça je suis intrigué winkle.gif
cam! le 07/11/2011 à 00:34
Oui il y a des arbres "caches" xD
En fait pendant la generation il n'y a pas de condition pour savoir si
La place est déjà prise!
Voilà. Aufait ne vous prenez pas la tete pour ce programme sans importance.
Mais tonio tu m'a ptete donne une idee pour un rpg!
The K le 07/11/2011 à 17:53
Oh non perso je me prend pas la teête j'aime résoudre des problèmes sans (à priori) importance laugh.gif

(et en l'occurence ça m'aide à comprendre le basic que de recopier divers programmes aussi cupsmiley.gif )
tonio 2 le 07/11/2011 à 22:40
En fait avec un pote on voudrait faire un gros bon rpg sur 82, alors on a qq idées mais on en est au tout début et ca va surement nous prendre qq mois
En tout cas, content de servir à qqchose laugh.gif
Bon sinon j'ai trouvé une petite astuce qui fait perdre de son coté aléatoire un ton programme mais qui lui évite les bugs
Je remplace For(L,1,20 par For(L,1,16 et EntAleat(1,16 par L
Je vais encore y reflechir pour voir si on peut pas faire mieux mais je crois qu'on est arrivé à un bon compromis laugh.gif