Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[VB] CRÉER UN PONG :: NIVEAU DÉBUTANT


Information sur le tutorial

Catégorie :Tutoriaux Date de création : 15/07/2004 13:13:55 Vu : 21 372 fois

Note :
9,71 / 10 - par 14 personnes
9,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (40)
Ajouter un commentaire et/ou une note

Tutorial

Note : J'avais réaliser ce tutorial pour un ami, ne vous étonnez donc pas si je vous tutoies dans le lignes qui suivent.
Note 2 : je ne sais pas si les images s'afficheront, elles ne sont pas primordials de toutes façons.


Tutorial Visual Basic : Créer un Pong.

 

 

Pré-requis nécessaire :

 

            Les variables : une variable est une valeur (des chiffres, des lettres, ou les deux) stocké sous un nom. Par exemple :

Variable1 = 22

Button1.Caption = Variable1

Cet exemple n’affiche  pas « Variable1 » sur le bouton, mais il affiche 22. C’est à dire la valeur associé au nom Variable1. C’est clair ? Bon. Il faut aussi savoir comment créer une variable dans le code. Ouvre la fenêtre de code, monte tout en haut de cette dernière, en dehors de toutes les fonctions, et tape :

Public Le_Nom_De_Ta_Variable

 

Cet exemple crée une variable appelé Le_Nom_De_Ta_Variable. Tu peux bien évidemment changer ce nom. Elle ne lui assigne par contre aucune valeur. Elle est donc, par defaut, égale à « Null ». Pour lui assigner une autre valeur, il faut te rendre à l’intérieur d’une fonction (c’est à dire entre les bornes « Private Sub» et « End Sub » ) et taper :

Le_Nom_De_Ta_Variable = « La_Valeur ».

 

Attention : la valeur que tu veux assigner à ta variable doit être mise entre guillemets si elle contient des lettres. Tu ne devra pas en mettre par contre si elle ne contient QUE des chiffres.

            Tu peux aussi assigner à une variable la valeur d’une autre variable, comme ceci :

Var1 = 22

Var2 = Var1

 

Cet exemple donne pour valeur 22 aux deux variables.

Tu peux aussi assigner un calcul comme valeur :

Var1 = 22

Var2 = 44

Var3 = Var1 + Var2 + 66

 

Cet exemple donne pour valeur 132 à la variable Var3 (c’est à dire le résultat de 22 + 44 + 66).

 

                        La boucle If-Then-Else : La boucle If-Then-Else te permet de ne réaliser certaines actions que si une certaine conditions est verifié :

Var1 = 22

If Var1 = 22 Then

            Var2 = Var1

End If

 

Cet exemple est tout bête : il assigne 22 à la variable Var1. Ensuite arrive la  boucle If. Sa condition est : If Var1 = 22 Then. C’est à dire : Si Var1 = 22 Alors. La variable Var1 étant bien égale à 22, l’ordinateur exécute la ligne suivante : Var2 = Var1. Si Var1 n’avait pas été égale à 22, l’ordinateur serait aller directement à la ligne End If, sans exécuter la ligne Var1 = Var2.  La ligne End If est la fin de la boucle If Then Else.

 

 

Voici un exemple plus compliqué :

Var1 = 22

If Var1 < 22 Then

            ...blablabla...

ElseIf Var1 > 22 Then

            ...blablabla...

Else

            ...blablabla...

End If

 

Cet exemple assigne la valeur 22 à Var1. Ensuite la boucle If teste si Var1 est inférieur ( signe < ) à 22. Vue qu’elle ne l’est pas, l’ordinateur va à la ligne ElseIf Var1 > 22 Then. Cette ligne teste si Var1 est supérieur (signe > ) à 22. Vue qu’elle ne l’est pas non plus, elle va à la ligne Else qui signifie : si aucunes des conditions si-dessus ne sont respectés, alors… Vue que Var1 n’est ni inférieur, ni supérieur à 22, l’ordinateur exécute les lignes contenues entre Else et End If. C’est clair ?

 

 

Début du cours :

 

Commençons tout de suite les choses sérieuses :

Lance Visual Basic. Fait EXE Standard. Agrandit la feuille pour qu’elle ait les dimensions suivantes : Width = 7620, Height = 5310.

Dans sa fenêtre de PROPRIETE, change les valeurs suivantes :

Nom de la valeur

Valeur de départ

Changer en …

Backcolor

Blanc

Noir

BorderStyle

2 - Sizable

1 – Fixed Single

Caption

Form1

Pong !

Ensuite, on va créer un menu qui servira à régler le difficulté :

