Graphiques
 
- Dégradé
- Animations BitBlt
- Animations Pic
- Contrôle Animation
- Défilement d'image
 
Interface
 
- Barre d'outils
- Barre de progression
- Clignotement
- Interface MDI
- Barre d'état
 
Texte & système
 
- Texte sur image
- Taille variable
- Informations système
 
Fichiers
 
- Grand fichier
- Choix de police
- Dictionnaire Word
- Listes
- Fichiers binaires
 
Souris et touches
 
- Curseur animé
- Touches
 

Programmation du jeu d'arcade (4)
  1. Il reste à créer les procédures pour contrôler le joueur. Commençons par celle qui permettra de déplacer Lucky Luke et de le faire tirer. 

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   DoEvents
   Select Case KeyCode  
'Structure conditionnelle à une touche enfoncée
      Case vbKeyUp  
'Si flèche vers le haut enfoncée
         IM_Homme1.Top = IM_Homme1.Top - C_ECARTJOUEUR 
'Déplace le joueur
            If IM_Homme1.Top < 100 Then IM_Homme1.Top = 100  
'Empêchement de-->
            sortir de l'écran

      Case vbKeyControl  
'Si CTRL enfoncé
         V_tir = True 
'Initialisation de la variable régissant le tir
         V_rc = sndPlaySound(App.Path & "\BANG.WAV", SND_ASYNC) 
'Son joué
      Case vbKeyDown  
'Si flèche vers le bas enfoncée
         IM_Homme1.Top = IM_Homme1.Top + C_ECARTJOUEUR 
'Déplace le joueur
         If IM_Homme1.Top > ((Ci_1.ScaleHeight - 100) - IM_Homme1.Height) Then
        
'Empêchement de sortir de l'écan
            IM_Homme1.Top = (Ci_1.ScaleHeight - 100) - IM_Homme1.Height
         End If
      Case vbKeyLeft
   'Si flèche gauche enfoncée
         IM_Homme1.Left = IM_Homme1.Left - C_ECARTJOUEUR  
'Déplace le joueur
         If IM_Homme1.Left < 0 Then IM_Homme1.Left = 0  
'Empêchement de sortir -->
        de l'écan

      Case vbKeyRight  
'Si flèche droite enfoncée
         IM_Homme1.Left = IM_Homme1.Left + C_ECARTJOUEUR  
'Déplace le joueur
         If IM_Homme1.Left > (Ci_1.ScaleWidth - IM_Homme1.Width) Then 
-->       
        
'Empêchement de sortir de l'écan
            IM_Homme1.Left = Ci_1.ScaleWidth - IM_Homme1.Width
          End If
   End Select
  
'Réaction en cas de collision
   If Collision(IM_Homme1, IM_Homme2) And IM_Explose.Visible = False Then
      IM_Homme1.Visible = False
      IM_Étoile.Left = IM_Homme1.Left
      IM_Étoile.Top = IM_Homme1.Top
      IM_Étoile.Visible = True
      continue  
'Appel de la procédure
      Exit Sub
   End If
End Sub

  1. Maintenant que les touches sont programmées, ajoutons la procédure qui permet à notre joueur de tirer lui aussi.

Sub TireJoueur()
   For V_y = 0 To C_BALLES - 1  
'Boucle en fonction du nombre de balles
       If IM_Cercle(V_y).Left <= 0 Then IM_Cercle(V_y).Visible = False
       If Not IM_Cercle(V_y).Visible Then  
' Positionne l'image IM_Cercle
          IM_Cercle(V_y).Top = IM_Explose.Top
          IM_Cercle(V_y).Left = IM_Explose.Left - (IM_Explose.Width / 2)
          IM_Cercle(V_y).Visible = True  
'Montre l'image
          Exit For
      End If
   Next
End Sub

  1. Deux courtes procédures seront utilisées par les minuteries: une qui produit un effet de clignotement et l'autre qui permet de créer un intervalle.

Sub Clignote()
   Dim V_j As Integer 
'Déclaration de variable
   For V_j = 0 To 3
      Ci_1.BackColor = &HFF8080  
'Attribution d'une couleur d'arrière-plan
      Pause 0.015  
'Appel de la procédure Pause
      Ci_1.BackColor = &H0000C0  
'Attribution d'une autre couleur d'arrière-plan
   Next V_j
