PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2019 12:31

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 
Auteur Message
 Sujet du message: Mini Pure_Golo
MessagePosté: Mar 06/Mar/2018 12:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 1973
j'ai hesité a poster dans le topic de Falsam a propos des Formulations diverses ...

mais comme il ne veux pas d'application complete ....
bon voici mini_Pure_golo

il s'agit ici de la procedure de base simplifié de mon Pure_golo (interpreteur )
là on n'applique QUE la fonction de dessin

la procedure Tortue
Code:
Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)

prends comme parametre le point X,Y de depart du dessin , un angle, la distance a parcourir , et le Statut qui determine
si on doit dessiner ou pas .....
si on ne dessine pas => Statut=#false , seul le deplacement est pris en compte ... :)

plus simple, tu meurts ! :)

dans l'exemple ci dessous je fait effectuer un triangle (3 segment de 120 degres ) que je repete 12 fois en tournant encore de 30 degres
d'ou la presence de 2 boucles ....


l'interet de cette fonction c'est surtout
Code:
   x=X_depart.f+Cos(Angle*#PI/180)* Distance_a_parcourir.f
      y=Y_depart.f+Sin(Angle*#PI/180)* Distance_a_parcourir.f

qui va calculer le point d'arrivé , en prenant le point de depart, la distance, et l'angle en compte !!
autrement dit , s'il n'y a qu'une seule fonction a connaitre, c'est celle là , car elle permet
l'utilisation de deplacement, collisions, en jeux video 2D et 3D ....

ou de connaitre le point d'arrivé d'un jet de pierre par exemple en connaissant le point de depart et l'angle :)

le point de depart peut concerner un personnage , un endroit de l'ecran , ou de l'univers 3D ....
la fonction va calculer le point d'arrivé en fonction de la distance ... :)

ici je m'en sert pour dessiner pendant un trajet , mais on peut s'en servir pour faire effectuer un trajet a un personnage
ou un sprite , etc .....
on est pas obligé de laisser une trace du deplacement , comme je le fais ici :)



voici le code :

Code:
;***********************************************
;Titre  :mini_golo
;Auteur  : Zorro
;Date  :06/03/2018
;Heure  :12:30:17
;Version Purebasic :  PureBasic 5.62 (Windows - x86)
;Version de l'editeur :EPB V2.68
; Libairies necessaire : Aucune
;***********************************************

; le but c'est d'utiliser la procedure Tortue pour faire des dessins
; on lui donne le point X,Y de depart , la distance a parcourir, et l'angle qu'elle doit prendre pour dessiner

InitSprite()
InitKeyboard()

Declare tortue(x_depart.f,y_depart.f,angle.f,distance_a_parcourir.f, Statut)

Structure tortu
      x.f
      y.f
EndStructure
Global tortu.tortu

OpenWindow(1,0,0,400,400,"mini PureGolo",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(1),0,0,400,400,1,1,1)

X_depart.f=250 ; coordonée X de depart
Y_depart.f=150 ; ; coordonée Y de depart
Distance_a_parcourir.f =100 ; distance a parcourir a partir des coordonées de depart
Statut=#true ; Crayon Baissé


; *************************************** exemple d'utilisation : *****************************************************************
StartDrawing(ScreenOutput()) 
      circle( X_depart.f,Y_depart.f,10,rgb(255,0,0)) ; point de depart en rouge ...
      ;
      For z=1 to 12
            For i =1 to 3 ; on va faire  3 segments de droite
                  ; ******  a chaque boucle on tourne notre tortue de  120  degres !!  *********
                  ; ce qui donne un triangle ....
                  Angle.f=Angle.f+120
                  Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
                  X_depart.f=tortu\x ; actualise le point de depart de la tortue
                  Y_depart.f=tortu\y ; actualise le point de depart de la tortue
                  ; **************************
            Next i
            Angle.f=Angle.f+30 ; puis on tourne encore de 30 degres et on recommence 12 fois ce qui fait 12 triangles qui tournent de 30 degres :o)
      Next z
StopDrawing()
; **************************************************************************************************************************


Repeat
      ExamineKeyboard()
      event=WindowEvent()
      
      FlipBuffers()
      Delay(2)