Clique sur ce bouton (3ème bouton de la barre d'outils) :

Voici a peu près la fenêtre qui s’affiche :

Dans Caption, tape « 3 », puis dans Name, tape « Trois ».

Clique ensuite sur Insérer, Puis dans Caption retape « 2 », et dans Name « Deux ». Clique encore sur insérer, et retape « 1 » dans Caption et « Un » dans Name. Clique sur OK pour fermer la fenêtre

            Un menu à dût apparaître sur Form1, portant les chiffres 1, 2 , et 3. Il nous serviront à régler la difficulté plus tard. Crée maintenant un pictureBox ( c’est l’icône en haut à droite de la BARRE D’OUTILS) quelconque. Puis, dans la barre de PROPRIETE, change ces valeurs :

Nom de la valeur

Valeur actuelle

Changer en …

Name

Picture1 (je crois…)

Player1 

BorderStyle

1 – Fixed Single 

2 – None

BackColor

Je sais plus

Blanc

Left

?

240

Top

?

1440

Height

?

1575

Width

?

255

 

            Tu obtiens un beau rectangle blanc à gauche de la feuille. Ce sera la raquette du joueur. Re-Crée un PictureBox avec ces PROPRIETES :

Nom de la valeur

Valeur actuelle

Changer en …

Name

Picture1 (je crois…)

Ball

BorderStyle

1 – Fixed Single 

2 – None

BackColor

Je sais plus

Blanc

Left

?

3360

Top

?

2040

Height

?

255

Width

?

255

Ca, ce sera la balle.

 

 

            Re-Re-Crée un PictureBox avec ces PROPRIETES :

Nom de la valeur

Valeur actuelle

Changer en …

Name

Picture1 (je crois…)

Player2

BorderStyle

1 – Fixed Single 

2 – None

BackColor

Je sais plus

Blanc

Left

?

7080

Top

?

1440

Height

?

1575

Width

?

255

Et ça se sera la raquette contrôlée par l’ordinateur.

Maintenant, crée 6 Timer (l’icône en forme de chronomètre).

Tu peux les placer où tu veux, ils sont invisible pendant l’exécution de l’application.

Associe 75 à la PROPRIETE Interval du premier Timer (portant le nom Timer1).

Associe 1500 à la propriété Interval du deuxième Timer (portant le nom Timer2).

Associe 3000 à la propriété Interval du troisième Timer (portant le nom Timer3).

Associe 6000 à la propriété Interval du quatrième Timer (portant le nom Timer4).

Associe 8000 à la propriété Interval du cinquième Timer (portant le nom Timer5).

Associe 16000 à la propriété Interval du sixième Timer (portant le nom Timer6).

Il te reste à créer deux label (Deuxième icône à gauche en partant du haut) :

Voici leurs PROPRIETE :

            Label n°1 :

Nom de la valeur

Valeur actuelle

Changer en …

Name

Label1 (je crois…)

P1Nbr

Caption

Label1

00

BackColor

Je sais plus

Noir

ForeColor

Noir

Blanc

Font

?

Taille : 24 / Gras /             Time New Roman

--

--

--

--

--

--

Je te laisse le placer où tu veux, en sachant que ce sera le compteur de points du joueur 1.

 

Label n°2 :

Nom de la valeur

Valeur actuelle

Changer en …

Name

Label1 (je crois…)

P2Nbr

Caption

Label1

00

BackColor

Je sais plus

Noir

ForeColor

Noir

Blanc

Font

?

Taille : 24 / Gras /             Time New Roman

--

--

--

--

--

--

Je te laisse le placer où tu veux, en sachant que ce sera le compteur de points du joueur 2.

 

Résultat à la suite des modifications :

Voilà, l’interface est créée ! Maintenant il va falloir la programmer. Ouvre la fenêtre de code (en double cliquant sur la feuille, par exemple), puis, en dehors de toutes fonctions, toutes en haut de la feuille de code, tape :

Public BallMouveLeft

Public BallMouveTop

Public DiffLevel

Public refY

 

Ce sera les quatre variables qui nous seront nécessaires.

Referme la fenêtre de code, et double clique sur le Timer 1. Voici ce qui s’affiche :

Private Sub Timer1_Timer( )

 

End Sub

            Cette fonction sera exécuter toutes les 75 millisecondes (propriété Interval de Timer1).

Rajoute le code souligné :

Private Sub Timer1_Timer()

Call MouvementP2

Call BalleRebonditEnHaut

Call BalleRebonditEnBas

Call BalleRebonditSurPlayer1

Call BalleRebonditSurPlayer2

Call MouvementDeLaBalle

Call Player1Mouve

Call Player1MarqueUnPoint

Call Player2MarqueUnPoint

End Sub

 

Cela mérite une explication je pense…En fait, toutes ces lignes sont des appelles de fonctions. Par exemple, la ligne :

Call MouvementP2

Elle appelle la fonction « Mouvement P2 ».

La fonction MouvementP2 se situera quelque part dans la fenêtre de code, et ressemblera à cela :

Sub MouvementP2( )

            …..blablabla…..

End Sub

Bien sur, nous ne l’avons pas encore créée et nous allons le faire.

Récapitulation : toutes les lignes qui commencent par « Call » appelle une fonction portant le nom que forme les caractères suivant le mot « Call ». Tu auras peut-être aussi remarqué qu’il n’y a pas de « Private » devant « Sub MouvementP2( ) », alors qu’il y a « Private » devant « Sub Timer1_Time( ) ». En effet, il n’y a pas besoin de mettre « Private » devant les fonctions que tu crée toi-même, les rendants ainsi accessible à n’importe quel endroit du code.

 

Il va donc falloir que l’on crée toutes ces fonctions une-à-une. Mais avant cela, referme le fenêtre de code, et ré-ouvre la en cliquant sur Form1, de manière à afficher :

Private Sub Form_Load( )

 

End Sub

 

Rajoutes-y le code souligné :

Private Sub Form_Load()

BallMouveTop = -50

BallMouveLeft = -100

DiffLevel = 1

End Sub

 

Tu as dut reconnaître le nom de 3 des quatre variables que l’on avait créées. On fait ce que l’on appelle une initialisation de variables. C’est-à-dire que l’on assigne une valeur à une variable pour la première fois. Voilà qui est fait.

Maintenant nous allons pouvoir créer la fonction MouvementP2( ). Descends tout en bas de la fenêtre de code, en dehors de toutes fonctions, et tape :

Sub MouvementP2()

If DiffLevel = 1 Then

                                    If Ball.Top < Player2.Top Then

                                                Player2.Top = Player2.Top - 31

                                   End If

 

                                   If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then

                                               Player2.Top = Player2.Top + 31

                                   End If

ElseIf DiffLevel = 2 Then

If Ball.Top < Player2.Top Then

                                               Player2.Top = Player2.Top - 41

                                     End If

   

If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then

                                               Player2.Top = Player2.Top + 41

                                   End If

ElseIf DiffLevel = 3 Then

    If Ball.Top < Player2.Top Then

                                               Player2.Top = Player2.Top - 55

                                   End If

  

 If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then

       Player2.Top = Player2.Top + 55

                                    End If

End If

End Sub

 

Explication du code :

 

            J’ai essayé d’espacer le code le plus possible pour te permettre de bien visualiser le tout.

 

Sub MouvementP2()

If DiffLevel = 1 Then

 

Ces deux premières lignes sont :

-         Le début de la fonction ;

-         Le début d’une boucle IF.

La condition de cette boucle est :

Si la variable DiffLevel est égale à 1 Alors…

Rappelle toi : nous avons initialiser la variable DiffLevel à 1 si-dessus, dans la Fonction Form_Load. ( Au fait, la fonction Form_Load, c’est la fonction qui est exécuter au début du programme ). Donc, l’ordinateur va continuer à exécuter les lignes qui suivent jusqu’à arriver à un ElseIf ou à un End If.

                         If Ball.Top < (Player2.Top + (Player2.Width  / 2)) Then

                                   Player2.Top = Player2.Top - 30

                        End If

 

                        If Ball.Top > (Player2.Top + (Player2.Width / 2)) Then

                                   Player2.Top = Player2.Top + 30

                        End If

Les lignes suivantes sont, comme tu le vois, une autre boucle If intégré dans la première. La condition de cette boucle est :

Si la propriété Top de Ball est inférieur à la propriété Top de Player2 plus la propriété Width(hauteur)divisé par deux de Player2, Alors…

Ce qui correspond en fait à :

Si Ball est plus haut que le centre de Player2, Alors…

La ligne suivante est :

Player2.Top = Player2.Top – 30

En fait, cette fonction modifie la propriété Top de Player2, en lui soustrayant 30, c’est à dire en le rapprochant de 30 twips du haut de l’écran, c’est à dire, le faire monter.

Récapitulatif :

Si Ball est plus haut que Player2,Alors Player2 monte de 30 twips.

 

Ensuite, End If est la fin de la boucle If.

Les trois autres lignes suivantes (encore une autre boucle If), sont les mêmes que les premiers, mais testant si la balle est plus basse que le centre de Player2, ce qui donne :

Si Ball est plus bas que Player2, Alors Player2 descend de 30 twips.

 

ElseIf DiffLevel = 2 Then

If Ball.Top < Player2.Top Then

                                               Player2.Top = Player2.Top - 40

                                    End If

   

If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then

                                               Player2.Top = Player2.Top + 40

                                   End If

ElseIf DiffLevel = 3 Then

    If Ball.Top < Player2.Top Then

                                               Player2.Top = Player2.Top - 55

                                   End If

  

 If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then

       Player2.Top = Player2.Top + 55

                                    End If

End If

End Sub

 

Les lignes suivantes (ci-dessus) sont la même chose que celle que l’ont viens d’étudier, mais avec des niveaux de difficulté différents. Tu remarqueras que les changements de difficultés se traduisent en fait par un mouvement plus rapide de Player2 (il bouge de 55 twips au niveau 3).

Tu as remarqué le End Sub : c’est la fin de la fonction.

 

            Il nous faut maintenant créer la fonction suivant. Fait donc comme précédemment avec le code suivant :

Sub BalleRebonditEnHaut()

If Ball.Top < 0 Then

                        BallMouveTop = 50

End If

End Sub

 

La fonction est donc la fonction “BalleRebonditEnHaut”. Cette fonction teste si la balle (l’objet Ball) touche le haut de Form1 (If Ball.Top < 0 Then). Si oui, elle inverse son mouvement (BallMouveTop = 50) , tout simplement en changeant une variable (BallMouveTop, que nous avons créée avant). Nous verrons plus en détail ce fonctionnement.

 

Il nous faut maintenant créer la fonction suivantes :

 

Sub BalleRebonditEnBas()

If (Ball.Top + Ball.Width) > 4560 Then

                         BallMouveTop = -50

End If

End Sub

Tu remarques un changement dans la condition de la boucle If. Tout d’abord, 4560 correspond à la hauteur de Form1 moins la largeur du menu et du titre de cette même feuille. La parenthèse est égale à la position Y (ordonnés) de la balle, + sa hauteur. Car, en effet, il faut tester le débordement avec le bas de la Balle , et non pas avec son coin supérieur gauche comme le fait la propriété Top utilisée toute seule. Donc, en résumé, on teste si le bas de la balle est plus bas que le bord de la feuille, et si oui, on modifie la variable BallMouveTop.

 

            Voilà, maintenant il faut créer  la fonction suivante :

Sub BalleRebonditSurPlayer1()

If Ball.Left < (Player1.Left + Player1.Width) And Ball.Left > Player1.Left And (Ball.Top +                        ààà Ball.Width) > Player1.Top And Ball.Top < (Player1.Top + Player1.Height) Then

    BallMouveLeft = 100

End If

End Sub

 

            Cette fonction teste si la Balle rebondit sur Player1. Les signes « à » signifie que cette ligne est la suite de la ligne précédente. Tu dois donc tout taper sur la même ligne.

Tu remarques le mot And. Ce mot permet de mettre plusieurs conditions pour une boucle If. Tu remarques, dans cette boucle If, il y a 4 conditions. Il faut donc que ces 4 conditions soit vérifiés pour que le programme exécute la ligne suivante :

 

Si la balle est  plus à gauche que le bord droit de Player1 (la position de son bord gauche plus sa largeur est égale à la position de son bord droit) et que la balle est plus à droite que le bord gauche de Player1, et que le coin en bas à gauche de la balle est plus bas que le bord du haut de Player1, et que le coin en haut à gauche de la balle est plus haut que le bord du bas de Player1 Alors…

 

Si tu fais un schéma (je te le conseilles…) tu comprendras que ces 4 conditions se résument à :

Si la balle rentre en collision avec Player1, Alors…

 

La ligne suivantes permet à la balle de repartir vers la droite en modifiant la variable BallMouveLeft. Nous verrons cela plus en détail un peu plus loin.

 

            Ceci étant fait, on crée la fonction suivantes :

Sub BalleRebonditSurPlayer2()

If (Ball.Left + Ball.Width) < (Player2.Left + Player2.Width) And (Ball.Left + Ball.Width)

à > Player2.Left And (Ball.Top + Ball.Width) > Player2.Top And (Ball.Top + Ball.Width)  

à < (Player2.Top + Player2.Height) Then

    BallMouveLeft = -100

End If

End Sub

 

Cette fonction est un autre test de collision, cette fois entre la balle est Player2.

La fin permet à la balle de repartir vers la gauche.

 

 

 

            Aller, la fonction suivante :

 

Sub MouvementDeLaBalle()

Ball.Top = Ball.Top + BallMouveTop

Ball.Left = Ball.Left + BallMouveLeft

End Sub

 

            Cette fonction fait bouger la balle : en effet, elle ajoute au valeur de position de Ball les variables BallMouveTop et BallMouveTop. En effet, ces variables correspondent au déplacement : si c’est une valeur négative, elle va vers le gauche (ou monte), et si cette valeur est positive, elle va vers la droite (ou descend).

 

            Passons à la fonction suivantes :

Sub Player1Mouve()

Player1.Top = refY

End Sub

Cette fonction change la position de Player1 : en effet, elle initialise sa propriété Top (axe des ordonnés), en la rendant égale à la variable refY. Nous verrons plus tard à quoi correspond la variable refY.

 

Hop, la fonction suivante :

 

Sub Player1MarqueUnPoint()

If Ball.Left > 7440 Then

                        P1Nbr = P1Nbr + 1

                         Ball.Left = 5000

                        Ball.Left = 5000

                        BallMouveLeft = -100

                        BallMouveTop = -50

End If

End Sub

 

Cette fonction teste si la balle est plus loin que le bord droit de Form1 ( correspondant à la valeur 7440 ), c’est-à-dire si Player2 à laisser passer la balle, c’est-à-dire si Player1 à marquer un point.

            Si oui, on ajoute un au label P1Nbr (P1Nbr = P1Nbr + 1), puis on repositionne la balle, et sa direction, pour pouvoir continuer à jouer.

 

            Poum, la fonction suivante :

 

Sub Player2MarqueUnPoint()

If Ball.Left < 10 Then

                        P2Nbr = P2Nbr + 1

                         Ball.Left = 3000

                        Ball.Left = 3000

                        BallMouveLeft = 100

                        BallMouveTop = 50

End If

End Sub

 

            La même chose, mais avec Player2.

 

            Paf, la fonction suivante :

Ah, ben tiens, y’en à plus !

Il ne nous reste plus qu’à régler certains détails :

Ferme la fenêtre de code, et ré-ouvre la en double cliquant sur la feuille. La fonction, Form_Load, que nous avons modifié plus haut, apparaît. Nous n’allons pas y retoucher. Dans le menu déroulant de gauche de la feuille de code, sélectionne « MouseMove », de manière à afficher :

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single )

 