End Sub

Public Sub Pause(Durée As Single)
   Dim V_Courant As Single   
'Déclaration de variable
   V_Courant = Timer  
'Initialisation de la variable
   Do Until Timer - V_Courant >= Durée 
'Boucle tant que la variable n'a pas atteint-->
   la valeur de la durée

   
   DoEvents
   Loop
End Sub

  1. Il ne reste plus que les codes de quatre minuteries à ajouter. Commençons par Minu_2 qui gère les tirs du joueur.

Private Sub Minu_2_Timer()
   Dim V_i As Integer, V_g As Integer 
  'Déclaration de variable
   If V_tir Then  
'Si un tir a été effectué
      V_tir = False  
'Réinitialisation de la variable pour permettre un autre tir
      For V_i = 0 To C_BALLES - 1
         If Not IM_BalleG(V_i).Visible Then  
'Si la balle n'est pas visible
            IM_BalleG(V_i).Top = IM_Homme1.Top + 125  
'Repositionnement de la balle
            IM_BalleG(V_i).Left = IM_Homme1.Left + (IM_Homme1.Width / 2)
            IM_BalleG(V_i).Visible = True  
'Affichage de la balle
            Exit For
        End If
      Next
   End If
   For V_i = 0 To C_BALLES - 1
      If IM_BalleG(V_i).Visible Then 
'Si la balle est visible
         IM_BalleG(V_i).Left = IM_BalleG(V_i).Left + C_EcartBalle 
'Déplacement
         If IM_BalleG(V_i).Left > Ci_1.ScaleWidth Then IM_BalleG(V_i).Visible = False
-->
         'Cache la balle lors de la sortie de l'écran
         'Réaction lorsque l'homme est touché

         If Collision(IM_BalleG(V_i), IM_Homme2) And IM_Explose.Visible = False Then
            IM_BalleG(V_i).Visible = False  
'Cache la balle
            IM_RIP.Left = IM_Homme2.Left  
'Positionne l'image RIP
            IM_RIP.Top = IM_Homme2.Top
            IM_RIP.Visible = True  
'Montre l'image RIP
           ZT_2.Text = Val(ZT_2.Text) + 1 
'Affiche le nombre de victoires
           Nettoyage 
  'Réinitialise les personnages
           V_rc = sndPlaySound(App.Path & "\OH!!.WAV", SND_ASYNC) 
'Son
           Call DessineEnnemi  
'Crée un nouvel ennemi
           If Val(ZT_2.Text) >= 10 And IM_Explose.Visible = False Then
              V_RoiVie = 7  
'Initialisation de variable
              Minu_6.Enabled = True 
  'Activation des minuteries
              Minu_7.Enabled = True
              Minu_1.Enabled = False  
'Désactivation des minuteries
              Minu_4.Enabled = False
              Minu_5.Enabled = False
              IM_Homme2.Visible = False  
'Cache l'image de l'homme 2
              Nettoyage  
  'Réinitialise les personnages
             Exit Sub
           End If
        End If
     End If
     If IM_Explose.Visible And Collision(IM_BalleG(V_i), IM_Explose) And_   
     IM_BalleG(V_i).Visible Then
        IM_BalleG(V_i).Visible = False
        Clignote 
'Appel de la procédure
         V_RoiVie = V_RoiVie - 1  
'Diminue le nombre de vie de l'adversaire
      End If
   Next
End Sub

  1. Poursuivons avec Minu_3 qui est appelée par la procédure Continue.

Private Sub Minu_3_Timer()
   Minu_4.Enabled = False  
'Désactivation de minuteries
   Minu_5.Enabled = False
   Minu_6.Enabled = False
   Minu_7.Enabled = False
   F_Duel.KeyPreview = False
   IM_Étoile.Top = IM_Homme1.Top 
  'Repositionnement de l'homme
   IM_Étoile.Left = IM_Homme1.Left
   If V_z = 11 Then
      Minu_3.Enabled = False  
'Désactivation de la minuterie
      F_Duel.KeyPreview = True
      Minu_4.Enabled = True 
'Activation de minuteries
      Minu_5.Enabled = True
   End If
   V_z = V_z + 1
   If IM_Homme1.Visible Then  
