j'arrive vers ma gaziniere ,et la l'oeuf m'a échapé des mains !!
il etait tres gluant ! il voulais absolument couler par terre
heureusement ma gaziniere est pourvu de dispositif special
la preuve :
2 touches Shift et Espace // fleche du bas pour remettre l'oeuf
Code : Tout sélectionner
; realisé par Dobro en pure v 3.93
; mis en version purebasic 5.22
;- déclarations des procedures
;*******************************************************************************************************
Declare msg_erreur(chaine$)
;*******************************************************************************************************
;- test du materiel
;*******************************************************************************************************
If InitSprite ()=0
msg_erreur( "impossible d'initialiser les sprites" + Chr (10)+ " le prg va quitter " )
End
EndIf
If InitMouse ()=0
msg_erreur( "impossible d'initialiser la souris" + Chr (10)+ " le prg va quitter " )
End
EndIf
If InitKeyboard ()=0
msg_erreur( "impossible d'initialiser le clavier" + Chr (10)+ " le prg va quitter " )
End
EndIf
If InitJoystick()=0
msg_erreur( "impossible d'initialiser le joystick" + Chr (10)+ " on va continuer sans " )
joystick=0
Else
joystick=1 ; le joystick est present !!²
EndIf
InitSprite()
;*******************************************************************************************************
;-initialisations constante structure tableaux variables
;*******************************************************************************************************
Enumeration
#joystick
#window
#Sprite
#flip_gauche
#flip_droit
#bumper
#balle
#top
#topgauche
#topdroit
#gauche
#droit
#basgauche
#basdroit
#feu
#feu2
EndEnumeration
Structure balle
x.w
y.w
sensx.f
sensy.f
EndStructure
nbr_balle=0
Dim balle.balle(1) ; on cree 1 instance de balle
Structure flip
x.w
y.w
EndStructure
Dim flip.flip(1) ; 0 et 1
Structure bumper
x.w
y.w
EndStructure
Dim bumper.bumper(10) ; 0 a 3
Structure top
x.w
y.w
EndStructure
Structure feu
x.w
y.w
EndStructure
Dim feu.feu(10)
Structure feu1
x.w
y.w
EndStructure
Dim feu1.feu1(2)
Structure feu2
x.w
y.w
EndStructure
Dim feu2.feu2(2)
Structure feu3
x.w
y.w
EndStructure
Dim feu3.feu3(2)
Dim top.top(10) ; 0 et 1
; affecte des coordonees aleatoire et place les balles
xd=520
yd=150
balle(0)\x=xd ; placement de la balle
balle(0)\y=yd
balle(0)\sensx=1 ; determine le sens de deplacement de la balle et la vitesse
balle(0)\sensy=1
flip(0)\x=350
flip(0)\y=454
flip(1)\x=546
flip(1)\y=454
bumper(0)\x=300
bumper(0)\y=100
bumper(1)\x=600
bumper(1)\y=100
bumper(2)\x=300
bumper(2)\y=300
bumper(3)\x=600
bumper(3)\y=300
top(0)\x=200 ; haut
top(0)\y=50
top(1)\x=200 ; gauche
top(1)\y=50
top(2)\x=800 ; droit
top(2)\y=50
top(3)\x=200 ; basgauche
top(3)\y=500
top(4)\x=675 ; basdroit
top(4)\y=500
feu(0)\x=bumper(0)\x
feu(0)\y=bumper(0)\y
feu(1)\x=bumper(1)\x
feu(1)\y=bumper(1)\y
feu(2)\x=bumper(2)\x
feu(2)\y=bumper(2)\y
feu(3)\x=bumper(3)\x
feu(3)\y=bumper(3)\y
;*******************************************************************************************************
;-ouvre ecran
;*******************************************************************************************************
OpenWindow(#window,10,1,1024,600,"Gaziniere a Dobro",#PB_Window_SystemMenu)
OpenWindowedScreen (WindowID(#window),1,1,1024, 600, 1,1,1 )
KeyboardMode (1)
;*******************************************************************************************************
;-creation des sprites
;*******************************************************************************************************
coul=coul+10
sprite=sprite
aa= CreateSprite ( #balle ,32,32, #PB_Sprite_PixelCollision ) ; on cree un sprite (une balle)
StartDrawing ( SpriteOutput ( #balle ) ) ; on va dessiner dans le sprite
Circle (16, 16, 16, RGB ($FF,$FF,$FF)) ; on dessine un rond BLANC dedans(dans le sprite)
Circle (16, 16, 8, RGB ($FC,$FF,$84))
StopDrawing ()
ac= CreateSprite ( #flip_gauche ,128,128, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #flip_gauche ) ) ; on va dessiner dans le sprite
Circle (16, 64, 16, RGB ($F1,0,$F))
LineXY (16, 64-16, 128, 64, RGB ($F1,0,$F))
LineXY (16, 64+16, 128, 64, RGB ($F1,0,$F))
FillArea (40, 66, RGB ($F1,0,$F), RGB ($F1,0,$F))
; Plot(40,66,RGB($FF,$FF,$F))
StopDrawing ()
ae= CreateSprite ( #flip_droit ,128,128, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #flip_droit ) ) ; on va dessiner dans le sprite
Circle (128-16, 64, 16, RGB ($F1,0,$F))
LineXY (128-16, 64-16, 0, 64, RGB ($F1,0,$F))
LineXY (128-16, 64+16, 0, 64, RGB ($F1,0,$F))
FillArea (80, 66, RGB ($F1,0,$F), RGB ($F1,0,$F))
;Plot(80,66,RGB($FF,$FF,$F))
StopDrawing ()
ag= CreateSprite ( #bumper ,128,128, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #bumper ))
For i=64 To 1 Step-10
Circle (128/2, 128/2, i , RGB (10,i*2,i*2))
Next i
StopDrawing ()
ai= CreateSprite ( #top ,600,32, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #top ))
Box (0, 0, 600, 32, RGB ($FC,$F4,$65))
BackColor (RGB(0, 0 ,0))
FrontColor (RGB(0,0,0))
DrawingMode (1)
DrawText (280,8, "La gaziniere a Dobro" )
StopDrawing ()
CreateSprite ( #gauche ,32,600, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #gauche ))
Box (0, 0, 32, 600, RGB ($FC,$14,$65))
StopDrawing ()
CreateSprite ( #droit ,32,600, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #droit ))
Box (0, 0, 32, 600, RGB ($FC,$14,$65))
StopDrawing ()
CreateSprite ( #basgauche ,150,32, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #basgauche ))
Box (0, 0, 150, 32, RGB ($FC,$F4,$65))
StopDrawing ()
CreateSprite ( #basdroit ,155,32, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #basdroit ))
Box (0, 0, 155, 32, RGB ($FC,$F4,$65))
StopDrawing ()
CreateSprite ( #feu ,110,110, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #feu ))
Box (0, 0, 150, 150, RGB ($FF,$0,$0))
StopDrawing ()
CreateSprite ( #feu2 ,110,110, #PB_Sprite_PixelCollision )
StartDrawing ( SpriteOutput ( #feu2 ))
Box (0, 0, 150, 150, RGB ($FF,$F9,$0))
StopDrawing ()
RotateSprite( #feu ,30,#PB_Relative)
RotateSprite( #feu2 ,-30,#PB_Relative)
; ZoomSprite3D(#bumper3d, 64, 64)
;*******************************************************************************************************
;-boucle principale
Repeat
;- examine le materiel
;*******************************************************************************************************
ExamineKeyboard ()
KeyboardMode (1)
ExamineMouse ()
If joystick=1
ExamineJoystick (#joystick) ; optionel on examine seulement si present !!
EndIf
;*******************************************************************************************************
; serie de gosub ou appel de procedure a mettre ici
;*******************************************************************************************************
Gosub dessin_sur_ecran ; trace une ligne sur l'ecran et une serie de cercles
Gosub calcul_des_rebonds
Gosub apesanteur
Gosub avance_la_balle
;*******************************************************************************************************
;{ interroge le clavier et joystick
;- interoge le clavier
If KeyboardPushed(#PB_Key_RightShift )
RotateSprite ( #flip_droit , 30,0)
right=1
Else
RotateSprite ( #flip_droit , 0, 0)
right=0
EndIf
If KeyboardPushed(#PB_Key_LeftShift )
RotateSprite ( #flip_gauche , -30, 0)
left=1
Else
RotateSprite ( #flip_gauche ,0, 0)
left=0
EndIf
If perdu.b=1 Or balle(0)\sensx=0 And balle(0)\sensy=0
If KeyboardPushed(#PB_Key_Down )
xd=520
yd=150
balle(0)\x=xd ; placement de la balle
balle(0)\y=yd
balle(0)\sensx=1 ; determine le sens de deplacement de la balle et la vitesse
balle(0)\sensy=1
point=0
EndIf
EndIf
If KeyboardPushed(#PB_Key_Space ) ; massage
balle(0)\sensx=balle(0)\sensx-0.04
top(0)\x=200-5 ; haut
top(1)\x=200-5 ; gauche
top(2)\x=800 -5 ; droit
top(3)\x=200-5 ; basgauche
top(4)\x=675 -5 ; basdroit
bumper(0)\x=300-5
bumper(1)\x=600-5
bumper(2)\x=300-5
bumper(3)\x=600-5
Else
top(0)\x=200 ; haut
top(1)\x=200 ; gauche
top(2)\x=800 ; droit
top(3)\x=200 ; basgauche
top(4)\x=675 ; basdroit
bumper(0)\x=300
bumper(1)\x=600
bumper(2)\x=300
bumper(3)\x=600
EndIf
;}
If balle(0)\sensy<-12
balle(0)\sensy=-8
EndIf
If balle(0)\sensx<-8
balle(0)\sensx=-6
EndIf
If balle(0)\sensx>8
balle(0)\sensx=6
EndIf
;{affichage des sprites
;-affichage des sprites
;*******************************************************************************************************
;Start ()
DisplaySprite ( #flip_gauche ,flip(0)\x, flip(0)\y)
DisplaySprite ( #flip_droit ,flip(1)\x, flip(1)\y)
DisplaySprite ( #bumper ,bumper(0)\x, bumper(0)\y)
DisplaySprite ( #bumper ,bumper(1)\x, bumper(1)\y)
DisplaySprite ( #bumper ,bumper(2)\x, bumper(2)\y)
DisplaySprite ( #bumper ,bumper(3)\x, bumper(3)\y)
DisplaySprite ( #balle , balle(0)\x,balle(0)\y)
DisplaySprite ( #top , top(0)\x,top(0)\y)
DisplaySprite ( #gauche , top(1)\x,top(1)\y)
DisplaySprite ( #droit ,top(2)\x,top(2)\y)
DisplaySprite ( #basgauche , top(3)\x,top(3)\y)
DisplaySprite ( #basdroit , top(4)\x,top(4)\y)
; balle(0)\x=MouseX()
; balle(0)\y=MouseY() ;
; DisplaySprite3D( #balle3d, balle(0)\x, balle(0)\y)
;Stop ()
;*******************************************************************************************************
;}
FlipBuffers () ; affiche le resultat a l'ecran !
ClearScreen (RGB(0,0,0)) ; nettoie l'ecran apres affichage
Until KeyboardPushed ( #PB_Key_Escape ) Or MouseButton (2)
End
;{ ********* Zone des sous-programme ******************
;{ dessin_sur_ecran
;- dessin_sur_ecran
dessin_sur_ecran:
StartDrawing ( ScreenOutput ())
BackColor (RGB(0, 0 ,0))
FrontColor (RGB($3A,$AB,$81))
DrawText (10,10, "shiftgauche-et-droit pour les flips espace pour masser et fleche-bas pour relancer " )
DrawText (50,50," points :" + Str (point))
StopDrawing ()
Return
;}
;{calcul_des_rebonds
;-calcul_des_rebonds
calcul_des_rebonds:
; collision flip gauche
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #flip_gauche ,flip(0)\x, flip(0)\y)<>0 And left=1
balle(0)\sensy=- balle(0)\sensy-6
balle(0)\sensx=- balle(0)\sensx-4
ElseIf SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #flip_gauche ,flip(0)\x, flip(0)\y)<>0 And left=0
balle(0)\sensy=- balle(0)\sensy+0.08
EndIf
; collision flip droit
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #flip_droit ,flip(1)\x, flip(1)\y)<>0 And right=1
balle(0)\sensy=-balle(0)\sensy-6
balle(0)\sensx=-balle(0)\sensx-4
If balle(0)\sensy<-12
balle(0)\sensy=-8
EndIf
ElseIf SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #flip_droit ,flip(1)\x, flip(1)\y)<>0 And right=0
balle(0)\sensy=-balle(0)\sensy+0.08
EndIf
; collision bumpers
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #bumper ,bumper(0)\x, bumper(0)\y)<>0
If balle(0)\x<=bumper(0)\x Or balle(0)\x>=bumper(0)\x+64
balle(0)\sensx=-balle(0)\sensx
EndIf
If balle(0)\y<=bumper(0)\y Or balle(0)\y>=bumper(0)\y+64
balle(0)\sensy=-balle(0)\sensy
EndIf
;Start ()
DisplaytransparentSprite ( #feu , feu(0)\x+10,feu(0)\y+10)
DisplaytransparentSprite ( #feu2 , feu(0)\x+10,feu(0)\y+10)
;Stop ()
point=point+10
EndIf
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #bumper ,bumper(1)\x, bumper(1)\y)<>0
If balle(0)\x<=bumper(1)\x Or balle(0)\x>=bumper(1)\x+64
balle(0)\sensx=-balle(0)\sensx
EndIf
If balle(0)\y<=bumper(1)\y Or balle(0)\y>=bumper(1)\y+64
balle(0)\sensy=-balle(0)\sensy
EndIf
;Start ()
DisplaytransparentSprite ( #feu , feu(1)\x+10,feu(1)\y+10)
DisplaytransparentSprite ( #feu2 , feu(1)\x+10,feu(1)\y+10)
;Stop ()
point=point+10
EndIf
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #bumper ,bumper(2)\x, bumper(2)\y)<>0
If balle(0)\x<=bumper(2)\x Or balle(0)\x>=bumper(2)\x+64
balle(0)\sensx=-balle(0)\sensx
EndIf
If balle(0)\y<=bumper(2)\y Or balle(0)\y>=bumper(2)\y+64
balle(0)\sensy=-balle(0)\sensy
EndIf
;Start ()
DisplaytransparentSprite ( #feu , feu(2)\x+10,feu(2)\y+10)
DisplaytransparentSprite ( #feu2, feu(2)\x+10,feu(2)\y+10)
;Stop (
point=point+10
EndIf
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #bumper ,bumper(3)\x, bumper(3)\y)<>0
If balle(0)\x<=bumper(3)\x Or balle(0)\x>=bumper(3)\x+64
balle(0)\sensx=-balle(0)\sensx
EndIf
If balle(0)\y<=bumper(3)\y Or balle(0)\y>=bumper(3)\y+64
balle(0)\sensy=-balle(0)\sensy
EndIf
;Start ()
DisplaytransparentSprite ( #feu , feu(3)\x+10,feu(3)\y+10)
DisplaytransparentSprite ( #feu2 , feu(3)\x+10,feu(3)\y+10)
;Stop ()
point=point+10
EndIf
;************************ collision avec le decor ! *************************************************
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #top ,top(0)\x, top(0)\y)<>0
balle(0)\sensy=-balle(0)\sensy
EndIf
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #gauche ,top(1)\x, top(1)\y)<>0
balle(0)\sensx=-balle(0)\sensx
If balle(0)\sensx>0
balle(0)\sensx=balle(0)\sensx-0.2
EndIf
If balle(0)\sensx<0
balle(0)\sensx=-balle(0)\sensx-0.4
EndIf
EndIf
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #droit ,top(2)\x, top(2)\y)<>0
balle(0)\sensx=-balle(0)\sensx
If balle(0)\sensx>0
balle(0)\sensx=balle(0)\sensx-0.2
If balle(0)\sensx=0
balle(0)\sensx=0
EndIf
EndIf
If balle(0)\sensx<0
balle(0)\sensx=balle(0)\sensx-0.2
If balle(0)\sensx=0
balle(0)\sensx=0
EndIf
EndIf
EndIf
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #basgauche ,top(3)\x, top(3)\y)<>0
balle(0)\sensy=-balle(0)\sensy
If balle(0)\sensy<=0
balle(0)\sensy=balle(0)\sensy+0.08
EndIf
EndIf
If SpritePixelCollision ( #balle , balle(0)\x, balle(0)\y, #basdroit ,top(4)\x, top(4)\y)<>0
balle(0)\sensy=-balle(0)\sensy
If balle(0)\sensy<=0
balle(0)\sensy=balle(0)\sensy+0.08
EndIf
EndIf
; ***********************
Return
;}
;{apesanteur
;-apesanteur
apesanteur:
If balle(0)\sensy<=4
balle(0)\sensy=balle(0)\sensy+0.08
; Debug balle(0)\sensy
EndIf
If balle(0)\y>730
balle(0)\sensy=0
balle(0)\sensx=0
perdu.b=1
EndIf
Return
;}
;{ avance la balle
;- avance la balle
avance_la_balle:
balle(0)\x=balle(0)\x+balle(0)\sensx ; fait avancer les balles
balle(0)\y=balle(0)\y+balle(0)\sensy
Return
;}
;} ***********************************************************
; *************************************************************
;{ **************** Zone des procedures ******************
Procedure msg_erreur(chaine$)
MessageRequester ( "erreur" , chaine$, #PB_MessageRequester_Ok )
EndProcedure
;} *************************************************************
; fin
; Epb