End Sub

 

Rajoute le code souligné :

 

 

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

refY = Y

End Sub

Il faut savoir que la fonction MouseMove est exécuter chaque fois que la souris bouge sur la feuille. La ligne refY = Y initialise la variable refY à la position Y de la souris(axe des ordonnées). En effet, dans la fonction MouseMove, et dans cette fonction seulement, Y correspond à la position Y de la souris. Voilà, tu sais maintenant à quoi correspond RefY.

 

Voilà, continuons avec les détails : ferme la fenêtre de code, et ré-ouvre là en cliquant sur Timer2. Ajoute le code souligné :

Private Sub Timer2_Timer()

Timer1.Interval = 60

Timer2.Enabled = False

End Sub

 

Re-ferme, et re-ouvre la fenêtre en cliquant sur Timer3. Ajoute le code souligné :

Private Sub Timer3_Timer()

Timer1.Interval = 40

Timer3.Enabled = False

End Sub

 

De même avec Timer4 :

Private Sub Timer4_Timer()

Timer1.Interval = 25

Timer4.Enabled = False

End Sub

 

De même avec Timer5 :

Private Sub Timer5_Timer()

Timer1.Interval = 20

Timer5.Enabled = False

End Sub

 

De même avec Timer6 :

Private Sub Timer6_Timer()

