Etoiles 3d

Contenu du snippet

A première vue on dirait des étoiles en 3D mais quand on déplace le poitn d'émission, ça y ressemble plus. Les commandes sont simples : touches flêchées du clavier pour déplacer le point d'émission, shift+touches flêchées pour déplacer les points, barre d'espace pour rafraichir (après un déplacement des points).
Pour l'execution, il vous faut : Une feuille (Form1) et un Timer(Timer1). Mettez la propriété borderstyle de la fenêtre à 0 et mettez-la en plein écran ohhhhhhhhh c'est joliiiiiiii.
Ah oui, il faut un module aussi (Module1)

Source / Exemple :


'A mettre dans le code de la feuille : 
Option Explicit

Private Sub Form_Click()
End
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim i
'Touches pressées par l'utilisateur
Select Case KeyCode
    Case vbKeyLeft ' Touche Gauche du clavier
        PositionDepart.X = PositionDepart.X - 100
        'le point d'émission est déplacé vers la gauche (de 100 tiwps)
    Case vbKeyRight ' Touche Droite du clavier
        PositionDepart.X = PositionDepart.X + 100
        'le point d'émission est déplacé vers la droite (de 100 tiwps)
    Case vbKeyUp ' Touche Haut du clavier
        PositionDepart.Y = PositionDepart.Y - 100
    Case vbKeyDown ' Touche Bas du clavier
        PositionDepart.Y = PositionDepart.Y + 100
    Case vbKeySpace 'Touche Espace
        Me.Cls 'Rafraîchit l'écran
End Select
    If Shift = 1 Then 'Si la touche shift est tenue enfoncée (le 1 signifie Shift)
        'Déplacement de tous les points
        Select Case KeyCode
            Case vbKeyLeft
                For i = 0 To MAX
                    Position(i).X = Position(i).X - 100 'Gauche
                    DoEvents
                Next i
            Case vbKeyRight
                For i = 0 To MAX
                    Position(i).X = Position(i).X + 100 'Droite
                    DoEvents
                Next i
            Case vbKeyUp
                For i = 0 To MAX
                    Position(i).Y = Position(i).Y - 100 'Haut
                    DoEvents
                Next i
            Case vbKeyDown
                For i = 0 To MAX
                    Position(i).Y = Position(i).Y + 100 'Bas
                    DoEvents
                Next i
        End Select
    End If
End Sub

Private Sub Form_Load()
Dim i
PositionDepart.X = Me.Width / 2 'Placement du point d'émission
PositionDepart.Y = Me.Height / 2 'au milieu de la feuille
For i = 0 To MAX
    Vitesse(1, i) = ((VitesseMax * 2) * Rnd) - VitesseMax 'Les vitesses sont
    Vitesse(2, i) = ((VitesseMax * 2) * Rnd) - VitesseMax 'générées au hasard
    Position(i).X = PositionDepart.X 'les points sont placés au point d'émission
    Position(i).Y = PositionDepart.Y
    DoEvents
Next i
End Sub

Private Sub Form_Unload(Cancel As Integer)
End
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
Dim i
For i = 0 To MAX
    Me.PSet (Position(i).X, Position(i).Y), Me.BackColor 'Efface le point qui se trouvait à cet endroit à ce tour
    Position(i).X = Position(i).X + Vitesse(1, i) 'Tous les points sont déplacés selon leur vitesse
    Position(i).Y = Position(i).Y + Vitesse(2, i)
    Me.PSet (Position(i).X - Vitesse(1, i), Position(i).Y - Vitesse(2, i)), Me.BackColor 'Efface le point qui se trouvait à cet endroit au tour d'avant (Emplacement - Vitesse)
    If Position(i).X > Me.Width Or Position(i).Y > Me.Height Or Position(i).X < 0 Or Position(i).Y < 0 Then
        'Si un point dépasse les limites de la feuille
        Position(i).X = PositionDepart.X ' On le ramène au point d'émission
        Position(i).Y = PositionDepart.Y
        Vitesse(1, i) = ((VitesseMax * 2) * Rnd) - VitesseMax 'On lui attibue une
        Vitesse(2, i) = ((VitesseMax * 2) * Rnd) - VitesseMax 'Nouvelle vitesse générée au hasard
    End If
    Me.PSet (Position(i).X, Position(i).Y), vbWhite 'Dessine les points
Next i
End Sub

'A Mettre dans un module :
Option Explicit

Public Type Point_A     ' 1)
    X As Single
    Y As Single
End Type

Global Const MAX As Integer = 1000          '2)
Global Const VitesseMax As Integer = 80     '2)

Global PositionDepart As Point_A

Global Position(0 To MAX) As Point_A        '3)
Global Vitesse(1 To 2, 0 To MAX) As Integer '3)

'########################## AIDE #########################
'
'1) l'instruction "Public Type" définit un type de variable
'   Qui pourra être utilisé dans le code. Ici, on définit
'   deux informations qu'il contiendra, à savoir les coordonnées
'   X et Y d'un point (on aurait pu ajouter d'autres informations
'   comme sa couleur ou autres...)
'   Cette déclaration de type à plusieurs avantages :
'       - Réduire l'utilisation de tableaux trop grands
'       - Faciliter l'accés et la modification des informations.
'
'2) On définit des CONSTANTES avec "Const", c'est à dire des informations
'   Qui ne pourront pas changer au cours de l'éxécution du code
'   Il est nécéssaire de déclarer ces informations comme constantes pour
'   pouvoir les utiliser comme maximum pour les tableaux (position et vitesse)
'   Ici, on définit le nombre de points (MAX) et la vitesse maximale de
'   chacun d'eux (VitesseMax)
'
'3) On définit deux tableaux de [MAX] colonnes chacun (la valeur qui sera
'   mise en tant que nombre de points)

Conclusion :


Comme ce code ne présente pas d'utilité particulière, je l'ai beaucoup commenté pour les débutants, pour apprendre la gestion de tableaux, coordonnées multiples, types.......

Soyez indulgents !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.