UN PONG QUI MARCHE TOUT SEUL !!!

Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 - 15 août 2005 à 22:53
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015 - 24 août 2005 à 07:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33256-un-pong-qui-marche-tout-seul

cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
24 août 2005 à 07:33
pour ne pas afficher les valeurs, il suffit de mettre des directives
#if DEBUG
commandes
#end if

et de définir la directive DEBUG dans les options de compilation du projet
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 août 2005 à 20:34
une commande qui te seras bien pratique : Debug.print

comme l'a souligné Cheyenne, ce projet contient peu de contrôles, donc çà passe encore..
pour l'exemple, tu peux ajouter un timer à intervalle 200, qui contiendrait

Debug.Print Haut; Bas; Gauche; Droite
(par exemple)

tu as ainsi, 5fois par seconde, les valeurs de tes variables qui s'afficheront dans ta fenêtre d'execution (en bas de VB, par défaut)

plus qu'à ajouter une cote ['] pour transformer cette ligne en commentaire, lorsque tu post ton projet. ces résultats de gènent personne, et on comprend facilement tant "comment" les relire, que "pourquoi" ce timer existe....

bonne continuation
PCPT
atila612 Messages postés 13 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 13 mai 2009
23 août 2005 à 20:22
Oui pour les labels je me suis apersus que personne ne faisait comme ca mais moi j'ais apris seul ( j'ai 15 ans) et je trouve plus claire d'avoir des labels car au départ je ne les cache pas et comme ca je peut voir si il y a un bug et d'ou il vient.Et merci a vous pour votre aide ... atila612
PS : je vais m'abituer au variable .....
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
18 août 2005 à 09:52
Juste pour le

Randomize 'permet de ne pas avoir toujours les même suites. calcul lié à l'heure se son appel

Il suffit de le mettre une fois en début de programme, sinon vb regenère une suite à chaque appel.