Timer1.Interval = 5

Timer6.Enabled = False

End Sub

 

Tout ces timers réduisent l’intervalle de bouclage ( de répétions de la fonction ), de Timer1, puis ils s’auto suppriment.

 

Tout petit détail et c’est fini :

-Referme la fenêtre de code, et ré-ouvre là en double cliquant sur « 1 » dans le menu de Form1. Rajoute le code souligné :

Private Sub un_Click()

DiffLevel = 1

End Sub

 

De même avec deux :

Private Sub deux_Click()

DiffLevel = 2

End Sub

 

Puis avec trois :

Private Sub trois_Click()

DiffLevel = 3

End Sub

 

Si tu te rappelles bien, la variable DiffLevel est utilisé dans la fonction Player2Mouve.

 

Ouf ! C’est fini !

 

signaler à un administrateur
Commentaire de dOsSpr0uTosS le 22/05/2005 17:54:49

salut j'ai commencer le programme mais je ne trouve pas l'icone du chronomètre pour fair les timer j'ai bien regarder partout :s
PS:jai office 2000 et je ne sais pas ou trouver un patch pour passer a visual basic 6.0 donc peut-etre que les timer n'existe pas sur ma version

signaler à un administrateur
Commentaire de Dametroid le 28/05/2005 16:34:01

Le code est accepter a 90% dans mon Visual Basic.NET
Il ne veut pas accepter
P2Nbr = P2Nbr + 1 et P1Nbr = P1Nbr + 1
J'ai donc creer das variables
Public ScorePlayer1
et
Public ScorePlayer2
et ait utilisé
P1Nbr = ScorePlayer1 + 1 et P2Nbr.Text = ScorePlayer2 + 1
de cette facon le code etait accepté, mais le jeu ne marchait pas .....
J'ai beau chercher, la balle, la raquette, tout est entierement statique...

signaler à un administrateur
Commentaire de Scalpweb le 28/05/2005 17:27:02

Avec .Net : c'est normal...
Les codes sont souvent incompatibles car les objets ne sont pas gérés pareils.
Ensuite, office 200 ne dispose pas d'un VB complet et il n'existe pas de patch à ma connaissance...
@+, Scalpweb

signaler à un administrateur
Commentaire de crazy_girl le 26/06/2005 11:26:57

Nickel ce code est génial, tout marche. J'ai refait le design et voilà tout est OK. Merci ;-).

signaler à un administrateur
Commentaire de Scalpweb le 26/06/2005 17:52:06

OK merci bcp CRAZY_GIRL.
Ca aurait été cool de mettre une petite note mais bon c'est pas grave.

@+,
Scalpweb.

signaler à un administrateur
Commentaire de brioche24 le 06/07/2005 23:36:16

voila moi j'ai visual basic 3 et je ne comprends pas trop tout et c'est pour savoir si je peux faire pareil que toi(ta quelle version ??) merci tcho

signaler à un administrateur
Commentaire de Scalpweb le 07/07/2005 13:17:04

C'est un tutorial pour VB5 au départ, et je ne connais pas VB3...

signaler à un administrateur
Commentaire de brioche24 le 07/07/2005 19:18:17

en fait ce VB3 je lai depuis que j'ai windobe 3.1 .. mais je l'ai gardé du moins mon pere donc je vais pas acheter le vb6 alors que j'ai le 3

signaler à un administrateur
Commentaire de Dametroid le 09/07/2005 10:01:11

ben en fait tu pourrait demander une vb.net beta2 sa te couterai rien

signaler à un administrateur
Commentaire de zemetafyzik le 23/07/2005 18:00:01

merci pour ce tuto

signaler à un administrateur
Commentaire de Scalpweb le 24/07/2005 00:48:18

Mais de rien ;-)
Merci à toi.

signaler à un administrateur
Commentaire de towelie le 16/08/2005 19:04:30

Je suis tout nouveau en visual basic et j'ai testé ton tutorial .... tout simplment   : Bravo et Merci

signaler à un administrateur
Commentaire de Scalpweb le 19/08/2005 00:30:41

Et ben merci à toi ! ;-)

signaler à un administrateur
Commentaire de ddx39 le 24/08/2005 05:23:01

il marche pas, trop d'erreurs, il arrive pas à le compiler, enfaite j'ai VB8

signaler à un administrateur
Commentaire de twintip le 04/09/2005 23:05:09

Je te dis merci car ton tuto est géniale ... il ma permit de comprendre le fonctionnement du visual basic en trop peu de temps ... merci a toi

signaler à un administrateur
Commentaire de paulgrandperrin le 09/12/2005 13:56:37

Bravo, ce tuto est genial, il permet de creer tres facilement un petit jeu sans aucune connaissance en vb et en plus de le comprendre!
Il y a juste un petit bug: la raquette du jouer1 peut sortir du cadre et ce n'est pas tres jolie! Pour y remedier je proposerai ceci:

Sub Player1Mouve()

If refY >= 3120 Then
Player1.Top = 3120
Else
Player1.Top = refY
End If

End Sub


ps: je pense que ce programme est fait pour visual basic 6

signaler à un administrateur
Commentaire de thom62220 le 18/01/2006 19:24:55

bonjours

