Publié : sam. 17/janv./2009 22:11
je ne sait pas faire de collision
Forums PureBasic - Français
http://forums.purebasic.com/french/
Code : Tout sélectionner
InitSprite() : InitKeyboard() ;le demarrage du sprite et du clavier
InitMouse() ;j'ai démarrer la souris
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
BalleX= ScreenX / 2
BalleY= ScreenY / 2
OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur
Repeat ;repete la meme procedure a chaque fois
ClearScreen(RGB(0,0,0)) ; la scene a une couleur verte
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 droite de l'écran. egal a 0
If BalleX-Rayon < 0
Dir_Gauche=0
Dir_Droite=1
EndIf
;Colllision avec la gauche de l'écran. egal a 0 ScreenX
If BalleX+Rayon > ScreenX
Dir_Gauche=1
Dir_Droite=0
EndIf
StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat
Box(850,y-50,25,100,RGB(255,255,255))
Box(150,BalleY-50,25,100,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
StopDrawing() ;on arrete supprime (ou arrete le dessin
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) ;on appuie sur echap pour quitter
on connais aussi le bord gauche de l'écran , qui vaut 0Ballex - rayon
Code : Tout sélectionner
If BalleX-Rayon < 0 ; le bord gauche de la balle sort de l'écran
Dir_Gauche=0 ; elle ne va plus a gauche
Dir_Droite=1 ; mais a droite
EndIf ; fin de la condition
InitSprite() : InitKeyboard() ;le demarrage du sprite et du clavier
InitMouse() ;j'ai démarrer la souris
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
BalleX= ScreenX / 2
BalleY= ScreenY / 2
RaquetteGaucheX= 100
RaquetteGaucheY= 384
RaquetteHauteur= 100
RaquetteLargeur= 20
OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur
Repeat ;repete la meme procedure a chaque fois
ClearScreen(RGB(0,0,0)) ; la scene a une couleur verte
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 < RaquetteGaucheX + RaquetteLargeur ; La balle dépasse la raquette gauche
; COLLISION !!!!
If balley+Rayon > RaquetteGaucheY And balley-Rayon < RaquetteGaucheY + RaquetteHauteur
Dir_Gauche=0
Dir_Droite=1
EndIf
EndIf
RaquetteGaucheY = BalleY - RaquetteHauteur/2
StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat
Box(850,y-50,25,100,RGB(255,255,255))
Box(RaquetteGaucheX, RaquetteGaucheY ,RaquetteLargeur,RaquetteHauteur,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
StopDrawing() ;on arrete supprime (ou arrete le dessin
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) ;on appuie sur echap pour quitter
au collège, on apprend les coordonnées x et y... courage !guerrier001 a écrit :Je ne suis pas arriver. Desoler
Code : Tout sélectionner
InitSprite() : InitKeyboard() ;le demarrage du sprite et du clavier
InitMouse() ;j'ai démarrer la souris
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
BalleX= ScreenX / 2
BalleY= ScreenY / 2
RaquetteGaucheX= 100
RaquetteGaucheY= 384
RaquetteDroiteX= 900
RaquetteDroiteY= 100
RaquetteHauteur= 100
RaquetteLargeur= 20
OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur
Repeat ;repete la meme procedure a chaque fois
ClearScreen(RGB(0,0,0)) ; la scene a une couleur verte
ExamineKeyboard()
;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 => RaquetteDroiteX - RaquetteLargeur ; La balle dépasse la raquette gauche
; COLLISION !!!!
If balley+Rayon > RaquetteDroiteY And balley-Rayon < RaquetteDroiteY + RaquetteHauteur
Dir_Gauche=1
Dir_Droite=0
EndIf
EndIf
RaquetteDroiteY = BalleY - RaquetteHauteur/2
;Collision avec la raquettes gauche
If Ballex-Rayon < RaquetteGaucheX + RaquetteLargeur ; La balle dépasse la raquette gauche
; COLLISION !!!!
If balley+Rayon > RaquetteGaucheY And balley-Rayon < RaquetteGaucheY + RaquetteHauteur
Dir_Gauche=0
Dir_Droite=1
EndIf
EndIf
RaquetteGaucheY = BalleY - RaquetteHauteur/2
StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat
Box(RaquetteDroiteX,RaquetteDroiteY ,RaquetteLargeur,RaquetteHauteur,RGB(255,255,255))
Box(RaquetteGaucheX, RaquetteGaucheY ,RaquetteLargeur,RaquetteHauteur,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
StopDrawing() ;on arrete supprime (ou arrete le dessin
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) ;on appuie sur echap pour quitter