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.

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

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
sinon il y a
Code
If A=1
peut s'écrire
If A
If A!=0
devient
If non(A!
Ah et
Il n'y aurait pas un output en trop?
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
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".
Si t'avais une solution miracle linkakro ...

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

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