Je suis nouveau sur VB, j'ai essayé de faire ton pong mais jai quelques problèmes dès que je fait "run" il bloque sur certain point, jte te met les phrase sur les quelles il bloque :

1°phrase sur la quelle il bloque :

If Ball.Left < (Player1.Left + Player1.Width) And Ball.Left > Player1.Left And (Ball.Top +                        ààà Ball.Width) > Player1.Top And Ball.Top < (Player1.Top + Player1.Height) Then

il me dit :"syntaxe error pour cette phrase"
j'ai bien essayé d'enlever les "à" et décrire cette phrase sur une même ligne mé aprés sa il me dit :"objet requiert"

2°phrase sur la quelle il bloque :

Private Sub Timer1_Timer()

Call MouvementP2

Call BalleRebonditEnHaut

Call BalleRebonditEnBas

Call BalleRebonditSurPlayer1

Call BalleRebonditSurPlayer2

Call MouvementDeLaBalle

Call Player1Mouve

Call Player1MarqueUnPoint

Call Player2MarqueUnPoint

End Sub

il me dit :"sub or fonction not defined"


merci de m'éclaircir les idéés et de me dire comment enlever ces bugs, merci d'avance ...

cordialement

signaler à un administrateur
Commentaire de blinix123 le 21/01/2006 02:10:24

Moi aussi je débute en VB6. Mais avec ton tutorial, de un je suis content d'avoir réalisé mon 1er jeu hihi, de deux, j'ai  vraiment eu plaisir à le réaliser, et tes explications rende le tout convivial, facile à comprendre et on apprend super bien...!!!! MERCI, une p'tite note...9/10!
pourquoi 9 ? parce que effectivement il est basique et on peut encore le modifier, par exemple: au lieu de t'embarraser de 6 timer, tu n'en mets que 2: le 1er c'est le tien, et le 2eme:

Private Sub Timer2_Timer()
Timer1.Interval = Timer1.Interval - 1
If Timer1.Interval < 1 Then Timer1.Interval = 1
End Sub
'à lui tout seul il remplace les 5 autres !

enfin voila,merci et bonne continuation à TOUS

signaler à un administrateur
Commentaire de tyrix le 19/02/2006 23:14:23

c'est marrant a realiser je suis debutant et ce code m'a fait connaitre les timer etc merci a toi

signaler à un administrateur
Commentaire de tarmilaweck le 06/06/2006 11:22:23

Pour VB.NET j'ai trouvé quelques modif à faire, mais qui ne sont pas suffisantes :
--> Les Timers ont par défaut la propriété "enabled" à "false", il faut la passer à "true";
--> pour la détection de la position du curseur il faut remplacer "Y" par "form1.mouseposition.Y"

Voilà il y a un peu de mieux mais le jeu ne marche pas quand même :-(

signaler à un administrateur
Commentaire de axllxa le 11/12/2006 22:21:15

BONJOUR A TOUS, j'ais un petit probleme pour le debut car je ne c'est pas faire exe standard apres le demarage de visual basic .merci de votre aide(je suis un pure debutant)

signaler à un administrateur
Commentaire de Scalpweb le 11/12/2006 22:47:18

Tu lances VB, puis tu fais Fichier->Nouveau

Puis, dans la boite de dialogue qui s'affiche, tu séléctionnes EXE standart.

Voili voilou.

signaler à un administrateur
Commentaire de axllxa le 12/12/2006 00:07:37

JE SUIS SOUS VISUAL BASIC 2005 EXPRESSE,est ce que ce tuto n'est pas fait pour vb6.quand je fait nouveau projet, je n'est aucun exe standard;j'ais app windows;app conssole...;peut tu me donner une solution.merci d'avance de ton aide.

signaler à un administrateur
Commentaire de cram81 le 23/03/2007 15:46:52

J'ai beaufaire le tuto au complet j'arrive pas a faire avancer la balle ou a bouger le pong du player 1. Réponder moi svp. Voici mes codes.

Public BallMouveLeft
Public BallMouveTop
Public DiffLevel
Public refY

Private Sub Deux_Click()
DiffLevel = 2
End Sub

Private Sub Form_Load()
BallMouveTop = -50
BallMouveLeft = -100
DiffLevel = 1
End Sub

Private Sub Timer1_Timer(Index As Integer)
Call MouvementP2
Call BalleRebonditEnHaut
Call BalleRebonditEnBas
Call BalleRebonditSurPlayer1
Call BalleRebonditSurPlayer2
Call MouvementDeLaBalle
Call Player1Mouve
Call Player1MarqueUnPoint
Call Player2MarqueUnPoint
End Sub
Sub MouvementP2()

If DiffLevel = 1 Then

If Ball.Top < Player2.Top Then
Player2.Top = Player2.Top - 31
End If

If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then
Player2.Top = Player2.Top + 31
End If

ElseIf DiffLevel = 2 Then

If Ball.Top < Player2.Top Then
Player2.Top = Player2.Top - 41
End If

If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then
Player2.Top = Player2.Top + 41
End If

ElseIf DiffLevel = 3 Then

If Ball.Top < Player2.Top Then
Player2.Top = Player2.Top - 55
End If

If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then
Player2.Top = Player2.Top + 55
End If

End If
End Sub
Sub BalleRebonditEnHaut()

If Ball.Top < 0 Then
BallMouveTop = 50
End If

End Sub
Sub BalleRebonditEnBas()

If (Ball.Top + Ball.Width) > 4560 Then
BallMouveTop = -50
End If

End Sub
Sub BalleRebonditSurPlayer1()

If Ball.Left < (Player1.Left + Player1.Width) And Ball.Left > Player1.Left And (Ball.Top + Ball.Width) > Player1.Top And Ball.Top < (Player1.Top + Player1.Height) Then
BallMouveLeft = 100
End If

End Sub
Sub BalleRebonditSurPlayer2()

If (Ball.Left + Ball.Width) < (Player2.Left + Player2.Width) And (Ball.Left + Ball.Width) > Player2.Left And (Ball.Top + Ball.Width) > Player2.Top And (Ball.Top + Ball.Width) < (Player2.Top + Player2.Height) Then
BallMouveLeft = -100
End If

End Sub
Sub MouvementDeLaBalle()

Ball.Top = Ball.Top + BallMouveTop

Ball.Left = Ball.Left + BallMouveLeft

End Sub
Sub Player1Mouve()

Player1.Top = refY

End Sub
Sub Player1MarqueUnPoint()

If Ball.Left > 7440 Then
P1Nbr = P1Nbr + 1
Ball.Left = 5000
Ball.Left = 5000
BallMouveLeft = -100
BallMouveTop = -50
End If

End Sub
Sub Player2MarqueUnPoint()

If Ball.Left < 10 Then
P2Nbr = P2Nbr + 1
Ball.Left = 3000
Ball.Left = 3000
BallMouveLeft = 100
BallMouveTop = 50
End If

End Sub
Private Sub Timer2_Timer(Index As Integer)
Timer1.Interval = 60
Timer2.Enabled = False
End Sub

Private Sub Timer3_Timer(Index As Integer)
Timer1.Interval = 40
Timer3.Enabled = False
End Sub

Private Sub Timer4_Timer(Index As Integer)
Timer1.Interval = 25
Timer4.Enabled = False
End Sub

Private Sub Timer5_Timer(Index As Integer)
Timer1.Interval = 20
Timer5.Enabled = False
End Sub

Private Sub Timer6_Timer(Index As Integer)
Timer1.Interval = 5
Timer6.Enabled = False
End Sub

Private Sub Trois_Click()
DiffLevel = 3
End Sub

Private Sub Un_Click()
DiffLevel = 1
Un.Visible = False
Deux.Visible = False
Trois.Visible = False
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
refY = Y
End Sub

signaler à un administrateur
Commentaire de khalid333 le 11/01/2009 22:27:02

thankx it works good

signaler à un administrateur
Commentaire de terlercomande le 21/02/2009 21:39:02

Merci sa va beaucoup m'aider !!!

signaler à un administrateur
Commentaire de terlercomande le 21/02/2009 21:39:18

Merci sa va beaucoup m'aider !!!

signaler à un administrateur
Commentaire de Xenes le 20/04/2009 18:11:13

Tr?s bon tutorial mais j'ai une erreur qui me ramm?ne ? :
Erreur de compilation : Valeur non d?finie ? Sub MouvementP2() ( Indiqu? par une fl?che jaune)

signaler à un administrateur
Commentaire de Xenes le 20/04/2009 18:11:36

Très bon tutorial mais j'ai une erreur qui me rammène à :
Erreur de compilation : Valeur non définie à Sub MouvementP2() ( Indiqué par une flèche jaune)

signaler à un administrateur
Commentaire de antho2005 le 09/06/2009 23:10:34

J'arrive après, je sais que c'est vieux mais je me permet quelques commentaires:

- "Button1.Caption = Variable1". Déjà, Variable pas déclarée donc par défaut en Variant = pas top :S. De plus, Variable1 contient un chiffre, est est donc un Integer, or Button1.Caption doit être une String, et même si VB est tolérant, il faudrait mettre: "Button1.Caption = Cstr(Variable1)" afin de transformer l'entier en chaine de caractères

- "fonction (c'est à dire entre les bornes « Private Sub» et « End Sub » )" Petite rectification: entre Private Sub et End Sub c'est une Procédure (ça ne retourne pas de valeur), entre Private Function et End Function c'est une fonction

- "Cet exemple donne pour valeur 132 à la variable Var3" Je préciserais que ça donnerais 224466 si 22, 44 et 66 avaient été entre guillemets

- "Agrandit la feuille pour qu'elle ait les dimensions suivantes : Width = 7620, Height = 5310." Galère avec la souris ^^, ça aurait pu être dans le tableau des propriétés ;)