'Si l'homme 1 est visible
      IM_Étoile.Visible = True 
  'Montre l'étoile
      IM_Homme1.Visible = False
  'Cache l'homme
   Else
      IM_Homme1.Visible = True 
  'Sinon, montre l'homme
      IM_Étoile.Visible = False  
'Cache l'étoile
   End If
   If V_z = 10 And IM_Explose.Visible Then
      Minu_6.Enabled = True 
  'Activation de minuteries
      Minu_7.Enabled = True
      Minu_3.Enabled = False  
'Désactivation de minuteries
      F_Duel.KeyPreview = True
      Minu_4.Enabled = False
      Minu_5.Enabled = False
   End If
End Sub

  1. La minuterie Minu_6 est appelée par la minuterie 2. En voici le code.

Private Sub Minu_6_Timer()
   Dim V_ran As Integer  
'Déclaration de variable
   IM_Explose.Visible = True 
'Initialisation de variable
   If V_RoiVie <= 0 Then  
'Si l'adversaire n'a plus de vies
      V_rc = sndPlaySound(App.Path & "\passport.WAV", SND_ASYNC)  
'Son
      MsgBox "Niveau 1 complété", , "Mig" 
  'Message de fin de niveau
      Minu_6.Enabled = False  
'Désactivation de minuterie
   Else
      If V_Bonds = 0 Then   
         If V_m = 3 Then
           IM_Explose.Left = IM_Explose.Left - 450 
'Positionnement de l'explosion
          V_m = -1
         End If
         V_m = V_m + 1
         If IM_Explose.Left <= 0 Then V_Bonds = 1
      Else
         IM_Explose.Left = IM_Explose.Left + 450 
'Positionnement de l'explosion
         If IM_Explose.Left > 6000 Then V_Bonds = 0
      End If
      V_ran = (4650 * Rnd) + 1
  'Chiffre au hasard
      If IM_Explose.Top > V_ran Then
         IM_Explose.Top = IM_Explose.Top - 1000  
'Positionnement de l'image
         If IM_Explose.Top <= 0 Then IM_Explose.Top = 0 
  'Évite la sortie de l'écran
      Else
         IM_Explose.Top = IM_Explose.Top + 1000  
'Positionnement de l'image
         If IM_Explose.Top > 4440 Then IM_Explose.Top = 4440 
'Évite la sortie de-->
         l'écran

      End If
   End If
   If Collision(IM_Homme1, IM_Explose) Then continue 
'Si collision entre l'homme et-->
   l'explosion, appel de la procédure

   V_y = V_y + 1
   If V_y >= 5 Then V_y = 0
   V_rc = sndPlaySound(App.Path & "\shot.WAV", SND_ASYNC) 
'Son
   TireJoueur
  'Appel de la procédure
End Sub

  1. Enfin, pour terminer, le script de la minuterie Minu_7 qui gère l'image Cercle.

Private Sub Minu_7_Timer()
   For V_y = 0 To 7
      If IM_Cercle(V_y).Visible Then  'Si le cercle est visible
        IM_Cercle(V_y).Left = IM_Cercle(V_y).Left - C_EcartBalle 
'Déplacement
        If Collision(IM_Cercle(V_y), IM_Homme1) Then  
'Si collision avec l'homme 1
          Call continue 
  'Appel de la procédure continue
        End If
     End If
   Next
End Sub

  1. Enregistrez votre programme testez-le. 

Application:

  • Que diriez-vous d'essayer d'ajouter un second niveau à ce jeu. L'adversaire serait différent et le nombre de vies qu'on lui accorde plus grand, le décor ainsi que l'adversaire final peuvent changer.  Enregistrez votre programme sous le nom  Ex_26bxx.vbp.

 

Création d'aide
 
- À propos
- Astuce du jour
 
Cryptage
 
- Mot de passe
- Cryptage de fichier
 
Base de données
 
- Bibliothèque
 
Winsock
 
- Serveur de chat
- Client de chat 1
- Client de chat 2
 
Jeu d'arcade
 
- Interface
- Programmation 1
- Programmation 2
- Programmation 3
- Programmation 4
 
Navigateur WEB
 
- Interface 1
- Interface 2
- Interface 3
- Interface 4
- Programmation 1
- Programmation 2
- Programmation 3
- Programmation 4
 
© Copyright 2002 - Design : Webmasters-fr.net