-
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
-
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
-
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.
-
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
-
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
-
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
-
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 gauche0
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
-
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...
|