En attendant R3
Bertrand16-Aug-2007/9:40:07+2:00
Bonjour,

Il y a peu de temps je me suis remis à REBOL, après avoir expérimenté d'autres choses ici et là ...
... fan de LOGO, je me suis amusé à adapter une "tortue graphique" à REBOL (niveau débutant, que je suis toujours).

En voici un exemple, pour se distraire un peu ... en attendant REBOL3 !


REBOL []

;================================================
;  Tortue Rebol
;================================================

;--- variables

cap: -90
dernx: derny: nouvx: nouvy: 200
crayon: on
couleurcrayon: white
couleurfond: black

;--- fonctions de dessin style "tortue graphique"

origine: does [
    dernx: nouvx: 200
    derny: nouvy: 200
    cap: -90
]

avance: func [distance] [
    nouvx: dernx + (distance * cosine cap)
    nouvy: derny + (distance * sine cap)
    if crayon [
        append fen/effect/draw reduce [
            'pen couleurcrayon
            'line as-pair dernx derny  as-pair nouvx nouvy
        ]
        show fen
    ]  
    dernx: nouvx
    derny: nouvy
]

recule: func [distance] [avance - distance]

va: func [x y] [dernx: x derny: y]

droite: func [angle] [cap: cap + angle]

gauche: func [angle] [cap: cap - angle]

dessine: does [
    append fen/effect/draw reduce [
        'pen couleurcrayon
        'line as-pair dernx derny  as-pair nouvx nouvy
    ]
    show fen
    ]  
 
;--- programme de démonstration : 
; (dessin récursif d'un arbre à l'aide des fonction définies ci-dessus)

demo: does [
    crayon: off
    recule 150
    crayon: on
    fougere 400
    ]

fougere: func [taille][
    if taille < 5 [exit]
    couleurcrayon: nuance cap
    avance (taille / 20)
    gauche 80
    fougere (taille * 0,3)
    droite 82
    avance (taille / 20)
    droite 80
    fougere (taille * 0,3)
    gauche 78
    fougere (taille * 0,9)
    gauche 2
    recule (taille / 20)
    gauche 2
    recule (taille / 20)
]

nuance: function [angle][rouge vert][
    rouge: to-integer 220 * (1 + cosine (120 + angle))
    vert:  to-integer 220 * (1 + cosine (240 + angle))
    to-tuple reduce [rouge vert 0]
]

;--- création de la fenêtre pour la tortue 

fenetre: layout [
    fen: box 400x400 couleurfond effect [draw []] 
    do [demo]               ; c'est plus rapide comme ça !
    ;btn "démarrer" [demo]  ; attention ! c'est trés lent !!!
]


;--- boucle principale
view/title fenetre "Démonstration 'Tortue Graphique REBOL'"


Tout ça peut être amélioré bien sûr
Bertrand16-Aug-2007/10:50:55+2:00
Précisions (pour le script précédent):
- la procédure "dessine" ne sert à rien, elle est incluse dans "avance"
- si on dé-commente la ligne btn "démarrer" [demo] (il faut alors commenter la ligne précédente), on peut lancer le programme en appuyant sur le bouton "démarrer", mais c'est ... trés lent !

Je n'ai pas trouvé de solutions intermédiaires. Peut-être en envoyant à 'draw' des instructions 'line' par petits blocs ?

Je ne suis pas (encore) un 'Reboleur' confirmé
ZeBrain17-Aug-2007/18:20:28+2:00
C'est un bon début pour in interpréeur logo en Rebol tt ça

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2