Starfield

Programmation d'applications complexes
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Starfield

Message par bombseb »

Salut,

Comme je glande beaucoup au boulot, je m'occupe avec purebasic

aujourd'hui voici ce que j'ai fais :

Code : Tout sélectionner

If InitSprite () = 0
   MessageRequester ("Erreur", "Impossible d'initialiser directx", #PB_MessageRequester_Ok)
   End
EndIf

#WindowWidth    = 400 
#WindowHeight   = 300 

hWnd = OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Test") 
If hwnd = 0 
  MessageRequester ("Erreur", "Impossible d'ouvrir l'écran", #PB_MessageRequester_Ok) 
  End 
EndIf

If OpenWindowedScreen(hWnd, 0, 0, #WindowWidth, #WindowHeight, 1, 0, 0) = 0
  MessageRequester ("Erreur", "Impossible d'ouvrir l'écran", #PB_MessageRequester_Ok) 
  End 
EndIf


InitKeyboard ()
ClearScreen (0,0,0)
FlipBuffers ()
ClearScreen (0,0,0)


; ---------- INIT ----------
#nb = 500
Dim x2.f(#nb)
Dim y2.f(#nb)
Dim decalx.f (#nb)
Dim decaly.f (#nb)
Dim dist.f(#nb)
Dim col(#nb)

For i = 1 To #nb
  x2.f(i)   = (Random (256) - 128)
  If x2(i) = 0
    x2(i) = 1
  EndIf
  
  y2.f(i)   = (Random (256) - 128)
  If y2(i) = 0
    y2(i) = 1
  EndIf
  
  dist(i) = Random (20)
  If dist(i) = 0
    dist(i) = 1
  EndIf
  col (i) = Abs (x2(i)) + Abs (y2(i))
Next
; --------------------------


Repeat
  ExamineKeyboard ()
  ClearScreen(0,0,0)
  If StartDrawing (ScreenOutput ())
  
  
    rx2.f = rx2 * 0.99 + (Random (10) - 5) / 1000
    ry2.f = ry2 * 0.99 + (Random (10) - 5) / 1000
    
    rx.f = rx * 0.99 + rx2
    ry.f = ry * 0.99 + ry2
  
    For i = 1 To #nb
      
      x2.f(i) = rx * dist (i) / 3 + x2(i) * 1.005
      y2.f(i) = ry * dist (i) / 3 + y2(i) * 1.005
      
      x.f = (#WindowWidth / 2)  + x2(i) + decalx(i) * dist(i)
      y.f = (#WindowHeight / 2) + y2(i) + decaly(i) * dist(i)
  
      If x < 0 Or x > #WindowWidth Or y < 0 Or y > #WindowHeight
          x2.f(i)   = (Random (256) - 128)
          If x2(i) = 0
            x2(i) = 1
          EndIf
          
          y2.f(i)   = (Random (256) - 128)
          If y2(i) = 0
            y2(i) = 1
          EndIf
          
          dist.f(i) = Random (20)
          If dist(i) = 0
            dist(i) = 1
          EndIf
          
          decalx.f (i) = -rx * dist (i)
          decaly.f (i) = -ry * dist (i)
          
          
          col (i) = Abs (x2(i)) + Abs (y2(i))
          
      Else
      
          
        Plot (x,y,RGB (col(i),col(i),col(i)))
          
      EndIf
      
    Next
  EndIf  

  StopDrawing ()
  FlipBuffers ()
Until KeyboardPushed (#PB_Key_Escape)
dites moi ce que vous en pensez...
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

PS : je l'ai fais en mode fenetré parceque c'est plus discret ici :oops:
ce soir je le passerais en plein écran
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

bon finalement le voici modifié... pour le mettre en plein écran il y a juste qq lignes à décommenter au début du programme :

Code : Tout sélectionner

If InitSprite () = 0
   MessageRequester ("Erreur", "Impossible d'initialiser directx", #PB_MessageRequester_Ok)
   End
EndIf



; ---------- Mode fenetré ----------
#WindowWidth    = 400
#WindowHeight   = 300
hWnd = OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Test") 
If hwnd = 0 
  MessageRequester ("Erreur", "Impossible d'ouvrir l'écran", #PB_MessageRequester_Ok) 
  End 
EndIf

If OpenWindowedScreen(hWnd, 0, 0, #WindowWidth, #WindowHeight, 1, 0, 0) = 0
  MessageRequester ("Erreur", "Impossible d'ouvrir l'écran", #PB_MessageRequester_Ok) 
  End 
EndIf
; ----------------------------------

; ou

; ---------- Plein écran  ----------
; #WindowWidth    = 640 
; #WindowHeight   = 480 
; If OpenScreen(640, 480, 32, "Starfield") = 0
;    MessageRequester ("Erreur", "Impossible d'ouvrir l'écran", #PB_MessageRequester_Ok) 
;    End 
; EndIf
; ----------------------------------




InitKeyboard ()
ClearScreen (0,0,0)
FlipBuffers ()
ClearScreen (0,0,0)


; ---------- INIT ----------
#nb = 500
Dim x2.f(#nb)
Dim y2.f(#nb)
Dim decalx.f (#nb)
Dim decaly.f (#nb)
Dim dist.f(#nb)
Dim col(#nb)

For i = 1 To #nb
  x2.f(i)   = (Random (256) - 128)
  If x2(i) = 0
    x2(i) = 1
  EndIf
  
  y2.f(i)   = (Random (256) - 128)
  If y2(i) = 0
    y2(i) = 1
  EndIf
  
  dist(i) = Random (20)
  If dist(i) = 0
    dist(i) = 1
  EndIf
  col (i) = Abs (x2(i)) + Abs (y2(i))
Next
; --------------------------


Repeat
  ExamineKeyboard ()
  ClearScreen(0,0,0)
  If StartDrawing (ScreenOutput ())
  
  
    rx2.f = rx2 * 0.99 + (Random (10) - 5) / 1000
    ry2.f = ry2 * 0.99 + (Random (10) - 5) / 1000
    
    rx.f = rx * 0.99 + rx2
    ry.f = ry * 0.99 + ry2
  
    For i = 1 To #nb
      
      x2.f(i) = rx * dist (i) / 3 + x2(i) * 1.005
      y2.f(i) = ry * dist (i) / 3 + y2(i) * 1.005
      
      x.f = (#WindowWidth / 2)  + x2(i) + decalx(i) * dist(i)
      y.f = (#WindowHeight / 2) + y2(i) + decaly(i) * dist(i)
  
      If x < 0 Or x > #WindowWidth - 1 Or y < 0 Or y > #WindowHeight - 1
          x2.f(i)   = (Random (256) - 128)
          If x2(i) = 0
            x2(i) = 1
          EndIf
          
          y2.f(i)   = (Random (256) - 128)
          If y2(i) = 0
            y2(i) = 1
          EndIf
          
          dist.f(i) = Random (20)
          If dist(i) = 0
            dist(i) = 1
          EndIf
          
          decalx.f (i) = -rx * dist (i)
          decaly.f (i) = -ry * dist (i)
          
          col (i) = Abs (x2(i)) + Abs (y2(i))
      Else
          
        Plot (x,y,RGB (col(i),col(i),col(i)))
          
      EndIf
    Next
    StopDrawing ()
  EndIf  
  
  FlipBuffers ()
Until KeyboardPushed (#PB_Key_Escape)
EDIT : bug du Stopdrawing corrigé
Dernière modification par bombseb le lun. 29/août/2005 17:12, modifié 3 fois.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

C'est joli
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Sympa, sauf ke chez moi y'a eu un gros crash... Le StopDrawing() ne devrait pas se trouver hors du if/endif...

Code : Tout sélectionner

if start
  ;dessin
  stop
endif
et pas

Code : Tout sélectionner

if start
  ;dessin
endif
stop
Dri :0:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Et moi j'ai un plantage ligne 114 :

Code : Tout sélectionner

Plot (x,y,RGB (col(i),col(i),col(i)))
; Plot() en dehors d'un StartDrawing()...
Alors qu j'ai déplacé le StopDrawing() comme Dri l'a précisé :wink:

Ce bug est dispo pour les deux modes : fenêtré/full.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

oh pardon j'avais pas fait gaffe à a !

je corrige tout de suite :oops:
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

c beau...
y en a qui on quand meme de la chance (
Comme je glande beaucoup au boulot, je m'occupe avec purebasic
)
juste une remarque
met un delay (50) car la cpu ets a 100 sinon
et aussi puije t'empreinter ton oeuvre pour un projet[/quote]
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

Code : Tout sélectionner

et aussi puije t'empreinter ton oeuvre pour un projet
hum oui d'accord... c'est quoi comme projet ? tu pourras me mettre dans la partie greetings ? avec un chti lien vers mon site ? (http://bombseb.free.fr) :oops:



ok pour le delay je vais voir ca
Dernière modification par bombseb le lun. 29/août/2005 17:41, modifié 1 fois.
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

je te citerai aisnssi que toutes les personne mayant aider garce a leur code (l'horloge un peu plus bas ) dans la prochaine aide (que je fait) il y aura la partie remerciment ....
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

ok c'est coool !!

sinon j'ai essayé avec un delay(50) mais ca saccade trop... j'en ai mis un à 10 ca passe...

tiens je vais essayer ton horloge
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

un delay(1) devrai largement suffire !! :D
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

un delay 1 ne sufit ap senfin pas chez moi car sa utilise encore 90 %de la ram
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

avec un delay(20) voir même delay(30) ca passe
Répondre