- "Clique sur ce bouton (3ème bouton de la barre d'outils) :" Juste pour préciser aux utilisateurs de VB6 que c'est sous "Outils > Éditeur de Menu" sous VB6. Et aussi que j'aurais plutôt mis "1", "2" et "3" en tant qu'enfant d'un menu "Difficulté"

- "Maintenant, crée 6 Timer (l'icône en forme de chronomètre)." O_O 6 timers c'est beaucoup, faut essayer de limiter au maximum parce que ça bouffe du process, alors j'ai pas encore lu la suite, je sais pas si on peut limiter, je verrais après ...

- "Public BallMouveLeft
Public BallMouveTop
Public DiffLevel
Public refY" Déclarés, c'est pas mal mais As quoi ?

- "La fonction MouvementP2 se situera quelque part dans la fenêtre de code, et ressemblera à cela :
Sub MouvementP2( )
            ... blablabla ...
End Sub" Fonction => Function et pas Sub ou alors procédure mais je me répète la -_-'

- "En effet, il n'y a pas besoin de mettre « Private » devant les fonctions que tu crée toi-même, les rendants ainsi accessible à n'importe quel endroit du code." Si on ne met pas Private on peut mettre Public (mais c'est toléré sans, c'est vrai). D'ailleurs même les Private sont accessibles aux autres endroits de ton code, si ces derniers sont dans la même Form, les Private sont juste inaccessibles aux autres Form, Modules, etc.

- "If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then" ????? Oulà, pourquoi (Player2.Top + (Player2.Top / 2)) (d'ailleurs aucune parenthèse n'est nécessaire, cf les priorités de calcul) ce serait pas plutôt Player2.Top + Player2.Height

- "If Ball.Top > (Player2.Top + (Player2.Width / 2)) Then" Tiens, ça a changé entre temps ... C'est encore plus bizarre comme ça

- "a propriété Width(hauteur)" => Width = largeur et pas hauteur (Height) !!! ;)

- "Si Ball est plus haut que LE CENTRE DE Player2,Alors Player2 monte de 30 twips."

- "BallMouveTop = 50" Personnellement, j'aurais plutôt fait BallMouveTop = BallMouveTop * -1 parce que si tu change la vitesse initiale faudra que tu change ici aussi donc la galère (et puis comme ça tu peux regrouper BalleRebonditEnHaut et BalleRebonditEnBas avec un Or dans ton If (puisque ça inverse quoiqu'il se passe)

- "If (Ball.Top + Ball.Width) > 4560 Then" Toujours ce problème de Width + 4650 en dur c'est pas top, plutôt faire : If (Ball.Top + Ball.Height) > Me.ScaleHeight - Un.Height Then (il faut que ScaleMode soit en Twips) .Et je mettrais aussi un <= et >= pour BalleRebonditEnHaut et BalleRebonditEnBas. Et (encore un petit truc) les parenthèse sont pas nécessaires dans ces cas-là

- "[...] And Ball.Left > Player1.Left [...]" J'aurais mis Ball.Left + Ball.Width pour laisser un peu plus de marge ...

- "BallMouveLeft = 100" Même chose que précédemment: BallMouveLeft = BallMouveLeft * -1

- "If Ball.Left > 7440 Then" Mettre "Ball.Left > Me.ScaleWidth" (au cas ou on change la taille de la form ... Et puis c'est mieux de pas mettre une valeur brute ^^)

- "P1Nbr = P1Nbr + 1" Utilisation de la propriété par défaut d'un textbox, pas top :P, plutôt être explicite : P1Nbr.Text = Cstr(Int(P1Nbr.Text) + 1) .(Ici on change le text de P1Nbr en chiffre, on ajoute 1 et on passe le tout sous forme de chaine au texte de P1Nbr)

- "If Ball.Left < 10 Then" Plutôt Ball.Left + Ball.Width < 0 pour pas arrêter trop tôt :) Pour la ligne d'après, même chose que juste au dessus

