regarde à nouveau le schéma de Cpl.Bator, et place des repères pour t'aider à y voir plus clair, voyez:
Code : Tout sélectionner
; cours 2D: pong facile
If InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0
MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
End
EndIf
;Enumeration ; ici, on donne un petit nom à nos sprites( non, chuis pas un numéro !):
; #irepere ; permet au progammeur de repèrer les positions des divers objets qu'il teste à l'écran...
;EndEnumeration
ScreenX.i = 1024 ;la longueur de la fenetre en plein ecran
ScreenY.i = 768 ; La largeur de la fenetre en plein ecran
Rayon.i = 20 ;j'ai agrandi le rayon du cercle
; Direction de la babale
Dir_Haut = 1
Dir_Bas = 0
Dir_Droite = 1
Dir_Gauche =0
Vitesse = 5-3 ;- vitesse de la balle, là, ici, coucou !
BalleX= ScreenX / 2
BalleY= ScreenY / 2
;- raquette à gauche de l'écran:
RaquetteGX.w= 100
RaquetteGY.w= 384
RaquetteGHauteur.w= 100
RaquetteGLargeur.w= 20
;- raquette à droite de l'écran:
RaquetteDX.w= 850
RaquetteDY.w= 0
RaquetteDHauteur.w= 100
RaquetteDLargeur.w= 25
; Box(RaquetteDX, RaquetteDY, RaquetteDLargeur, RaquetteDHauteur,RGB(255,255,255))
;OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur
If OpenWindow ( 0 , 0, 0, ScreenX+100,ScreenY, "vers l'infini 0.4" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar| #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_ScreenCentered )
OpenWindowedScreen ( WindowID ( 0 ), 0, 0, ScreenX,ScreenY, 0, 1, 1) ; un ecran graphique dans la fenêtre toute simple.
SetWindowColor(0, RGB (0, 0, 0))
EndIf
KeyboardMode(#PB_Keyboard_International)
; CreateSprite ( #irepere , 4, 4 ) ; test utile pour le programmeur
; StartDrawing ( SpriteOutput ( #irepere ))
; BackColor ( RGB (0,0,0))
; Box (0,0, 5, 5, RGB (190, 27, 27))
; StopDrawing ()
; ******************************************************************************************************
Repeat ; Boucle principale
; ******************************************************************************************************
Event= WindowEvent ()
ExamineKeyboard()
ExamineMouse() ;Examine la position de la souris je crois
x = MouseX()
y = MouseY()
;Mouvement de la balle
If Dir_Haut = 1
BalleY - Vitesse
EndIf
If Dir_Bas = 1
BalleY + Vitesse
EndIf
If Dir_Droite = 1
BalleX + Vitesse
EndIf
If Dir_Gauche = 1
BalleX - Vitesse
EndIf
;Colllision avec le Haut de l'écran. le haut est egal a 0
If BalleY-Rayon < 0
Dir_Bas=1
Dir_Haut=0
EndIf
;Colllision avec le Bas de l'écran. le bas est egal a ScreenY
If BalleY+Rayon > ScreenY
Dir_Bas=0
Dir_Haut=1
EndIf
;Colllision avec la GAUCHE de l'écran. egal a 0
If BalleX-Rayon < 0
Dir_Gauche=0
Dir_Droite=1
EndIf
;Colllision avec la DROITE de l'écran. egal a 0 ScreenX
If BalleX+Rayon > ScreenX
Dir_Gauche=1
Dir_Droite=0
EndIf
;Collision avec la raquettes gauche
If Ballex-Rayon < RaquetteGX + RaquetteGLargeur ; La balle dépasse la raquette gauche
; COLLISION !!!!
If balley+Rayon > RaquetteGY And balley-Rayon < RaquetteGY + RaquetteGHauteur
Dir_Gauche=0
Dir_Droite=1
EndIf
EndIf
RaquetteGY = BalleY - RaquetteGHauteur/2
StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat
;Box(850,y-50,25,100,RGB(255,255,255))
;- raquete interactive:
Box(RaquetteDX, RaquetteDY+y, RaquetteDLargeur, RaquetteDHauteur,RGB(255,255,255))
Box(RaquetteGX, RaquetteGY ,RaquetteGLargeur,RaquetteGHauteur,RGB(255,255,255))
Circle(BalleX,BalleY , Rayon,RGB(255,255,255))
;le cercle est egal a la position x et y de la souris grace a Repeat le cercle renouvelle a
;chaque fois la position de la souris ce qui fait que le cercle suit la souris et qu'il a une couleur marron
;- test du codeur:
Box (RaquetteDX, RaquetteDY+y, 4, 4, RGB (255, 27, 27))
Box (RaquetteDX, RaquetteDY+y+100, 4, 4, RGB (255, 27, 27))
Box (BalleX+Rayon,BalleY, 4, 4, RGB (255, 27, 27)) ;- <- là
StopDrawing() ;on arrete supprime (ou arrete le dessin
;- pas de sprite pour l'instand, car c'est encore trop tôt.
; DisplayTransparentSprite( #irepere , 100,100);RaquetteDX-200, RaquetteDY+y)
FlipBuffers()
ClearScreen(RGB(0,0,0))
; ******************************************************************************************************
If Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape ):End:EndIf; si clique coin haut droit ou touche Esc, alors ferme fenêtre.
ForEver