Pour les nomenclatures de contrôles, il y a deux écoles (j'ai pas de préférence, les deux sont bien): une qui consiste à nommer en fonction de la nature (lblMonLabel) et une qui consiste à nommer en fonction de la fonction du contrôle (ui pour interface utilisateur, in -INput- pour ce qui est saisie etc.)
Le première façon était très bien quand on n'avait pas la saisie automatique, maintenant j'utilise les deux
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 août 2005 à 14:31
tout à fait d'accord Cheyenne. là, j'ai voulu privilégier la lecture, mais garder le type du contrôle dans son nom est une règle à respecter.
bien faire aussi attention au diminutif que l'on donne.
exemple, ne pas mettre "FRM_MonNomDeControle" pour des Form et des Frame... (déjà vu!)

Atila612, comme tu peux le voir dans mon précédent post, la Form est grise, et noire seulement à l'execution. pense que même en voulant "soigner l'esthétique", il ne faut pas que tu perdes trop de temps, si ce n'est que, par exemple, en cherchant 3/4heure ton pointeur de souris en posant un contrôle, parce qu'il est aussi noir que ta Form ;)

bonne continuation (à tous d'ailleurs)
PCPT
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
16 août 2005 à 12:49
Bonjour PCPT,

Vous avez grandement optimisé le code et amélioré sa lisibilité (donc sa compréhension) et vos conseils en préambule sont judicieux.
Mais je me permet une simple remarque, vous dites 'nommer ses contrôles'. Oui, mais en les faisant précéder de leur identification conventionelle : shpJouer_haut, shpBalle, etc...
Dans le code on lit : Joueur_Haut.Left = Balle.Left - 300
On sait qu'il s'agit bien de contrôles, mais de quel type ?
Evidemment, ici, les contrôles ne foisonnent pas mais sur une Form en comportant beaucoup, il est ainsi plus aisé de les identifier. C'est une bonne habitude à prendre également.

Amicalement,
Cheyenne
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
16 août 2005 à 08:02
Salut !

Pour ma part j'ajouterais : respecter l'indentation (un retrait supplémentaire à chaque imbrication), sans quoi ton programme risque d'être illisible.

Cordialement,
Cacophrène
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 août 2005 à 02:42
salut,

ouai, c'est plutôt pas mal pour un début, mais faut deviner plus qu'autre chose.

voici quelques conseils :

*nommer ses contrôles
*déclarer et nommer ses variables au mieux, et les Typer correctement (entier, chaîne, etc...)
*éviter de mettre trop de contrôles, quand on peut faire sans
*éviter les variables accentuées
*commencer sa Form par "Option Explicit". çà t'oblige à déclarer les variables et déclanche une erreur en cas d'oublie.

ici, aucun Label n'est utile, et le Timer3 non plus.
dans ton Timer3, tu regardes à chaque dixième de seconde si tu dois regénérer des nombres aléatoires. tu peux très bien le faire dans le Timer2.

et les pictures, tu as une Shape pour la balle, autant faire pareil avec les raquettes. oubien utiliser des vraies images pour les 3 ;)

trêve de blabla, j'espère que ceci pourra t'aider. tu as juste à copier dans le bloc-note, et renommer avec l'extention .frm, puis doucle-cliquer.

bonne continuation
PCPT






VERSION 5.00
Begin VB.Form Form_modifiee
AutoRedraw = -1 'True
BackColor = &H00C0C0C0&
BorderStyle = 4 'Fixed ToolWindow
Caption = "Ball"
ClientHeight = 7455
ClientLeft = 45
ClientTop = 390
ClientWidth = 7440
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 7455
ScaleWidth = 7440
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows Default
Begin VB.Timer Timer_Random
Interval = 10
Left = 960
Top = 2280
End
Begin VB.Timer Timer_Move
Interval = 1
Left = 960
Top = 1680
End
Begin VB.Shape Joueur_Haut
BorderColor = &H00FFC0C0&
FillColor = &H80000010&
FillStyle = 0 'Solid
Height = 375
Left = 3000
Top = 0
Width = 1215
End
Begin VB.Shape Joueur_Bas
BorderColor = &H00FFC0C0&
FillColor = &H80000010&
FillStyle = 0 'Solid
Height = 375
Left = 2880
Top = 7080
Width = 1215
End
Begin VB.Shape Balle
BackStyle = 1 'Opaque
BorderColor = &H00C0FFC0&
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 495
Left = 2160
Shape = 3 'Circle
Top = 5160
Width = 495
End
Begin VB.Line Line3
BorderColor = &H80000001&
X1 = 7080
X2 = 7080
Y1 = 0
Y2 = 7440
End
Begin VB.Line Line1
BorderColor = &H80000001&
X1 = 360
X2 = 360
Y1 = 0
Y2 = 7440
End
End
Attribute VB_Name = "Form_modifiee"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit 'sert à être obligé de déclarer chaque variable. peu faire éviter pas mal d'erreurs


Dim Haut As Integer, Bas As Integer, Gauche As Integer, Droite As Integer
Dim Random As Boolean
Dim RandHaut As Integer, RandBas As Integer, RandGauche As Integer, RandDroite As Integer
'
'
'
Private Sub Form_Load()
'couleur fond noir
Me.BackColor = 0

'init variables
Haut 1: Bas 0: Gauche = 1: Droite = 0
Random = False
RandHaut 20: RandBas 20: RandGauche = 20: RandDroite = 20
End Sub
'
'
'
Private Sub Timer_Move_Timer()

'balle haut
If Haut = 1 Then
Joueur_Haut.Left = Balle.Left - 300
Balle.Top = Balle.Top - RandHaut
End If

'balle bas
If Bas = 1 Then
Joueur_Bas.Left = Balle.Left - 300
Balle.Top = Balle.Top + RandBas
End If

'balle gauche/droite
If Gauche 1 Then Balle.Left Balle.Left - RandGauche
If Droite 1 Then Balle.Left Balle.Left + RandDroite

'limites verticales
If Balle.Top < 360 Then
Haut 0: Bas 1
Random = True
ElseIf Balle.Top > 6600 Then
Haut 1: Bas 0
Random = True
End If

'limites horizontales
If Balle.Left < 360 Then
Droite 1: Gauche 0
Random = True
ElseIf Balle.Left > 6600 Then
Droite 0: Gauche 1
Random = True
End If

End Sub
'
'
'
Private Sub Timer_Random_Timer()
Static Cpt As Integer ' on compte pour l'aléatoire, permettant de supprimer ton Timer3
Cpt = Cpt + 1

If Cpt = 10 Then
Cpt = 0
If Random Then Random = False
End If


If Random Then
Randomize 'permet de ne pas avoir toujours les même suites. calcul lié à l'heure se son appel

RandHaut = Int((100 * Rnd) + 30)
RandBas = Int((100 * Rnd) + 30)
RandGauche = Int((100 * Rnd) + 30)
RandDroite = Int((100 * Rnd) + 30)
Random = False
End If

End Sub
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
16 août 2005 à 01:20
Salut,

voilà mêmes remarques : les labels aux lieu de variables, c'est pas trés joli ... La presentation de ton coden'est pas top ... et c'est comme à l'école, on devoir juste mais sur un torchons, c'est une pénalitée assurée...

Apres perso, utiliser des composant sans les nommer ça aide pas forcément à comprendre ton code : par exemple, à froid si tu lis

Shape1.Top = Shape1.Top - Label1.Caption

tu comprend pas forcément qui est shape1,qui est label1 alors que

Balle.Top = Balle.Top - Décalage

est tout de mêm plus clair !!

Mais bon ça marche...

++

Zlub
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
15 août 2005 à 22:53
Slu

c un peu le bordel (j ai pas vraiment l utilite des label ... tu pouvais utilise des variables)en tout les cas a l air de marcher !
sinon essaie de mieux "presenter" le code c plus facile pour la comprehension et le debugage.

par exemple :
if (i=1)
i=0
end if
Rejoignez-nous