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