Forum

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

Générateur de forêt

cam! le 30/04/2011 à 00:29
Bonjour a tous! Voici un editeur de foret! Ca peut toujours servir.
Cree par un seconde ^^ premiere année de programmation.
Ps: je n'utilise jamais de then et de else.



Code

Effecran
Menu("","JOUER",A,"CREDITS",B,"QUITTER",C)
Lbl C:Stop
Lbl B
output(4,4,"Cam.2011"
For(L,1,200
End
Prgrm"FORET"
LblA
0->R
Menu("","petite foret",D,"grande foret",E
LblD:20->Z
LblE:40->Z
Repeat R=Z
EntAleatoire(1,16)->X
EntAleatoire(1,7)->Y
Output(Y,X,"0
Output(Y+1,X,"I
End
Akmdad le 30/04/2011 à 01:00
hahaha c'est sympa!!!

pour te mettre a l'epreuve, essaie de mettre ca en mode graphique, et fait en sorte qu'on ai d'autres choix ;p
Persalteas le 30/04/2011 à 08:34
C'est pas mal ouais, le code pourrait être encore simplifié et amélioré, pas grand chose, mais juste pour les retouches, ça me démange.

Code

Effecr
Lbl 0
Menu("","JOUER",A,"CREDITS",B,"QUITTER",C)
Lbl B
output(4,4,"Cam.2011"
For(Z,1,200:End
Goto 0
LblA
0->R
Menu("","PETITE FORET",D,"GRANDE FORET",E
Lbl E
20
Lbl D
Ans+20
Ans->Z
Repeat R=Z
entAleat(1,16->X
entAleat(1,7->Y
Output(Y,X,"0
Output(Y+1,X,"I
End
Lbl C


EDIT: ouais, non, en fait, ça change rien.
cam! le 30/04/2011 à 10:28
Merci pour vaux reponses. Ca fait plaisir, et ca donne envie de mettre une nouvelle version! +une explication (aux debutants) : pourquoi Entaleatoire(1,7)->Y alors que Y peut aller jusqu'a 8? On verra!


Code

Effecran
Menu("","JOUER",A,"CREDITS",B,"QUITTER",C)
Lbl C:Stop
Lbl B
output(4,4,"Cam.2011.V2"
For(L,1,200
End
Prgrm"FORET"
LblA
0->R
Menu("","petite foret",D,"grande foret",E,"TOUNDRA",F
LblD:20->Z
LblE:40->Z
Repeat R=Z
EntAleatoire(1,16)->X
EntAleatoire(1,7)->Y
EntAleatoire(1,3)->A
If A=1:Output (Y,X,"0
If A=2:Output(Y,X,"O
If A=3:Output(Y,X,"Q
Output(Y+1,X,"I          //Y+1=8! Or si Y+1=9,(avec justement Y=8), crash!//
End

LblF
Repeat R=40
EntAleatoire(1,16)->X
EntAleatoire(1,7)->Y
Output(Y,X,"Y
Output(Y+1,X,I
R+1->R
End
cam! le 30/04/2011 à 10:41
Je m'assurais de ne plus mettre 2 posts a la fois...
Nouveaux ajouts!
Combien d'arbres?
Retour au menu! Enfin!

Code

Lbl 0
Effecran
Menu("","JOUER",A,"CREDITS",B,"QUITTER",C)
Lbl C:Stop
Lbl B
output(4,4,"Cam.2011.V3"
For(L,1,200
End
Goto 0
LblA
0->R
Menu("","petite foret",D,"grande foret",E,"TOUNDRA",F
LblD:EntAleatoire(0,20)->Z
LblE:EntAleatoire(20,40)->Z

Repeat R=Z
EntAleatoire(1,16)->X
EntAleatoire(1,6)->Y
EntAleatoire(1,3)->A
If A=1:Output (Y,X,"0
If A=2:Output(Y,X,"O
If A=3:Output(Y,X,"Q
Output(Y+1,X,"I          //Y+1=7! Or si Y+1=8,(avec justement Y=7), problème d'affichage!//
End
Output(8,1,"arbres:"
Output(8,8,Z
Output(8,10,"Arbres
Pause
Goto 0

LblF
Repeat R=40
EntAleatoire(1,16)->X
EntAleatoire(1,7)->Y
Output(Y,X,"Y
Output(Y+1,X,I
R+1->R
End
Pause
Goto 0
linkakro le 01/05/2011 à 01:41
Deux erreurs se balladent : le nombre d'arbre toujours suppérieur à 20 et la boucle sans incrément.
J'ai aussi bidouillé des trucs pour réduire le code.
L'affichage de Z gâche tout.
Code
Lbl 0
Effecr
Menu("","JOUER",A,"CREDITS",B,"QUITTER",C)
Lbl B
output(4,4,"Cam.2011.V3"
For(L,1,200
End
Goto 0
Lbl A
1->B
0      //ne l'oubliez pas
Menu("","petite foret",D,"grande foret",E,"TOUNDRA",F
Lbl E:20:Lbl D
entAléat(Ans,20+Ans->Z
DelVar B
Lbl F
For(R,1,Z
EntAleatoire(1,16)->X
EntAleatoire(1,6)->Y
EntAleatoire(1,3)->A
If A=1:Output (Y,X,"0
If A=2:Output(Y,X,"O
If A=3:Output(Y,X,"Q
If B:Output(Y,X,"Y
Output(Y+1,X,"I
End
Output(8,1,"arbres:"
Output(8,8,Z
Pause
Goto 0
Lbl C
cam! le 01/05/2011 à 12:00
Merci et en fait une nouvelle V5 pendant que j'avais un peu de temps!
Ya du sol,winkle.gif

Code

Effecran
Lbl 0
Menu("","JOUER",A,"QUITTER",B
Lbl B : STOP
Lbl A
0->R
Menu("",MiniFORET",D'"GRANNDE FORET",E,"TOUNDRA",F
Lbl D : entAlet(20,40)->T : Goto 1
Lbl F : Goto 2
Lbl1
1->B
1->C
Repeat C=8
Repeat B=16
Output(C,B,".
B+1->B
End
C+1->C
1->B
End
Repeat R=T
EntAleat(1,16)->X
EntAleat(1,6)->Y
Output(Y,X."O
Output(Y+1,X,"I
R+1->R
End
Pause
Goto 0
Lbl2
(Recopier après (version V4).
-----
Cam!
-----
linkakro le 01/05/2011 à 14:06
Tu t'obstines à maintenir des trucs qui ont été déconseillées par deux personnes... Dommage.
Quant à moi j'avais fait 1 erreur.

Code
Lbl 0
EffEcr
output(4,4,"Cam.2011.V7"
Output(5,4,"AVEC LINKAKRO
For(L,1,200
End
Effecr
Menu("","JOUER",A,"QUITTER",C)
Lbl A

1->B
40->T
0      //ne l'oubliez pas
Menu("","MINI FORET",D,"GRANDE FORET",E,"TOUNDRA",F
Lbl E:20:Lbl D
entAléat(Ans,20+Ans->T
DelVar B
Lbl F

For(Y,1,8
For(X,1,16
Output(Y,X,".
End
End

For(R,1,T
EntAleatoire(1,16)->X
EntAleatoire(1,7)->Y
EntAleatoire(1,3)->A
Output (Y,X,"0
If B
Output(Y,X,"Y
Output(Y+1,X,"I
End
Pause

Goto 0
Lbl C
cam! le 02/05/2011 à 18:46
Nan man! Au contraire, ca me sert beaucoup! (Je rappelle
Que c'est ma toute premiere anne de programmation).

Par ailleur,pour le sol, bah la boucle j'ai GALERE a la faire!
Et toi, tu la fais en quoi, 2 lignes!
Eh bah je te dit merci et c'est bien d'aider.
Certes ce programme sert (a rien) mais c'est amusant de s'entrainer.
Par ailleurs, j'ai fais un curseur en forme de plus "+" mais je sais le deplacer,
Mais comment faire pour suprimer sa position d'avant sans effacer les arbres/sol ??
karate.gif
linkakro le 02/05/2011 à 21:58
Si tu te contentes d'écrire des points dans ton sillon, les arbres disparaîtront...
Il faudrait stocker les coordonnées des arbres MAIS c'est lourd.
Une des solutions est la matrice. C'est un tableau dont on bidouille chaque case en les sélectionnant sous la forme [A](Y,X). Mais attention à sa taille qui doit être définie à l'avance.

A chaque fois que tu crées un aléatoire, rempli la case de la matrice qui correspond à ces coordonnées.
Lorsque ton personnage quitte une case, verrifie si la case est remplie pour savoir s'il y a un arbre. Nous pouvons même utiliser plusieurs valeurs selon le type d'arbre que tu croises.

Au début :
Code
EffVar [A]
{8,16}->dim([A]   // la matrice est remplie de 0. Tu devras la remplir de 1.
Lors de la création de la forêt :
Code
entAléat(1,16)->X
entAléat(1,7)->Y
1+B->[A](Y,X)  // 1 pour un arbre normal et 2 pour la toundra
3->[A](Y+1,X)  // pour le tronc des arbres
Lors de tes déplacements :
Code
[A](Y,X)   // stocke la valeur de la case dans Answer (ça évite de l'écrire à chaque fois)
If Ans=1:Output(Y,X,"O
If Ans=2:Output(Y,X,"Y
If Ans=3:Output(Y,X,"I

Des fonctions sont valides à la fois pour les listes et les matrices. Regarde dans les menus idouanes(adéquats).
Notamment : Remplir(0,[A])

=====

J'espère que tu as compris tout ce que nous t'avons montré jusqu'à présent.
Notamment le For qui est incontournable et le coup des labels du menu.
Les restituer ailleurs serait un beau cadeau à me faire. bigmouth.gif

Edit : j'ai ajoûté des indications sur le lieu d'application de ces fragments de code.
Rowks le 08/05/2011 à 16:15
Merci Camille !
J'ai réussi à le faire

Ton voisin d'classe ^^'
cam! le 15/05/2011 à 20:17
Je suis en train de booser dessus! Je m'excuses, mais durant tout ce temps, et oui, j'etais bombe de
Travail! ...tient d'ailleurs je le suis toujours! ^^/
Je vais essayer d'en mettre une prochainement, en utilisant les matrices.
1 ou 2 jours d'attentes.