Ecrasage

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
zorg
Messages : 35
Inscription : ven. 19/janv./2007 11:19
Localisation : France - Puy de Dôme
Contact :

Ecrasage

Message par zorg »

Voici un petit truc que j'avais fait il y a quelques temps avec un autre basic sur une autre machine dans une autre vie..

Zorg

[EDIT] J'ai supprimé un sprite qui ne sert à rien..

Code : Tout sélectionner

;*******************************
;                              ;
;           Ecrasage           ;
;   Ecrit en PureBasic 4.02    ;
;                              ;
;   par Zorg, le 14/10/2007    ;
;                              ;
;*******************************


;Initialisation
If InitSprite()=0 Or InitKeyboard()=0
  MessageRequester("Erreur","Problème avec DirectX",0)
  End
EndIf


;Paramètres à régler
resolution_x.w=1024
resolution_y.w=768
rayon.w=150
ecrasage.w=70
; Le nombre de points ci-dessous doit être un diviseur entier de 512
nb_points.w=16  ; Ne pas oublier de rajouter les LineXY dans la boucle principale pour relier les points definis

;Ouvre un nouvel écran
OpenScreen(resolution_x,resolution_y,32,"Ecrasage")

Structure coordonnees
  x.w
  y.w
EndStructure

Dim points.coordonnees(nb_points)

centre_x.w=resolution_x/2
centre_y.w=resolution_y/2

min_x.w=rayon-ecrasage
max_x.w=resolution_x-rayon+ecrasage
min_y.w=rayon-ecrasage
max_y.w=resolution_y-rayon+ecrasage
angle_x.w=0
vitesse_angle_x.w=2
vitesse_x.w=5
angle_rot.w=0
vitesse_rot.w=2
decalage_y.w=0

;Précalcul des coordonnées des sommets (512 points possibles sur le cercle)
Dim calc_points.coordonnees(512)
For compteur=0 To 511
  calc_points(compteur)\x=rayon*Cos(compteur*2*#PI/512)
  calc_points(compteur)\y=rayon*Sin(compteur*2*#PI/512)
Next compteur

Repeat
  ;Rotation
  angle_x=(angle_x+vitesse_angle_x) & 511
  
  ; Deplacement latéral et limites
  centre_x=centre_x+vitesse_x
  If (centre_x>max_x)
    centre_x=max_x
    vitesse_x=-vitesse_x
    vitesse_angle_x=-vitesse_angle_x
  EndIf
  If (centre_x<min_x)
    centre_x=min_x
    vitesse_x=-vitesse_x
    vitesse_angle_x=-vitesse_angle_x
  EndIf

  ;Deplacement vertical (rebond)
  angle_rot=(angle_rot+vitesse_rot) & 255
  decalage_y=calc_points(angle_rot)\y*3
  centre_y=max_y-decalage_y

  ;Positiondes sommets
  For compteur=0 To nb_points-1
    index=(compteur*(512/nb_points)+angle_x) & 511
    points(compteur)\x=calc_points(index)\x+centre_x
    points(compteur)\y=calc_points(index)\y+centre_y
    If points(compteur)\x>resolution_x-1
      points(compteur)\x=resolution_x-1
    EndIf
    If points(compteur)\x<0
      points(compteur)\x=0
    EndIf
    If points(compteur)\y>resolution_y-1
      points(compteur)\y=resolution_y-1
    EndIf
  Next compteur
  
  ;Effacement de l'écran
  ClearScreen(0)
 
  ;Dessin
  StartDrawing(ScreenOutput())
  LineXY(points(0)\x,points(0)\y,points(1)\x,points(1)\y,$ffffff)
  LineXY(points(1)\x,points(1)\y,points(2)\x,points(2)\y,$ff00ff)
  LineXY(points(2)\x,points(2)\y,points(3)\x,points(3)\y,$ffffff)
  LineXY(points(3)\x,points(3)\y,points(4)\x,points(4)\y,$ff00ff)
  LineXY(points(4)\x,points(4)\y,points(5)\x,points(5)\y,$ffffff)
  LineXY(points(5)\x,points(5)\y,points(6)\x,points(6)\y,$ff00ff)
  LineXY(points(6)\x,points(6)\y,points(7)\x,points(7)\y,$ffffff)
  LineXY(points(7)\x,points(7)\y,points(8)\x,points(8)\y,$ff00ff)
  LineXY(points(8)\x,points(8)\y,points(9)\x,points(9)\y,$ffffff)
  LineXY(points(9)\x,points(9)\y,points(10)\x,points(10)\y,$ff00ff)
  LineXY(points(10)\x,points(10)\y,points(11)\x,points(11)\y,$ffffff)
  LineXY(points(11)\x,points(11)\y,points(12)\x,points(12)\y,$ff00ff)
  LineXY(points(12)\x,points(12)\y,points(13)\x,points(13)\y,$ffffff)
  LineXY(points(13)\x,points(13)\y,points(14)\x,points(14)\y,$ff00ff)
  LineXY(points(14)\x,points(14)\y,points(15)\x,points(15)\y,$ffffff)
  LineXY(points(15)\x,points(15)\y,points(0)\x,points(0)\y,$ff00ff)
  StopDrawing()

  ;Echange des ecrans
  FlipBuffers()

  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_All)

;Libération de la mémoire
Dim calc_points.coordonnees(0)
Dim points.coordonnees(0)
End
Dernière modification par zorg le dim. 14/oct./2007 11:33, modifié 4 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

c'est vraiment excellent :D :lol:
zorg
Messages : 35
Inscription : ven. 19/janv./2007 11:19
Localisation : France - Puy de Dôme
Contact :

Message par zorg »

Merci.

Je viens de corriger le prog, j'ai supprimé quelques trucs qui ne servaient à rien.
La résolution peut être modifiée facilement en début de programme si besoin.

Zorg
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Cool en plus elle toute douce, car elle abime meme pas mon ecran sur les cotés :lol:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Super Zorg, tu assures !
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Manque plus qu'un Zoimb zoimb en bruit de fond pour parachever la chose rebondissante :D
Répondre