Gravitron

Contenu du snippet

Ce n'est pas un jeu, juste un simulateur de gravite.
Cela peut aider pour ceux qui concoivent ce genre de jeux ...

Source / Exemple :


Private Type G_POINT
    x As Single
    y As Single
End Type

Dim acceleration As Boolean
Dim orientation As Single
Dim vitesse_angulaire As Single
Dim vitesse_centre_gravite As G_POINT
Dim centre_gravite As G_POINT

Const pi_180 As Single = 3.1415926535897 / 180
Const puissance_moteur As Single = 0.1
Const force_gravite As Single = 0.05

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyUp
            acceleration = True
        Case vbKeyLeft
            vitesse_angulaire = 0.5
        Case vbKeyRight
            vitesse_angulaire = -0.5
    End Select
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyUp
            acceleration = False
        Case vbKeyLeft
            vitesse_angulaire = 0
        Case vbKeyRight
            vitesse_angulaire = 0
    End Select
End Sub

Private Sub Form_Load()
    vitesse_angulaire = 0
    vitesse_centre_gravite.x = 0
    vitesse_centre_gravite.y = 0
    acceleration = False
    orientation = 90
    centre_gravite.x = Me.ScaleWidth / 2
    centre_gravite.y = Me.ScaleHeight / 2
    gravite = 0
End Sub

Private Sub Timer1_Timer()
    Do
    ' --------------------------------------------------------------------
    ' CALCUL DES FORCES APPLIQUEES A L'OBJET
    ' --------------------------------------------------------------------
    
    'SI ON APPUIE SUR L'ACCELERATEUR, LA VITESSE DU CENTRE DE GRAVITE AUGMENTE
    If acceleration Then
        vitesse_centre_gravite.y = vitesse_centre_gravite.y + puissance_moteur * Sin(orientation * pi_180)
        vitesse_centre_gravite.x = vitesse_centre_gravite.x + puissance_moteur * Cos(orientation * pi_180)
    End If
    
    vitesse_centre_gravite.y = vitesse_centre_gravite.y - force_gravite
    
    'SI ON APPUIE SUR GAUCHE OU DROITE, L'OBJET SE MET EN ROTATION
    If vitesse_angulaire <> 0 Then
        orientation = orientation + vitesse_angulaire
        If orientation < 0 Then orientation = orientation + 360
        If orientation >= 360 Then orientation = orientation - 360
    End If
    
    ' --------------------------------------------------------------------
    ' APPLICATION DES FORCES SUR L'OBJET
    ' --------------------------------------------------------------------
    
    ' ON APPLIQUE LE DEPLACEMENT DU A LA VITESSE DU ENTRE DE GRAVITE
    centre_gravite.x = centre_gravite.x + vitesse_centre_gravite.x
    centre_gravite.y = centre_gravite.y - vitesse_centre_gravite.y
    
    ' --------------------------------------------------------------------
    ' AFFICHAGE DE L'OBJET
    ' --------------------------------------------------------------------
    
    'CENTRE DE GRAVITE
    Line1.X1 = centre_gravite.x + 20 * Cos(orientation * pi_180)
    Line1.Y1 = centre_gravite.y - 20 * Sin(orientation * pi_180)
    'SOMMET DU VAISSEAU
    Line1.X2 = centre_gravite.x + 10 * Cos((orientation - 135) * pi_180)
    Line1.Y2 = centre_gravite.y - 10 * Sin((orientation - 135) * pi_180)
    
    'SOMMET DU VAISSEAU
    Line2.X1 = centre_gravite.x + 20 * Cos(orientation * pi_180)
    Line2.Y1 = centre_gravite.y - 20 * Sin(orientation * pi_180)
    'AILE GAUCHE
    Line2.X2 = centre_gravite.x + 10 * Cos((orientation + 135) * pi_180)
    Line2.Y2 = centre_gravite.y - 10 * Sin((orientation + 135) * pi_180)
    
    Sleep 10
    
    DoEvents
    Loop
End Sub

Conclusion :


Line1 et Line2 sont des composants de base que vous trouverer facilement
Il y a aussi besoin d'un timer avec un interval non nul nommé par defaut Timer1.

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.