feux d'artifices

Programmation d'applications complexes
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

feux d'artifices

Message par graph100 »

Parce que les feux d'artifices du spider solitaire de XP m'ennuyaient :

note : Ce n'est pas encore le résultat que je voudrais, mais il est tard :lol:


Code : Tout sélectionner

InitSprite()
InitKeyboard()

OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)


Structure explo
	x.d
	y.d
	
	radius.d
	radius_max.d
	
	angle.d
	vit.d
	vity.d
	
	rebour.l
	compteur.l
	mem.l
	
	distance.d
	rayon_atteint.d
EndStructure

Structure feux
	x.d
	y.d
	
	angle.d
	vit.d
	
	rebour.l
	
	couleur.l
	
	nb_explosion.l
	Array explo.explo(1)
	
	rayon_max.l
	
	phase.l
	
	rebour_max.l
EndStructure


NewList fusee.feux()

For i = 0 To 0
	AddElement(fusee())
Next


Dim couleur.l(2)
couleur(0) = 0
couleur(1) = 1
couleur(2) = 2

nb_explo = 250
clear = 1

Repeat	
	event = WindowEvent()
	ExamineKeyboard()
	
	tpf = ElapsedMilliseconds() - t
	t = ElapsedMilliseconds()
	
	If KeyboardPushed(#PB_Key_Left)
		nb_explo - 10
		If nb_explo < 10
			nb_explo = 10
		EndIf
		
	EndIf
	If KeyboardPushed(#PB_Key_Right)
		nb_explo + 10
	EndIf
	
	If KeyboardPushed(#PB_Key_Up)
		AddElement(fusee())
	EndIf
	If KeyboardPushed(#PB_Key_Down)
		If LastElement(fusee())
			DeleteElement(fusee())
		EndIf
		
	EndIf
	
	If KeyboardReleased(#PB_Key_Space)
		clear = -clear
	EndIf
	
	
	If clear = 1
		ClearScreen(0)
	EndIf
	
	If StartDrawing(ScreenOutput())
		
		If tpf
			DrawText(0, 0, Str(1000 / tpf))
		EndIf
		
		DrawText(0, 20, "[Right/Left] nb_explo = " + Str(nb_explo))
		DrawText(0, 40, "[Up/Down]  nb_fusée = " + Str(ListSize(fusee())))
		DrawText(0, 80, "[Space] : Trainées")
		
		nb_cercle = 0
		
		ForEach fusee()
			With fusee()
				
				If \phase = 0
					\x = 400
					\y = 600
					
					\angle = (Random(40) - 20 + 270) * #PI / 180
					\vit = Random(5) + 7
					
					RandomizeArray(couleur())
					
					\couleur = (Random(50) + 200) << (8 * couleur(0)) + (Random(50) + 100) << (8 * couleur(1)) + (Random(50) + 0) << (8 * couleur(2))
					
					
					
					val.d = Random(600 / \vit / 10) + 2 * 600 / \vit / 3
					\rebour = Int(val)
					
					
					\nb_explosion = nb_explo
					Dim \explo(\nb_explosion)
					
					\rayon_max = Random(150) + 50
					
					\phase + 1
				ElseIf \phase = 1
					
					\x = \x + \vit * Cos(\angle)
					\y = \y + \vit * Sin(\angle)
					
					Line(\x, \y, -20 * Cos(\angle), -20 * Sin(\angle), \couleur)
					
					\rebour - 1
					
					If \rebour < 0 ; explosion
						
						\rebour_max = 0
						
						For i = 0 To \nb_explosion
							\explo(i)\x = \x
							\explo(i)\y = \y
							
							\explo(i)\angle = Random(360) * #PI / 180
							\explo(i)\vit = 0.6 * (Random(5) + 7)
							\explo(i)\vity = 0
							
							\explo(i)\radius = 0
							\explo(i)\radius_max = Random(3) + 4
							
							
							val.d = 2*Random(\rayon_max) / \explo(i)\vit
							\explo(i)\rebour = Int(val)
							\explo(i)\compteur = 0
							
							\explo(i)\rayon_atteint = Random(\rayon_max)
							\explo(i)\distance = 0
							
							If \rebour_max < \explo(i)\rebour
								\rebour_max = \explo(i)\rebour
							EndIf
							
						Next
						
						
						\phase + 1
					EndIf
				ElseIf \phase = 2
					ok = \nb_explosion
					
					For i = 0 To \nb_explosion
						If \explo(i)\compteur > \explo(i)\rebour
							ok - 1
						EndIf
						
						
						\explo(i)\compteur + 1
						
						If \explo(i)\distance < \explo(i)\rayon_atteint
							\explo(i)\x = \explo(i)\x + \explo(i)\vit * Cos(\explo(i)\angle)
							\explo(i)\y = \explo(i)\y + \explo(i)\vit * Sin(\explo(i)\angle) + \explo(i)\vity
							
							\explo(i)\distance + \explo(i)\vit
							
							If \explo(i)\compteur <= \explo(i)\rebour
								\explo(i)\radius = \explo(i)\radius_max * \explo(i)\compteur / \explo(i)\rebour
							EndIf
							
							\explo(i)\mem = \explo(i)\compteur
							
							coef.d = 1
						Else
							\explo(i)\x = \explo(i)\x + \explo(i)\vit * Cos(\explo(i)\angle) * 0.1
							\explo(i)\y = \explo(i)\y + \explo(i)\vit * Sin(\explo(i)\angle) * 0.1 + \explo(i)\vity
							coef.d = 1 - (\explo(i)\compteur - \explo(i)\mem) / (\rebour_max - \explo(i)\mem)
							If coef < 0 : coef = 0 : EndIf
						EndIf
						
						\explo(i)\vity + 0.05
						
						
						
						Circle(\explo(i)\x, \explo(i)\y, \explo(i)\radius, RGB(Red(\couleur) * coef, Green(\couleur) * coef, Blue(\couleur) * coef))
						nb_cercle + 1
					Next
					
					If ok <= 0
						\phase + 1
					EndIf
				Else
					\phase = 0
				EndIf
				
			EndWith
		Next
		
		DrawText(0, 60, "nb_cercle = " + Str(nb_cercle))
		
		StopDrawing()
	EndIf
	
	
	FlipBuffers()
	
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)

End

_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: feux d'artifices

Message par SPH »

Ouai, ca le fait pas mal 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: feux d'artifices

Message par G-Rom »

sympa, la physique est "chelou" quand meme , pompe la partie particle dispo dans se code : http://www.purebasic.fr/french/viewtopi ... =particles
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: feux d'artifices

Message par Ar-S »

sympa en effet, par contre les trainées ne disparaissent pas (encore) ici.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: feux d'artifices

Message par venom »

oui un belle effet, (je ne serais faire mieux) :P







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Eric
Messages : 79
Inscription : dim. 08/juil./2007 21:38
Localisation : Nord
Contact :

Re: feux d'artifices

Message par Eric »

Bonjour à tous,

c'est du plus belle effet.

Est-ce possible, que cela soit sous forme de procédures ou de Lib ?
cela permettrais d'intégrés les effets dans un autre programme.

et merci pour le partage.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: feux d'artifices

Message par graph100 »

G-Rom a écrit :sympa, la physique est "chelou" quand meme
Normale, y en a pas :mrgreen: j'ai codé ça en 1h à minuit passé, mais effectivement, je n'ai pas vraiment réfléchi à comment fonctionne un feux d'artifice avant...
LittleBigman a à mon avis une démarche plus propre... Je retoucherai peut être ça à l'occasion.

Pour ceusse qui voudrait réutiliser le code, allez-y, si je ne veux pas qu'il soit modifié ou utilisé, je ne le poste pas :roll:

Les trainées ne sont duent qu'à la désactivation de l'effacement de l'écran, donc en fait c'est pas géré, c'étais juste joli :lol:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: feux d'artifices

Message par Ar-S »

En tout cas c'est une approche simple et sympa :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: feux d'artifices

Message par Micoute »

Ar-S a écrit :En tout cas c'est une approche simple et sympa :)
Je plussoie !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre