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 (2)
  1. Nous allons maintenant placer les scripts dans les bouton. Voici d'abord celui du bouton BO_Nouveau qui sert à réinitialiser les variables pour une nouvelle partie.

Private Sub BO_Nouveau_Click()
  
'Déclaration de variable
   Dim V_i As Integer

   'Initialisation des variables et des paramètres des objets
   Minu_1.Interval = 22
   V_tir = False
   V_ennemi = True
   V_Vie = 3
   ZT_1.Text = 3
   ZT_2.Text = 0
   ZT_3.Text = 1
   IM_Homme1.Top = 3000
   IM_Homme1.Left = 0
   V_RoiVie = 7
   IM_Explose.Visible = False
   Minu_6.Enabled = False
   Minu_7.Enabled = False
   IM_Homme1.Visible = True
   IM_Rip.Visible = False
   V_z = 0
   V_y = 0

   'Appel de la procédure créant l'ennemi
   DessineEnnemi

   'Activation de la minuterie 3 et focus donné à l'aire de jeu
   Minu_3.Enabled = True
   Ci_1.SetFocus

    'Cacher les 7 cercles
   For V_i = 0 To 7
      IM_cercle(V_i).Visible = False
   Next

  
'Activation des minuteries 1, 2 et 5 
   Minu_1.Enabled = True
   Minu_2.Enabled = True
   Minu_5.Enabled = True
   V_rc = sndPlaySound(App.Path & "\intro.WAV", SND_ASYNC)  'Son
End Sub 

  1. Le second bouton permet l'affichage d'un message identifiant le créateur de ce jeu. Voici le script à attribuer au bouton BO_Propos.

Private Sub BO_Propos_Click()
  
'Déclaration de variable
   Dim V_mot As String
   'Initialisation de la variable V_mot
   V_mot = "Duel dans le désert a été créé par Mig à l'aide de VB6. " & vbCrLf
   V_mot = V_mot & "C'est un exemple de la façon simple de créer un jeu." & vbCrLf
   V_mot = V_mot & "Il ne comporte qu'un seul niveau. Vous pourriez " & vbCrLf
   V_mot = V_mot & "lui en ajouter d'autres, si bon vous semble et si vous " & vbCrLf
   V_mot = V_mot & "avez bien compris. L'auteur est Indonésien." & vbCrLf
   V_mot = V_mot & vbCrLf & "Amusez-vous!"
  
'Affichage du message
   MsgBox V_mot, , "Mig"
End Sub

  1. Enregistrez à nouveau votre programme et testez le bouton À propos. Vous pouvez tester l'autre aussi si vous le désirez mais, à ce stade-ci, vous ne remarquerez pas d'effet.

  2. Dans le script de BO_Nouveau, il a été fait référence à la procédure DessineEnnemi. Voici le code qui la compose.

Sub DessineEnnemi()
   'Détermination de la position verticale de l'ennemi
   IM_Homme2.Top = ((ScaleWidth - IM_Homme2.Width) * Rnd) + 1
  
'Vérification que la position ne sort en dehors de l'écran dans le haut
   If IM_Homme2.Top < 100 Then IM_Homme2.Top = 100
  
'Vérification que la position ne sort en dehors de l'écran dans le bas
   If IM_Homme2.Top > ((Ci_1.ScaleHeight - 100) - IM_Homme2.Height) Then
      IM_Homme2.Top = (Ci_1.ScaleHeight - 100) - IM_Homme2.Height
   End If
   IM_Homme2.Left = 6480    'Position horizontale de l'adversaire
   IM_Homme2.Visible = True  
'Adversaire rendu visible
   V_m = 0  
'Initialisation de la variable
   Minu_4.Enabled = True  
'Activation de la minuterie 4
End Sub

  1. Une autre procédure sera indispensable pour que l'ennemi puisse nous abattre et c'est la procédure Tire. En voici le code.

Sub Tire()
   For V_y = 0 To C_BALLES - 1 
'Boucle correspondant au nombre de balles
      If IM_BalleD(V_y).Left <= 0 Then IM_BalleD(V_y).Visible = False 
'Si la balle-->
      sort de l'écran à gauche, elle devient invisible

      If Not IM_BalleD(V_y).Visible Then  
'Si la balle n'est pas visible
         IM_BalleD(V_y).Top = IM_Homme2.Top + 300 
'Propriété TOP égale à-->
         celle de l'adversaire + 300

         IM_BalleD(V_y).Left = IM_Homme2.Left - (IM_Homme2.Width / 2) 
