; prg realisé par Dobro
#dobro = 1
#Police = 1
#Sprite = 1
Declare.s super_collision(sprite_numero1, x_sprite1, y_sprite1, sprite_numero2, x_sprite2, y_sprite2)
; cette procedure renvoie du quelle coté le sprite a été touché !
; sprite_numero1 = le numero du sprite 1 a tester
; largeur_spr1 = largeur en pixel du sprite numero 1
; hauteur_spr1 = hauteur en pixel du sprite numero 1
; x_sprite1 = coordonée X du sprite numero 1
; y_sprite1 = coordonée Y du sprite numero 1
; --------------------------------------------------------------------------
; sprite_numero2 = le numero du sprite 2 a tester
; largeur_spr2 = largeur en pixel du sprite numero 2
; hauteur_spr12 = hauteur en pixel du sprite numero 2
; x_sprite2 = coordonée X du sprite numero 2
; y_sprite2 coordonée Y du sprite numero 2
Enumeration
#sprite_cible
#sprite_souris
#sprite_text
EndEnumeration
Structure sprite
x.w
y.w
EndStructure
Dim sprite.sprite(1)
Dim ecran(640, 400)
For x = 0 To 640 ; oires
For y = 0 To 400
r = Random(255)
g = Random(255)
b = Random(255)
c = RGB(r, g, b)
ecran(x, y)= c
Next y
Next x
; ***********************************
Resultat = InitSprite()
FontID = LoadFont( #Police , " arial ", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_( #SM_CXSCREEN ): ; EcranY = GetSystemMetrics_( #SM_CYSCREEN ): ; WindowID = OpenWindow (1, 0, 0, 800, 600, #PB_Window_SystemMenu | #PB_Window_BorderLess | #PB_Window_ScreenCentered , " hello ")
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID, 0, 0, 800, 600, 1, 0, 0)
CreateSprite( #sprite_cible , 128, 64) ; StartDrawing ( SpriteOutput ( #sprite_cible ) ) ; Box (0, 0, 128, 64, RGB ($FF,$0,$80))
StopDrawing()
CreateSprite( #sprite_souris , 32, 32) ; StartDrawing ( SpriteOutput ( #sprite_souris ) ) ; ; Box (0, 0, 64, 64, RGB ($13,$F8,$7))
Circle(16, 16, 16, RGB($13, $F8, $7))
StopDrawing()
bord$ =" aucun bord "
CreateSprite( #sprite_text , 150, 14) ; StartDrawing ( SpriteOutput ( #sprite_text ) ) ; DrawText (bord$)
StopDrawing()
Resultat = InitMouse()
Repeat
ExamineMouse()
Event = WindowEvent()
DisplaySprite( #sprite_cible , WindowWidth() /2, WindowHeight()/2)
sprite(1)\x = WindowWidth()/2
sprite(1)\y = WindowHeight()/2
DisplaySprite( #sprite_souris , MouseX(), MouseY())
DisplaySprite( #sprite_text , 10, 10)
bord$ = super_collision( #sprite_cible , sprite(1)\x, sprite(1)\y, #sprite_souris , MouseX(), MouseY())
StartDrawing( SpriteOutput( #sprite_text ) ) ; DrawingMode (0)
DrawText(bord$)
DrawText(" ")
StopDrawing()
If MouseButton(2)
End
Endif
FlipBuffers(): ; ClearScreen (0, 0, 0) : ; Until Event = #PB_Event_CloseWindow
Procedure super_collision(sprite_numero1, x_sprite1, y_sprite1, sprite_numero2, x_sprite2, y_sprite2)
spr1_milieu_x = x_sprite1 + SpriteWidth(sprite_numero1) /2
spr1_milieu_y = y_sprite1 + SpriteHeight(sprite_numero1)/2
spr2_milieu_x = x_sprite2 + SpriteWidth(sprite_numero2)/2
spr2_milieu_y = y_sprite2 + SpriteHeight(sprite_numero2)/2
spr1_hauteur = SpriteHeight(sprite_numero1)
spr1_largeur = SpriteWidth(sprite_numero1)
spr2_hauteur = SpriteHeight(sprite_numero2)
spr2_largeur = SpriteWidth(sprite_numero2)
bord$ =""
If SpriteCollision(sprite_numero1, x_sprite1, y_sprite1, sprite_numero2, x_sprite2, y_sprite2)
If bord$<>""
Goto dobrosuite
Endif
If(spr2_milieu_x)>x_sprite1 And(spr2_milieu_x)<(x_sprite1 + spr1_largeur) And(spr2_milieu_y)>(y_sprite1 + spr1_hauteur )
bord$ =" bas "
Goto dobrosuite
Endif
If(spr2_milieu_x)>x_sprite1 And(spr2_milieu_x)<(x_sprite1 + spr1_largeur) And(spr2_milieu_y)<y_sprite1
bord$ =" haut "
Goto dobrosuite
Endif
If(spr2_milieu_y)>y_sprite1 And(spr2_milieu_y)<(y_sprite1 + spr1_hauteur) And(spr2_milieu_x)>(x_sprite1 + spr1_largeur)
bord$ =" droit "
Goto dobrosuite
Endif
If(spr2_milieu_y)>y_sprite1 And(spr2_milieu_y)<(y_sprite1 + spr1_hauteur) And(spr2_milieu_x)<x_sprite1
bord$ =" gauche "
Goto dobrosuite
Endif
If(spr2_milieu_x)<x_sprite1 And(spr2_milieu_y)<y_sprite1
bord$ =" haut-gauche "
Endif
If(spr2_milieu_x)>x_sprite1 + spr1_largeur And(spr2_milieu_y)<y_sprite1
bord$ =" haut-droit "
Endif
If(spr2_milieu_y)>y_sprite1 + spr1_hauteur And(spr2_milieu_x)<x_sprite1
bord$ =" bas-gauche "
Endif
If(spr2_milieu_y)>y_sprite1 + spr1_hauteur And(spr2_milieu_x)>x_sprite1 + spr1_largeur
bord$ =" bas-droit "
Endif
Endif
dobrosuite:
ProcedureReturn bord$
EndProcedure