- Alors en effet deux timers suffisent (comme dit dans un commentaire plus haut), celui qui lance les fonctions, et un autre avec un interval de 1500 par exemple et dans le code tu met Timer1.Interval = Timer1.Interval - 10, ou alors tu met a 500, et tu fais une autre variable qui augmente de 1 à chaque fois, et si elle est à 3 tu déclanche l'action de celui à 1500, à 6 celui à 3000, etc.

- T'étais pas obligé de faire des fonctions pour chaque, truc et mettre les If directement, mais je ne suis pas contre ta méthode ;)

C'est tout, donc oui je sais ce tutorial est vieux, et c'est pas un niveau très élevé, mais je pense justement que les débutant doivent partir sur de bonnes bases, et puis j'avais envie d'écrire un pavé :D

signaler à un administrateur
Commentaire de antho2005 le 09/06/2009 23:13:03

J'arrive après, je sais que c'est vieux mais je me permet quelques commentaires:

- "Button1.Caption = Variable1". Déjà, Variable pas déclarée donc par défaut en Variant = pas top :S. De plus, Variable1 contient un chiffre, est est donc un Integer, or Button1.Caption doit être une String, et même si VB est tolérant, il faudrait mettre: "Button1.Caption = Cstr(Variable1)" afin de transformer l'entier en chaine de caractères

- "fonction (c'est à dire entre les bornes « Private Sub» et « End Sub » )" Petite rectification: entre Private Sub et End Sub c'est une Procédure (ça ne retourne pas de valeur), entre Private Function et End Function c'est une fonction

- "Cet exemple donne pour valeur 132 à la variable Var3" Je préciserais que ça donnerais 224466 si 22, 44 et 66 avaient été entre guillemets

- "Agrandit la feuille pour qu'elle ait les dimensions suivantes : Width = 7620, Height = 5310." Galère avec la souris ^^, ça aurait pu être dans le tableau des propriétés ;)

- "Clique sur ce bouton (3ème bouton de la barre d'outils) :" Juste pour préciser aux utilisateurs de VB6 que c'est sous "Outils > Éditeur de Menu" sous VB6. Et aussi que j'aurais plutôt mis "1", "2" et "3" en tant qu'enfant d'un menu "Difficulté"

- "Maintenant, crée 6 Timer (l'icône en forme de chronomètre)." O_O 6 timers c'est beaucoup, faut essayer de limiter au maximum parce que ça bouffe du process, alors j'ai pas encore lu la suite, je sais pas si on peut limiter, je verrais après ...

- "Public BallMouveLeft
Public BallMouveTop
Public DiffLevel
Public refY" Déclarés, c'est pas mal mais As quoi ?

- "La fonction MouvementP2 se situera quelque part dans la fenêtre de code, et ressemblera à cela :
Sub MouvementP2( )
            ... blablabla ...
End Sub" Fonction => Function et pas Sub ou alors procédure mais je me répète la -_-'

- "En effet, il n'y a pas besoin de mettre « Private » devant les fonctions que tu crée toi-même, les rendants ainsi accessible à n'importe quel endroit du code." Si on ne met pas Private on peut mettre Public (mais c'est toléré sans, c'est vrai). D'ailleurs même les Private sont accessibles aux autres endroits de ton code, si ces derniers sont dans la même Form, les Private sont juste inaccessibles aux autres Form, Modules, etc.

- "If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then" ????? Oulà, pourquoi (Player2.Top + (Player2.Top / 2)) (d'ailleurs aucune parenthèse n'est nécessaire, cf les priorités de calcul) ce serait pas plutôt Player2.Top + Player2.Height

- "If Ball.Top > (Player2.Top + (Player2.Width / 2)) Then" Tiens, ça a changé entre temps ... C'est encore plus bizarre comme ça

- "a propriété Width(hauteur)" => Width = largeur et pas hauteur (Height) !!! ;)

- "Si Ball est plus haut que LE CENTRE DE Player2,Alors Player2 monte de 30 twips."

- "BallMouveTop = 50" Personnellement, j'aurais plutôt fait BallMouveTop = BallMouveTop * -1 parce que si tu change la vitesse initiale faudra que tu change ici aussi donc la galère (et puis comme ça tu peux regrouper BalleRebonditEnHaut et BalleRebonditEnBas avec un Or dans ton If (puisque ça inverse quoiqu'il se passe)

- "If (Ball.Top + Ball.Width) > 4560 Then" Toujours ce problème de Width + 4650 en dur c'est pas top, plutôt faire : If (Ball.Top + Ball.Height) > Me.ScaleHeight - Un.Height Then (il faut que ScaleMode soit en Twips) .Et je mettrais aussi un <= et >= pour BalleRebonditEnHaut et BalleRebonditEnBas. Et (encore un petit truc) les parenthèse sont pas nécessaires dans ces cas-là

- "[...] And Ball.Left > Player1.Left [...]" J'aurais mis Ball.Left + Ball.Width pour laisser un peu plus de marge ...

- "BallMouveLeft = 100" Même chose que précédemment: BallMouveLeft = BallMouveLeft * -1

- "If Ball.Left > 7440 Then" Mettre "Ball.Left > Me.ScaleWidth" (au cas ou on change la taille de la form ... Et puis c'est mieux de pas mettre une valeur brute ^^)

- "P1Nbr = P1Nbr + 1" Utilisation de la propriété par défaut d'un textbox, pas top :P, plutôt être explicite : P1Nbr.Text = Cstr(Int(P1Nbr.Text) + 1) .(Ici on change le text de P1Nbr en chiffre, on ajoute 1 et on passe le tout sous forme de chaine au texte de P1Nbr)

- "If Ball.Left < 10 Then" Plutôt Ball.Left + Ball.Width < 0 pour pas arrêter trop tôt :) Pour la ligne d'après, même chose que juste au dessus

- Alors en effet deux timers suffisent (comme dit dans un commentaire plus haut), celui qui lance les fonctions, et un autre avec un interval de 1500 par exemple et dans le code tu met Timer1.Interval = Timer1.Interval - 10, ou alors tu met a 500, et tu fais une autre variable qui augmente de 1 à chaque fois, et si elle est à 3 tu déclanche l'action de celui à 1500, à 6 celui à 3000, etc.

- T'étais pas obligé de faire des fonctions pour chaque, truc et mettre les If directement, mais je ne suis pas contre ta méthode ;)

C'est tout, donc oui je sais ce tutorial est vieux, et c'est pas un niveau très élevé, mais je pense justement que les débutant doivent partir sur de bonnes bases, et puis j'avais envie d'écrire un pavé :D

signaler à un administrateur
Commentaire de antho2005 le 10/06/2009 09:20:54