'Calcul-->
         de la position gauche de la balle à partir de la position de l'adversaire

         IM_BalleD(V_y).Visible = True   
'Balle rendue visible
         Exit For  
'Sortie prématurée de la boucle
      End If
   Next V_y
End Sub

  1. Dans la procédure DessineEnnemi, on faisait aussi référence à la minuterie 4 qui la contrôle. Voici la procédure correspondant à celle-ci.

Private Sub Minu_4_Timer()
   Randomize  
'Rendre aléatoire
   Dim V_ran As Integer  
'Déclaration de variable
   If IM_Explose.Visible = True Then  
'Si l'image de l'explosion est visible
      Minu_4.Enabled = False  
'Désactiver la minuterie
      Exit Sub  
  'Sortie prématurée de la procédure
   End If
   If V_m = 3 Then
      IM_Homme2.Left = IM_Homme2.Left - 450 
'Déplacement vers la gauche du-->
      personnage

      V_m = -1 
'Réinitialisation de V_m
   End If
   If IM_Homme2.Left < 0 Then  
'Dans le cas où le personnage quitte l'écran-->
   à gauche

      DessineEnnemi  
'Rappel de la procédure DessineEnnemi
   End If
   V_m = V_m + 1 
'Incrémentation de V_M
   V_ran = (4650 * Rnd) + 1 
'Choix au hasard d'une position verticale 
   If IM_Homme2.Top > V_ran Then  
'Si la position supérieure est plus grande-->
 que V_ran

      IM_Homme2.Top = IM_Homme2.Top - 700 
'L'homme baisse de 700 pixels
      If IM_Homme2.Top <= 0 Then   'Si la position supérieure est inférieure à 0
         IM_Homme2.Top = 0  
'Retour à 0
      End If
   Else
      IM_Homme2.Top = IM_Homme2.Top + 700 
'Sinon l'homme monte de 700 pixels
      If IM_Homme2.Top > 4440 Then  
'Si la position est plus grande que 4440
         IM_Homme2.Top = 4440  
'Retour à 4440
      End If
   End If
   V_y = V_y + 1  
'Augmentation de V_y
    If V_y >= 5 Then V_y = 0 
'Lorsque V_y atteint ou dépasse 5, retour à 0
    V_rc = sndPlaySound(App.Path & "\gun.WAV", SND_ASYNC) 
'On joue le son
    Tire  
'Appel de la procédure de tir
End Sub

  1. Le revolver tire des balles, mais celles-ci ne vont pas très loin. Le code inséré dans la minuterie Minu_5 va remédier à ce problème. Le voici.

Private Sub Minu_5_Timer()
 
' Boucle allant du nombre de balles tiré au nombre maximum de balles
   For V_y = 0 To C_BALLES - 1
      If IM_BalleD(V_y).Visible Then  
'Si la balle est visible
         IM_BalleD(V_y).Left = IM_BalleD(V_y).Left - C_EcartBalle  
'Déplacement de-->
         la balle vers la gauche
0
         If Collision(IM_BalleD(V_y), IM_Homme1) Then   
'Si la balle frappe l'image de-->
         l'homme 1
            For V_j = 0 To C_BALLES - 1  'Effacer toutes les balles
               IM_BalleD(V_j).Visible = False
            Next

            Call continue  
'Appel de la procédure continue
         End If
      End If
   Next
End Sub

  1. Une fonction et une procédure sont appelées par le code de MInu_5. D'abord la fonction Collision qui détecte si l'homme 1 a été touché par une balle et la procédure Continue qui permet au jeu de continuer. Voici d'abord le code de la fonction.

Private Function Collision(imgA As Image, imgB As Image) As Integer
   'Attribution du type personnel tRect aux variables
   Dim A As tRect
   Dim B As tRect
   Dim ResultRect As tRect
  
'Initialisation du type
   A.Left = imgA.Left  
'ImgA est l'image de la balle
   A.Top = imgA.Top
   B.Left = imgB.Left  
'ImgB est l'image de l'homme
   B.Top = imgB.Top

   A.Right = A.Left + imgA.Width - 1
   A.Bottom = A.Top + imgA.Height - 1

   B.Right = B.Left + imgB.Width - 1
   B.Bottom = B.Top + imgB.Height - 1

   Collision = IntersectRect(ResultRect, A, B)
End Function


SUITE...

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