Page 1 sur 1

Mini Pure_Golo

Publié : mar. 06/mars/2018 12:43
par Zorro
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 : Tout sélectionner

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 : Tout sélectionner

	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 : Tout sélectionner

;***********************************************
;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





Re: Mini Pure_Golo

Publié : mar. 06/mars/2018 15:53
par Zorro
nouvelle exemple

avec un carré ;

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

Code : Tout sélectionner

 ;***********************************************
;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 : Tout sélectionner

;***********************************************
;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