J'arrive après, je sais que c'est vieux mais je me permet quelques commentaires:

- "Button1.Caption = Variable1". Déjà, Variable pas déclarée donc par défaut en Variant = pas top :S. De plus, Variable1 contient un chiffre, est est donc un Integer, or Button1.Caption doit être une String, et même si VB est tolérant, il faudrait mettre: "Button1.Caption = Cstr(Variable1)" afin de transformer l'entier en chaine de caractères

- "fonction (c'est à dire entre les bornes « Private Sub» et « End Sub » )" Petite rectification: entre Private Sub et End Sub c'est une Procédure (ça ne retourne pas de valeur), entre Private Function et End Function c'est une fonction

- "Cet exemple donne pour valeur 132 à la variable Var3" Je préciserais que ça donnerais 224466 si 22, 44 et 66 avaient été entre guillemets

- "Agrandit la feuille pour qu'elle ait les dimensions suivantes : Width = 7620, Height = 5310." Galère avec la souris ^^, ça aurait pu être dans le tableau des propriétés ;)

- "Clique sur ce bouton (3ème bouton de la barre d'outils) :" Juste pour préciser aux utilisateurs de VB6 que c'est sous "Outils > Éditeur de Menu" sous VB6. Et aussi que j'aurais plutôt mis "1", "2" et "3" en tant qu'enfant d'un menu "Difficulté"

- "Maintenant, crée 6 Timer (l'icône en forme de chronomètre)." O_O 6 timers c'est beaucoup, faut essayer de limiter au maximum parce que ça bouffe du process, alors j'ai pas encore lu la suite, je sais pas si on peut limiter, je verrais après ...

- "Public BallMouveLeft
Public BallMouveTop
Public DiffLevel
Public refY" Déclarés, c'est pas mal mais As quoi ?

- "La fonction MouvementP2 se situera quelque part dans la fenêtre de code, et ressemblera à cela :
Sub MouvementP2( )
            ... blablabla ...
End Sub" Fonction => Function et pas Sub ou alors procédure mais je me répète la -_-'

- "En effet, il n'y a pas besoin de mettre « Private » devant les fonctions que tu crée toi-même, les rendants ainsi accessible à n'importe quel endroit du code." Si on ne met pas Private on peut mettre Public (mais c'est toléré sans, c'est vrai). D'ailleurs même les Private sont accessibles aux autres endroits de ton code, si ces derniers sont dans la même Form, les Private sont juste inaccessibles aux autres Form, Modules, etc.

- "If Ball.Top > (Player2.Top + (Player2.Top / 2)) Then" ????? Oulà, pourquoi (Player2.Top + (Player2.Top / 2)) (d'ailleurs aucune parenthèse n'est nécessaire, cf les priorités de calcul) ce serait pas plutôt Player2.Top + Player2.Height

- "If Ball.Top > (Player2.Top + (Player2.Width / 2)) Then" Tiens, ça a changé entre temps ... C'est encore plus bizarre comme ça

- "a propriété Width(hauteur)" => Width = largeur et pas hauteur (Height) !!! ;)

- "Si Ball est plus haut que LE CENTRE DE Player2,Alors Player2 monte de 30 twips."

- "BallMouveTop = 50" Personnellement, j'aurais plutôt fait BallMouveTop = BallMouveTop * -1 parce que si tu change la vitesse initiale faudra que tu change ici aussi donc la galère (et puis comme ça tu peux regrouper BalleRebonditEnHaut et BalleRebonditEnBas avec un Or dans ton If (puisque ça inverse quoiqu'il se passe)

- "If (Ball.Top + Ball.Width) > 4560 Then" Toujours ce problème de Width + 4650 en dur c'est pas top, plutôt faire : If (Ball.Top + Ball.Height) > Me.ScaleHeight - Un.Height Then (il faut que ScaleMode soit en Twips) .Et je mettrais aussi un <= et >= pour BalleRebonditEnHaut et BalleRebonditEnBas. Et (encore un petit truc) les parenthèse sont pas nécessaires dans ces cas-là

- "[...] And Ball.Left > Player1.Left [...]" J'aurais mis Ball.Left + Ball.Width pour laisser un peu plus de marge ...

- "BallMouveLeft = 100" Même chose que précédemment: BallMouveLeft = BallMouveLeft * -1

- "If Ball.Left > 7440 Then" Mettre "Ball.Left > Me.ScaleWidth" (au cas ou on change la taille de la form ... Et puis c'est mieux de pas mettre une valeur brute ^^)

- "P1Nbr = P1Nbr + 1" Utilisation de la propriété par défaut d'un textbox, pas top :P, plutôt être explicite : P1Nbr.Text = Cstr(Int(P1Nbr.Text) + 1) .(Ici on change le text de P1Nbr en chiffre, on ajoute 1 et on passe le tout sous forme de chaine au texte de P1Nbr)

- "If Ball.Left < 10 Then" Plutôt Ball.Left + Ball.Width < 0 pour pas arrêter trop tôt :) Pour la ligne d'après, même chose que juste au dessus

- Alors en effet deux timers suffisent (comme dit dans un commentaire plus haut), celui qui lance les fonctions, et un autre avec un interval de 1500 par exemple et dans le code tu met Timer1.Interval = Timer1.Interval - 10, ou alors tu met a 500, et tu fais une autre variable qui augmente de 1 à chaque fois, et si elle est à 3 tu déclanche l'action de celui à 1500, à 6 celui à 3000, etc.

- T'étais pas obligé de faire des fonctions pour chaque, truc et mettre les If directement, mais je ne suis pas contre ta méthode ;)

C'est tout, donc oui je sais ce tutorial est vieux, et c'est pas un niveau très élevé, mais je pense justement que les débutant doivent partir sur de bonnes bases, et puis j'avais envie d'écrire un pavé :D

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 19:08:53

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 19:09:15

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 19:09:47

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 19:11:01

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 20:22:00

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 20:22:18

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 20:23:06

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

signaler à un administrateur
Commentaire de steep0001 le 22/06/2009 20:24:33

Bonjour à tous, l'ajout du bout de code suivant vous permettra d'avoir une jolie balle ronde :

Private Sub Ball_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ball.Paint
        Dim buttonPath As New System.Drawing.Drawing2D.GraphicsPath
        Dim newRectangle As Rectangle = Ball.ClientRectangle
        newRectangle.Inflate(-10, -10)
        newRectangle.Inflate(1, 1)
        buttonPath.AddEllipse(newRectangle)
        e.Graphics.DrawPath(Pens.Black, buttonPath)
        Ball.Region = New System.Drawing.Region(buttonPath)
    End Sub


Pensez juste à augmenter la taille de 'ball' (sinon elle sera toute petite ;-P)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,201 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.