Bigboules (demo oldschool)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
crisot
Messages : 98
Inscription : lun. 30/août/2004 21:03

Bigboules (demo oldschool)

Message par crisot »

petit cadeau à ceux qui aiment la démo oldskool ;)

C'est volontairement non optimisé pour une lisibilité maxi, bien que ça manque encore un peu d'ordre ;) Pour mon 2e programme après 3 heures de purebasic ;) Faites en ce que vous voulez :)

Code : Tout sélectionner

;* Initialisation de DirectX *; 
If InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0) 
  End 
EndIf 



;* Ouverture de la l'écran *; 
OpenScreen(640,480,32,"")



;* definition de quelques valeurs, et des coordonnées des points *;

Dim PX2(5) : Dim PY2(5) : Dim PZ2(5)
Dim PX3(5) : Dim PY3(5) : Dim PZ3(5) : Dim ink(5)

PX3(0)=150 : PY3(0)=0 : PZ3(0)=0
PX3(1)=-150 : PY3(1)=0 : PZ3(1)=0
PX3(2)=0 : PY3(2)=0 : PZ3(2)=150
PX3(3)=0 : PY3(3)=0 : PZ3(3)=-150
PX3(4)=0 : PY3(4)=150 : PZ3(4)=0
PX3(5)=0 : PY3(5)=-150 : PZ3(5)=0

angx.f=0 : angy.f=0 : angz.f=0



;* boucle principale *;

Repeat 

ClearScreen(255, 255, 255)

;* mise en place des couleurs *;

ink(0)= 255*65536 + 000*256 + 000
ink(1)= 255*65536 + 255*256 + 000
ink(2)= 000*65536 + 255*256 + 000
ink(3)= 000*65536 + 255*256 + 255
ink(4)= 000*65536 + 000*256 + 255
ink(5)= 255*65536 + 000*256 + 255

;* rotation et projection des points, non optimisée mais compréhensible *;

For u=0 To 5

x0=PX3(u)
y0=PY3(u)
z0=PZ3(u)

x1=x0
y1=Cos(angx)*y0+Sin(angx)*z0
z1=Sin(angx)*y0-Cos(angx)*z0

x2=Cos(angy)*x1+Sin(angy)*z1
y2=y1
z2=Sin(angy)*x1-Cos(angy)*z1

x3=Cos(angz)*x2+Sin(angz)*y2
y3=Sin(angz)*x2-Cos(angz)*y2
z3=z2

x4=(x3*256)/(z3-256)+320
y4=(y3*256)/(z3-256)+240

PX2(u)=x4
PY2(u)=y4
PZ2(u)=z3

Next



;* tri à pivot: lent mais suffisant dans notre cas *;

Repeat

  change=0

  For u=0 To 4
  za=PZ2(u)
  zb=PZ2(u+1)
  
  If zb<za
    x=px2(u) : px2(u)=px2(u+1) : px2(u+1)=x
    y=py2(u) : py2(u)=py2(u+1) : py2(u+1)=Y
    pz2(u)=zb : pz2(u+1)=za
    in=ink(u) : ink(u)=ink(u+1) : ink(u+1)=in
    change=1
  EndIf

Next

Until change=0



;* traçage *;

StartDrawing(ScreenOutput())

For u=0 To 5

  posx=PX2(u) : posy=PY2(u) : posz=(PZ2(u)+256)/2.3 : ink=ink(u)
  posy=posy-posz

  sizex=posz*posz : sizey=posz*2
  hy.f=(180/sizey)/57.297795

  For n=0 To sizey-1
    ang.f=n*hy
    x=Sqr(Sin(ang)*sizex)
    LineXY(posx+x,posy+n,posx-x,posy+n,ink)
  Next

Next

angx+0.0743
angy+0.023
angz-0.0345

StopDrawing()

FlipBuffers() 



;* On quite ! *;

ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape)
End
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Simple et efficace, j'aime bien :wink:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D Et moi aussi c'est vraiment pas mal :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

trop cool !! :D
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

très bien :D
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

excellent oui :P vraiment et merci aussi pour la lisibilité on y apprends beaucoup
Image
Répondre