jlute | Bonjour, je suis débutant en VBA et je cherche un faire un ptit jeu, ici un pong pour essayer d'apprendre de facon assez ludique.
dans l'ensemble ca marche relativement bien (pas optimis je pense, et les rebonds sont pourris mais je vais essayer de faire mieux une fois un ptit probleme résolu.
donc j'ai fait une boucle type do... loop pour deplacer ma balle et scanner les touches clavier pour deplacement mes barres
probleme : qd je lance la macro, rien ne bouge.... j'appuie sur echap et ca fait planter ma macro (normal)
j'ai mis une pause de 0 sec (je sais pas pourquoi mais c comme ca ^^)
je relance rien ne bouge... j'appuie sur Echap pour quitter ma macro et pouf ca ne fait pas planter ma macro et mon jeu "fonctionne".
impossible de le faire fonctionner de telle maniere sans appuyer sur echap au prealable..
vu que je commence j'ai pas mal chercher à droite à gauche mais la j'ai vraiment plus d'idée donc je me toune vers vous
ci-joint mon code :
Code :
- Declare Function GetAsyncKeyState Lib "user32" (ByVal nKey As Integer) As Integer
- Dim longueur_barre As Long
- Dim diametre_balle As Long
- Dim vitX As Long
- Dim vitY As Long
- Dim posL As Long
- Dim posT As Long
- Dim pos_barre As Long
- Dim largeur As Long
- Dim longueur As Long
- Dim nb_ligne As Long
- Dim nb_colonne As Long
- Sub pause(tick)
- newHour = Hour(Now())
- newMinute = Minute(Now())
- newSecond = Second(Now())
- waitTime = TimeSerial(newHour, newMinute, newSecond)
- Application.Wait waitTime
- End Sub
- Sub init()
- 'définit des parametres
- largeur = 3300
- longueur = 5500
- longueur_barre = 1000
- diametre_balle = 75
- 'création de la barre A
- ActiveSheet.Shapes.AddShape(msoShapeRectangle, (longueur - longueur_barre) / 2, largeur - 3 * diametre_balle, longueur_barre, 30).Select
- Selection.ShapeRange.Fill.ForeColor.SchemeColor = 0
- Selection.Name = "barreA"
- 'création de la barre B
- ActiveSheet.Shapes.AddShape(msoShapeRectangle, (longueur - longueur_barre) / 2, 3 * diametre_balle, longueur_barre, 30).Select
- Selection.ShapeRange.Fill.ForeColor.SchemeColor = 0
- Selection.Name = "barreB"
- 'création de la balle
- ActiveSheet.Shapes.AddShape(msoShapeOval, (longueur - diametre_balle) / 2, largeur - 4 * diametre_balle, diametre_balle, diametre_balle).Select
- Selection.ShapeRange.Fill.ForeColor.SchemeColor = 0
- Selection.Name = "balle"
- End Sub
- Sub dessin()
- '
- ' dessin Macro
- ' Macro enregistrée le 26/06/2006 par HT06439
- debut:
- vitX = 0
- vitY = 0
- Call New_level
- Call init
- Do
- 'affichage
- temps = temps + 1
- Range("FM115" ).Value = ActiveSheet.Shapes("balle" ).Left
- Range("FJ128" ).Value = ActiveSheet.Shapes("balle" ).Top
- 'rebond bord
- If ActiveSheet.Shapes("balle" ).Left < 2 Or ActiveSheet.Shapes("balle" ).Left + diametre_balle > longueur Then
- vitX = -vitX
- End If
- If ActiveSheet.Shapes("balle" ).Top < 2 Then
- MsgBox "Joueur B gagne"
- ActiveSheet.Shapes("barreA" ).Delete
- ActiveSheet.Shapes("barreB" ).Delete
- ActiveSheet.Shapes("balle" ).Delete
- GoTo debut
- ElseIf ActiveSheet.Shapes("balle" ).Top + diametre_balle > largeur Then
- MsgBox "Joueur B gagne"
- ActiveSheet.Shapes("barreA" ).Delete
- ActiveSheet.Shapes("barreB" ).Delete
- ActiveSheet.Shapes("balle" ).Delete
- GoTo debut
- End If
- 'rebond raquette A
- If ActiveSheet.Shapes("balle" ).Top + diametre_balle = ActiveSheet.Shapes("barreA" ).Top _
- And ActiveSheet.Shapes("balle" ).Left > ActiveSheet.Shapes("barreA" ).Left _
- And ActiveSheet.Shapes("balle" ).Left + diametre_balle < ActiveSheet.Shapes("barreA" ).Left + longueur_barre _
- And temps > 30 And vitY <> 0 Then
- vitY = -vitY
- 'acceleration de la balle
- If vitY < 0 Then
- vitY = vitY - 0.5
- Else
- vitY = vitY + 0.5
- End If
- temps = 0
- End If
- 'rebond raquette B
- If ActiveSheet.Shapes("balle" ).Top + diametre_balle = ActiveSheet.Shapes("barreA" ).Top + diametre_balle _
- And ActiveSheet.Shapes("balle" ).Left > ActiveSheet.Shapes("barreA" ).Left _
- And ActiveSheet.Shapes("balle" ).Left + diametre_balle < ActiveSheet.Shapes("barreA" ).Left + longueur_barre _
- And temps > 30 And vitY <> 0 Then
- vitY = -vitY
- 'acceleration de la balle
- If vitY < 0 Then
- vitY = vitY - 0.5
- Else
- vitY = vitY + 0.5
- End If
-
- temps = 0
- End If
- 'deplacement balle
- ActiveSheet.Shapes("balle" ).IncrementLeft vitX
- ActiveSheet.Shapes("balle" ).IncrementTop vitY
- 'deplacement de la raquette A
-
- If (GetAsyncKeyState(76) <> 0 Or GetAsyncKeyState(77) <> 0 Or GetAsyncKeyState(32) <> 0) Then
- 'touche G pour aller à droite
- If GetAsyncKeyState(77) <> 0 Then
- ActiveSheet.Shapes("barreA" ).IncrementLeft 4
- If vitX = 0 And vitY = 0 Then
- ActiveSheet.Shapes("balle" ).IncrementLeft 4
- End If
- End If
- 'touche F pour aller à gauche
- If GetAsyncKeyState(76) <> 0 Then
- ActiveSheet.Shapes("barreA" ).IncrementLeft -4
- If vitX = 0 And vitY = 0 Then
- ActiveSheet.Shapes("balle" ).IncrementLeft -4
- End If
- End If
- 'position balle debut
- If vitX = 0 And vitY = 0 Then
- If GetAsyncKeyState(32) <> 0 Then
- vitX = 2
- vitY = 2
- End If
- End If
- End If
-
- 'deplacement de la raquette B
-
- If (GetAsyncKeyState(65) <> 0 Or GetAsyncKeyState(90) <> 0 Or GetAsyncKeyState(32) <> 0) Then
- 'touche G pour aller à droite
- If GetAsyncKeyState(90) <> 0 Then
- ActiveSheet.Shapes("barreB" ).IncrementLeft 4
- End If
- 'touche F pour aller à gauche
- If GetAsyncKeyState(65) <> 0 Then
- ActiveSheet.Shapes("barreB" ).IncrementLeft -4
- End If
- 'position balle debut
- If vitX = 0 And vitY = 0 Then
- If GetAsyncKeyState(32) <> 0 Then
- vitX = 2
- vitY = 2
- End If
- End If
- End If
- 'pause (1)
- Loop
- End Sub
- Sub New_level()
- largeur = 3300
- longueur = 5500
- Worksheets(1).Shapes.SelectAll
- Selection.Delete
- 'création du cadre
- ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, longueur, largeur).Select
- 'création des briques
-
- End Sub
|
merci d'avance
LaJlute
|