Until KeyboardPushed(#PB_Key_All ) Or  event=#PB_Event_CloseWindow

End



Procedure Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
      ; by Dobro
      x=X_depart.f+Cos(Angle*#PI/180)* Distance_a_parcourir.f
      y=Y_depart.f+Sin(Angle*#PI/180)* Distance_a_parcourir.f
      if Statut=#true ; si crayon baissé alors :
            LineXY(X_depart.f,Y_depart.f,x,y) ; on trace le segment de droite
      Endif ; sinon seulement la position est modifié (deplacement sans dessiner )
      X_depart.f=x
      Y_depart.f=y
      tortu\x=X_depart.f
      tortu\y=Y_depart.f
EndProcedure





_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mini Pure_Golo
MessagePosté: Mar 06/Mar/2018 15:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 1973
nouvelle exemple

avec un carré ;

on dessine un carré , on pivote la tortue de 10 degres
et on recommence 36 fois :)

Code:
;***********************************************
;Titre  :mini_golo
;Auteur  : Zorro
;Date  :06/03/2018
;Heure  :12:30:17
;Version Purebasic :  PureBasic 5.62 (Windows - x86)
;Version de l'editeur :EPB V2.68
; Libairies necessaire : Aucune
;***********************************************

; le but c'est d'utiliser la procedure Tortue pour faire des dessins
; on lui donne le point X,Y de depart , la distance a parcourir, et l'angle qu'elle doit prendre pour dessiner

InitSprite()
InitKeyboard()

Declare tortue(x_depart.f,y_depart.f,angle.f,distance_a_parcourir.f, Statut)

Structure tortu
      x.f
      y.f
EndStructure
Global tortu.tortu

OpenWindow(1,0,0,400,400,"mini PureGolo",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(1),0,0,400,400,1,1,1)

X_depart.f=250 ; coordonée X de depart
Y_depart.f=150 ; ; coordonée Y de depart
Distance_a_parcourir.f =100 ; distance a parcourir a partir des coordonées de depart
Statut=#true ; Crayon Baissé


; *************************************** exemple d'utilisation : *****************************************************************
StartDrawing(ScreenOutput())
      circle( X_depart.f,Y_depart.f,10,rgb(255,0,0)) ; point de depart en rouge ...
      ;
      For z=1 to 36
            For i =1 to 4 ; on va faire  4 segments de droite
                  ; ******  a chaque boucle on tourne notre tortue de  90 degres !!  *********
                  ; ce qui donne un carre ....
                  Angle.f=Angle.f+90
                  Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
                  X_depart.f=tortu\x ; actualise le point de depart de la tortue
                  Y_depart.f=tortu\y ; actualise le point de depart de la tortue
                  ; **************************
            Next i
            Angle.f=Angle.f+10 ; puis on tourne encore de 10 degres et on recommence 36 fois ce qui fait 36 carrés qui tournent de 10 degres :o)
      Next z
StopDrawing()
; **************************************************************************************************************************


Repeat
      ExamineKeyboard()
      event=WindowEvent()
     
      FlipBuffers()
      Delay(2)
Until KeyboardPushed(#PB_Key_All ) Or  event=#PB_Event_CloseWindow

End



Procedure Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
      ; by Dobro
      
      x=X_depart.f+Cos(Angle*#PI/180)* Distance_a_parcourir.f
      y=Y_depart.f+Sin(Angle*#PI/180)* Distance_a_parcourir.f
      if Statut=#true ; si crayon baissé alors :
            LineXY(X_depart.f,Y_depart.f,x,y) ; on trace le segment de droite
      Endif ; sinon seulement la position est modifié (deplacement sans dessiner )
      X_depart.f=x
      Y_depart.f=y
      tortu\x=X_depart.f
      tortu\y=Y_depart.f
EndProcedure









autre exemple en partant d'une forme de base , une sorte d'escalier
on repete ce shemat en pivotant de 10 degres 36 fois ça donne ceci :)

Code:
;***********************************************
;Titre  :mini_golo
;Auteur  : Zorro
;Date  :06/03/2018
;Heure  :12:30:17
;Version Purebasic :  PureBasic 5.62 (Windows - x86)
;Version de l'editeur :EPB V2.68
; Libairies necessaire : Aucune
;***********************************************

; le but c'est d'utiliser la procedure Tortue pour faire des dessins
; on lui donne le point X,Y de depart , la distance a parcourir, et l'angle qu'elle doit prendre pour dessiner

InitSprite()
InitKeyboard()

Declare tortue(x_depart.f,y_depart.f,angle.f,distance_a_parcourir.f, Statut)

Structure tortu
      x.f
      y.f
EndStructure
Global tortu.tortu

OpenWindow(1,0,0,400,400,"mini PureGolo",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(1),0,0,400,400,1,1,1)

X_depart.f=200 ; coordonée X de depart
Y_depart.f=200 ; ; coordonée Y de depart
Distance_a_parcourir.f =100 ; distance a parcourir a partir des coordonées de depart
Statut=#true ; Crayon Baissé


; *************************************** exemple d'utilisation : *****************************************************************
StartDrawing(ScreenOutput())
      circle( X_depart.f,Y_depart.f,10,rgb(255,0,0)) ; point de depart en rouge ...
      ;
      For z=1 to 36
            
            ;  *************** ceci est le shema de base a dessiner **********************
            ; une espece d'escalier .....
            Distance_a_parcourir.f=60
            Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
            X_depart.f=tortu\x ; actualise le point de depart de la tortue
            Y_depart.f=tortu\y ; actualise le point de depart de la tortue
            Angle.f=Angle.f+90
            Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
            X_depart.f=tortu\x ; actualise le point de depart de la tortue
            Y_depart.f=tortu\y ; actualise le point de depart de la tortue
            Angle.f=Angle.f-90
            Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
            X_depart.f=tortu\x ; actualise le point de depart de la tortue
            Y_depart.f=tortu\y ; actualise le point de depart de la tortue
            Angle.f=Angle.f+90
            Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
            ; **********************************************************************
            
            ; retour au centre
            X_depart.f=200 ; coordonée X de depart
            Y_depart.f=200 ; ; coordonée Y de depart
            ; pivo de la tortue de 10 degres
            Distance_a_parcourir.f=0
            Angle.f=Angle.f+10
            Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
            ; et on recommence
      Next z
StopDrawing()
; **************************************************************************************************************************


Repeat
      ExamineKeyboard()
      event=WindowEvent()
      
      FlipBuffers()
      Delay(2)
Until KeyboardPushed(#PB_Key_All ) Or  event=#PB_Event_CloseWindow

End



Procedure Tortue(X_depart.f,Y_depart.f,Angle.f,Distance_a_parcourir.f,Statut)
      ; by Dobro
      
      x=X_depart.f+Cos(Angle*#PI/180)* Distance_a_parcourir.f
      y=Y_depart.f+Sin(Angle*#PI/180)* Distance_a_parcourir.f
      if Statut=#true ; si crayon baissé alors :
            LineXY(X_depart.f,Y_depart.f,x,y) ; on trace le segment de droite
      Endif ; sinon seulement la position est modifié (deplacement sans dessiner )
      X_depart.f=x
      Y_depart.f=y
      tortu\x=X_depart.f
      tortu\y=Y_depart.f
EndProcedure






_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye