mini jeu - casse brique (compatible PB/SB)
Publié : mer. 21/sept./2016 9:49
Salut les codeurs,
j'ai fais un petit casse brique compatible PB et SB
quelques petits problèmes en SB (MouseDeltaX(), vectordrawing anormalement lent (cf bugs reports)...)
mais a part ça on peut déjà presque tout faire
je sens que je vais sortir des petits jeux internet a la pelle grâce SB
j'espere que ça vous donnera aussi envie d'en faire
PS : désolé, pas de bruitage, je m'étais fais un petit generateur de son, mais il marche plus en PB 5.50...
j'ai fais un petit casse brique compatible PB et SB
quelques petits problèmes en SB (MouseDeltaX(), vectordrawing anormalement lent (cf bugs reports)...)
mais a part ça on peut déjà presque tout faire
je sens que je vais sortir des petits jeux internet a la pelle grâce SB
j'espere que ça vous donnera aussi envie d'en faire
PS : désolé, pas de bruitage, je m'étais fais un petit generateur de son, mais il marche plus en PB 5.50...
Code : Tout sélectionner
EnableExplicit
Structure objet
x.f
y.f
dx.f
dy.f
s.w
EndStructure
Global ex=800,ey=600,zoom.f,titre.s="Casse Brique"
Global NewMap b.objet() ;balles
Global NewMap t.objet() ;tires
Global NewMap e.objet() ;explosion
Global Dim niv.s(10)
Global Dim n.b(30,20)
Global Dim btrans(24)
Global rx,ry=ey-64+8,rl,nbr,tire
Global niveau,score
InitSprite()
InitMouse()
InitKeyboard()
CompilerIf #PB_Compiler_OS<>5
#SBCol=0
ExamineDesktops()
zoom=DesktopHeight(0)/600
Macro xend:End:EndMacro
Macro xClipPath(v):ClipPath(v):EndMacro
Macro xReleaseMouse(v):ReleaseMouse(v):EndMacro
Macro xRenderFrame:Repeat:While WindowEvent():Wend:RenderFrame(): ForEver:EndMacro
CompilerElse
#SBCol=$ff000000
zoom=1
Macro xend:ReleaseMouse(1):EndMacro
Macro xClipPath(v):zoom=1:EndMacro
Macro xReleaseMouse(v):zoom=1:EndMacro
Macro xRenderFrame:BindEvent(#PB_Event_RenderFrame, @RenderFrame()):FlipBuffers():EndMacro
CompilerEndIf
Procedure CoMelange(c1.l, c2.l, m.f)
Protected r.w,g.w,b.w,a.w
r= Red(c1) + (Red(c2) - Red(c1)) * m
g=Green(c1) + (Green(c2) - Green(c1)) * m
b= Blue(c1) + (Blue(c2) - Blue(c1)) * m
a=Alpha(c1) + (Alpha(c2) - Alpha(c1)) * m
ProcedureReturn RGBA(r,g,b,a)
EndProcedure
Macro cola(col,a=$ff):((col|(a<<24))!#SBCol):EndMacro
Procedure.f POM(v.f)
ProcedureReturn (Random(v*1000)-v*500)/500
EndProcedure
Macro limite(v,min,max)
If v<min:v=min:EndIf
If v>max:v=max:EndIf
EndMacro
Procedure NVballe()
Static cpt:cpt+1
Define bb.objet=b():b()\dx=pom(4):b()\s=1
b(Str(cpt))=bb
EndProcedure
Procedure NVtire()
Static cpt:cpt+1
Define tt.objet:tt\x=rx:tt\y=ry-16:tt\dy=-8:tt\s=3
t(Str(cpt))=tt
EndProcedure
Procedure NVexplosion(x,y)
Static cpt:cpt+1
Define ee.objet:ee\x=x:ee\y=y:ee\s=255
e(Str(cpt))=ee
EndProcedure
Procedure.b collision(x,y,objet)
Protected i=x/32,j=y/32,brique,transf
limite(i,0,24)
brique=n(i,j):If brique=0:ProcedureReturn:EndIf
transf=btrans(brique)
If transf=0:nbr-1:score+1:NVexplosion(i*32-8,j*32-8):EndIf
If objet
Select brique
Case 2 :NVballe()
Case 3 :b()\s=2
Case 4 :rl=128
Case 5 :tire=1
EndSelect
EndIf
n(i,j)=transf
If (objet=2 And transf>0) Or (objet<2 And brique>0):ProcedureReturn 1:EndIf
EndProcedure
Procedure message(txt.s)
Macro dt(nf,y,t,col)
DrawingFont(FontID(nf))
DrawText((OutputWidth()-TextWidth(t))/2,y,t,col!#SBCol)
EndMacro
CreateSprite(30,ex*0.6,ey*0.4,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(30))
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0,0,ex*0.6,ey*0.4,0!#SBCol)
RoundBox(0,0,ex*0.6,ey*0.4,100,100,$88004444!#SBCol)
DrawingMode(#PB_2DDrawing_AlphaBlend |#PB_2DDrawing_Transparent)
dt(3,30,txt,$ffffffff)
dt(2,100,"APPUYER SUR UNE TOUCHE",$ff00ffff)
dt(1,160,"[Echap] Pause / Menu / Quitter [F1] Editeur",$ff00ffff)
dt(1,180,"(Souris) ou [<] Gauche [>] Droite [/\] Tire",$ff00ffff)
dt(1,200,"[+] [-] Changer de niveau",$ff00ffff)
StopDrawing()
EndProcedure
Procedure initdecor()
Protected i,j,k,c,ca,c1,c2, x,y,r,a1,a2,a3
Macro DrawingSprite(n,dx,dy)
CreateSprite(n,dx,dy,#PB_Sprite_AlphaBlending)
CreateImage(0,dx,dy,32,#PB_Image_Transparent)
StartVectorDrawing(ImageVectorOutput(0))
EndMacro
Macro StopDrawingSprite(n)
StopVectorDrawing()
StartDrawing(SpriteOutput(n))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawAlphaImage(ImageID(0),0,0)
StopDrawing()
EndMacro
;fond
DrawingSprite(10,ex,ey)
VectorSourceColor(cola(Random($ffffff)))
FillVectorOutput()
a1=64:a2=a1/2:a3=0:If niveau & 1:Swap a1,a3:EndIf
For i=0 To ex Step 40
For j=0 To ey Step 40
x=i+Random(40)
y=j+Random(40)
r=10+Random(50)
c=Random($ffffff)
VectorSourceCircularGradient(x, y, r)
VectorSourceGradientColor(cola(c,a1),0.0)
VectorSourceGradientColor(cola(c,a2),0.8)
VectorSourceGradientColor(cola(c,a3),0.95)
VectorSourceGradientColor(cola(c,0 ),1.0)
AddPathCircle(x,y,r)
FillPath()
Next
Next
stopDrawingSprite(10)
;score
CreateSprite(20,ex/2,32,#PB_Sprite_AlphaBlending)
;raquette
DrawingSprite(0,128,16)
AddPathEllipse(64,8,62,7)
VectorSourceLinearGradient(64,0,64,16)
VectorSourceGradientColor(cola($00ff00), 0.0)
VectorSourceGradientColor(cola($ff0000), 1.0)
FillPath(#PB_Path_Preserve)
VectorSourceColor(cola($ffffff)):StrokePath(2)
stopDrawingSprite(0)
;balle
DrawingSprite(1, 16,16)
AddPathCircle(8,8,6)
VectorSourceCircularGradient(8, 8, 8, -2, -2)
VectorSourceGradientColor(cola($ffffff), 0.0)
VectorSourceGradientColor(cola($888888), 1.0)
FillPath()
stopDrawingSprite(1)
;balle (grosse)
DrawingSprite(2, 16,16)
AddPathCircle(8,8,8)
VectorSourceCircularGradient(8, 8, 8, -2, -2)
VectorSourceGradientColor(cola($00ffff), 0.0)
VectorSourceGradientColor(cola($008888), 1.0)
FillPath()
stopDrawingSprite(2)
;tire
DrawingSprite(3, 8,32)
AddPathEllipse(4,16,4,16)
VectorSourceCircularGradient(4, 10, 20)
VectorSourceGradientColor(cola($00ffff), 0.0)
VectorSourceGradientColor(cola($0000ff), 1.0)
FillPath()
stopDrawingSprite(3)
;canon
DrawingSprite(4, 16,20)
VectorSourceLinearGradient(0, 0,16,0)
VectorSourceGradientColor(cola($444444), 0.0)
VectorSourceGradientColor(cola($ffffff), 0.3)
VectorSourceGradientColor(cola($444444), 1.0)
FillVectorOutput()
stopDrawingSprite(4)
;explosion
DrawingSprite(5, 48,48)
AddPathCircle(24,24,24)
VectorSourceCircularGradient(24,24,24)
VectorSourceGradientColor(cola($ffffff), 0.0)
VectorSourceGradientColor(cola($00ffff), 0.6)
VectorSourceGradientColor(cola($00ffff,0), 1.0)
FillPath()
stopDrawingSprite(5)
;briques
Protected Dim col.l(23)
For i=0 To 23
c=Random($ffffff):col(i)=c
DrawingSprite(64+i, 32,32)
Select i
Case 0
AddPathBox(2,2,28,28)
VectorSourceColor(cola($ffffff))
StrokePath(3)
Case 1
btrans(1)=1
VectorSourceColor(cola($888888)):FillVectorOutput()
For j=0 To 31 Step 4
For k=0 To 31 Step 4
AddPathCircle(k+1,j+1,1):VectorSourceColor(cola($aaaaaa)):FillPath()
AddPathCircle(k+3,j+3,1):VectorSourceColor(cola($666666)):FillPath()
Next
Next
Case 2 To 11
ca=c|$ff000000
AddPathBox(2,2,28,28)
VectorSourceCircularGradient(16,16,17, -8,-8)
VectorSourceGradientColor(CoMelange($ffffffff,ca, 0.0), 0.0)
VectorSourceGradientColor(CoMelange($ffffffff,ca, 0.2), 0.1)
VectorSourceGradientColor(CoMelange(ca,$ff000000,0.2), 0.9)
VectorSourceGradientColor(CoMelange(ca,$ff000000,0.4), 0.99)
VectorSourceGradientColor(CoMelange($00000000,ca, 0.0), 1.0)
FillPath()
Select i
Case 2
AddPathCircle(10,16,3)
AddPathCircle(22,16,3)
VectorSourceColor(cola($ffffff)):FillPath(#PB_Path_Preserve)
VectorSourceColor(cola($000000)):StrokePath(1)
Case 3
AddPathCircle(16,16,5)
VectorSourceColor(cola($00ffff)):FillPath(#PB_Path_Preserve)
VectorSourceColor(cola($ff0000)):StrokePath(1)
Case 4
AddPathSegments("M 6 16 L 14 10 L 14 14 L 18 14 L 18 10 L 26 16 L 18 22 L 18 18 L 14 18 L 14 22 Z")
VectorSourceColor(cola($000000)):FillPath(#PB_Path_Preserve)
VectorSourceColor(cola($ffffff)):StrokePath(1)
Case 5
AddPathEllipse(16,16,3,6)
VectorSourceColor(cola($0088ff)):FillPath(#PB_Path_Preserve)
VectorSourceColor(cola($ff8800)):StrokePath(1)
EndSelect
Case 12 To 23
AddPathBox(2,2,28,28)
xClipPath(#PB_Path_Preserve)
If i<18:btrans(i)=i+6:Else: c=col(i-6):EndIf
c1=cola(c,$cc)
c2=cola($ffffff,$cc)
VectorSourceCircularGradient(16,16,20,4,4)
VectorSourceGradientColor(c1, 0)
VectorSourceGradientColor(c2, 1)
FillPath()
If i>=18
For j=0 To 40
VectorSourceColor(CoMelange(c1,$88ffffff, Random(16)/16))
MovePathCursor(16+pom(8),16+pom(8)):AddPathLine(16+pom(20),16+pom(20))
StrokePath(1)
Next
EndIf
EndSelect
stopDrawingSprite(i+64)
Next
EndProcedure
Procedure initniveau(niv)
Protected t.s,i,j,c
limite(niv,1,10)
If niveau<>niv:niveau=niv:RandomSeed(niv):initdecor():EndIf
t=niv(niveau)
c=0
nbr=0
For i=0 To 24:n(i,0)=1:Next
For j=1 To 16
n(0,j)=1:n(24,j)=1
For i=1 To 23:c+1
n(i,j)=Asc(Mid(t,c,1))-64:If n(i,j)<0:n(i,j)=0:EndIf
If n(i,j)>1:nbr+1:EndIf
Next
Next
rx=ex/2
rl=64
tire=0
ClearMap(e())
ClearMap(t())
ClearMap(b())
AddMapElement(b(),"0")
b()\x=rx
b()\y=ry
b()\dx=0
b()\dy=-4
b()\s=1
message("NIVEAU "+Str(niveau))
EndProcedure
Procedure RenderFrame()
Static px,nokey,nobutton,pause,bsel,i,j,br,pi,pj,etat
Protected txt.s
Macro sprite(n,x,y)
DisplayTransparentSprite(n,x+8,y+8,64,0!#SBCol)
DisplayTransparentSprite(n,x,y)
EndMacro
ExamineKeyboard()
ExamineMouse()
;tableau
DisplaySprite(10,0,0)
For j=0 To 16
For i=0 To 24
br=n(i,j):If br>0:Sprite(br+64,i*32,j*32):EndIf
Next
Next
StartDrawing(SpriteOutput(20))
DrawingMode(#PB_2DDrawing_AllChannels )
Box(0,0,ex*0.5,32,cola(0,0))
DrawingFont(FontID(2))
DrawText(ex*0.0,0,"SCORE "+Str(score),cola($ffffff),cola($888888))
DrawText(ex*0.3,0,"NIVEAU "+Str(niveau),cola($ffffff),cola($888888))
StopDrawing()
DisplayTransparentSprite(20,ex/4,0)
Select etat
Case 0 ; ---------------- menu
If KeyboardReleased(#PB_Key_Add ):initniveau(niveau+1):EndIf
If KeyboardReleased(#PB_Key_Subtract):initniveau(niveau-1):EndIf
If (nokey And KeyboardReleased(#PB_Key_All)) Or MouseButton(1):score=0:initniveau(niveau):etat=3:EndIf
If KeyboardReleased(#PB_Key_Escape):xEnd:EndIf
If KeyboardReleased(#PB_Key_F1):initniveau(niveau):etat=5:EndIf
Case 1 ; ---------------- attente
If (nokey And KeyboardReleased(#PB_Key_All)) Or MouseButton(1):etat=3:EndIf
Case 2 ; ---------------- pause
If KeyboardReleased(#PB_Key_Escape):message(titre):xReleaseMouse(0):etat=0:EndIf
If (nokey And KeyboardReleased(#PB_Key_All)):xReleaseMouse(0):etat=3:EndIf
Case 3 ; ---------------- jeux
; balles
ForEach b()
With b()
\x+\dx
\y+\dy
px=\x-rx
If collision(\x,\y+\dy,\s):\dy=-\dy:EndIf
If collision(\x+\dx,\y,\s):\dx=-\dx:EndIf
If \y=ry And px>-rl And px<rl:\dy=-\dy:\dx=\dx+(px*8)/rl:EndIf
If nbr=0 And MapSize(e())=0:initniveau(niveau+1):etat=1:EndIf
Sprite(b()\s,b()\x-8,b()\y-8)
If \y>ey:DeleteMapElement(b()):If MapSize(b())=0:message("GAME OVER"):etat=0:EndIf:EndIf
EndWith
Next
; tires
ForEach t()
With t()
\y+\dy
Sprite(3,\x-4,\y-8)
If collision(\x,\y+\dy,0):DeleteMapElement(t()):EndIf
EndWith
Next
; explosion
ForEach e()
With e()
DisplayTransparentSprite(5,\x,\y,\s)
\s-16:If \s<0:DeleteMapElement(e()):EndIf
EndWith
Next
; raquette
rx+(Bool(KeyboardPushed(#PB_Key_Right)<>0)-Bool(KeyboardPushed(#PB_Key_Left)<>0))*16+MouseDeltaX():limite(rx,0,ex)
ZoomSprite(0,rl*2,16):Sprite(0, rx-rl, ry)
If tire :DisplayTransparentSprite(4,rx-8,ry-4):If (nobutton And MouseButton(1)) Or KeyboardReleased(#PB_Key_Up):NVtire():EndIf:EndIf
If KeyboardReleased(#PB_Key_Escape):xReleaseMouse(1):message("PAUSE"):etat=2:EndIf
Case 5 ; ---------------- editeur
For i=1 To 23:DisplaySprite(64+i,i*32,ey-56):Next
pi=MouseX()/32:If pi<1:pi=1:ElseIf pi>23:pi=23:EndIf
pj=MouseY()/32:If pj<1:pj=1:ElseIf pj>17:pj=17:EndIf
DisplayTransparentSprite(64,pi *32,pj*32)
DisplayTransparentSprite(64,bsel *32,17*32,$ff,$ff0000ff)
If MouseButton(1)=1:If pj=17:bsel=pi: ElseIf pj<=14: n(pi,pj)=bsel:EndIf:EndIf
If MouseButton(2)=1 And pj<=14:n(pi,pj)=0:EndIf
If KeyboardReleased(#PB_Key_Escape):For j=1 To 14:For i=1 To 23:txt+Chr(64+n(i,j)):Next:Next:niv(niveau)=txt:Debug txt:etat=0:EndIf
EndSelect
If etat<=2:DisplayTransparentSprite(30,ex*0.2,ey*0.25):EndIf
FlipBuffers()
nokey=Bool(KeyboardPushed(#PB_Key_All)=0)
nobutton=Bool(MouseButton(1)=0)
EndProcedure
;niveaux
niv(1)="@FFFFFI@@@@@@@@@FKKKKK@DFGGGFI@QQQQQQQ@FKJJJKE@FGHGFI@QPPPPPQ@FKJIJK@@FGGGFI@QPBBBPQ@FKJJJK@@FFFFFI@QPBBBPQ@FKKKKK@@IIIIII@QPBBBPQ@FFFFFF@@@@@@@@@QPPPPPQ@@@@@@@@@@@@@@@@QQQAQQQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@@@@@@@@@@@@B@@@@@@AAAAA@@@@@@@@@AAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(2)="@@@@@@@@JBBBBJ@@@@@@@@@@HHHHH@@JBBBBJ@@@IIIII@@KKKKK@@AAAAAA@@@FFFFF@@PMNOQ@@@@@@@@@@@PMNOP@@PMNOQ@@@@@@@@@@@PMNOP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAA@@@@@@@@@AAAAAAAFFFFFFA@@@@@@@@@AIIIIIIGGGGGGA@@@@C@@@@AJJJJJJHHHHHHA@@AAAAA@@AKKKKKKIIEIIIA@@@@@@@@@AFFFDFF@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(3)="@@@@@@@@@@@@@@@@@@@@@@@@BPPPB@@JJJJJ@@BMMMMMB@@POOOP@@IIIII@@MMQQQQM@@POOOP@@HHHHH@@MQQQQQM@@POOOP@@@@@@@@@MQQQQQM@@POOOP@@B@@@B@@MQQQQQM@@BPPPB@@@@@@@@@BMMMMMB@@@@@@@@@AANAA@@@@@@@@@@@@@@@@@@AMMMA@@@@@@@@@@AAAAAAAAALLLAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(4)="NOPQLN@@@@@@@@@@@@@@@@@OPQLN@@@@@@@@@@@@@@@@@@PQLN@@@AMMMMMMMMMA@@@@@QLN@@@@AFFFFFFFFFA@@@@@LN@@@@@AHHHHHHHHHA@@@@LN@@@@@@AAAAAAAAAAA@@@LQ@@@@@@@DBBBBBC@@@@@@LQP@@@AAAAAAAAAAA@@@@@LQPO@@@AJJJJEJJJJA@@@@LQPON@@@AIIIIIIIIIA@@@@@LQPO@@@ALLLLLLLLLA@@@@@@LQP@@@@@@@@@@@@@@@@@@@@@LQ@@@@@@@@@@@@@@@@@@@@@@L@@@@@@@@@@@@@@@@@@@@@@@"
niv(5)="@@@@@@@@@@@O@@@@@@@@@@@@@@@@@@@@@NNN@@@@@@@@@@@A@@@@@@@MMMMM@@@@@@@A@@AB@@@@@LLLLLLL@@@@@BA@@A@@@@@KCKCKCKCK@@@@@A@@AB@@@JJJJJJJJJJJ@@@BA@@A@@@IIIIIIIIIIIII@@@A@@A@@HHHHHHHHHHKKHHH@@A@@A@GGGGGGGGGGGGGGGGG@A@@AFFFFFFFFFFFFFFFFFFFA@@AAAAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(6)="@C@@B@@B@@@E@@@B@@B@@C@@@@@@@@@@@@@@@@@@@@@@@@QQQQQQQQQQQAMMMMMMMMMMMFFFFFFFFFFFAKKKKKKKKKKKIIIIIIIIIIIAGGGGGGGGGGGGGGGGGGGGGGAHHHHHHHHHHHKKKKKKKKKKKAFFFFFFFFFFFHHHHHHHHHHHAIIIIIIIIIII@@@@@B@@@@@A@@@@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(7)="@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@BBBBBBB@@@@@@@@@@@@@@@BGGGGGGGB@@@@@@@@@@@@@BGGGGGGGGGB@@@@@@@@@@@BGGKKGGGKKGGB@@@@@@@@@@BGGKKGGGKKGGB@@@@@@@@@@GGGGGGGGGGGGG@@@@@@@@@@GGGGGGGGGGGGG@@@@@@@@@@GGGHGGGGGGHGG@@@@@@@@@@@GGGHGGGGHGGG@@@@@@@@@@@GGGGHHHHGGG@@@@@@@@@@@@@GGGGGGGGG@@@@@@@@@@@@@@@GGGGGGG@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(8)="@@@H@@@@@@@@@@@@@@@L@@@@@HIH@@@@@@@@@B@@@LNL@@@HIJIH@@@@K@@@A@@LNNNL@HIJCJIH@@KJK@@@@@@LNL@@@HIJIH@@KJHJK@@@@@@L@B@@@HIH@@KJHEHJK@@I@@@@A@@@@H@@@@KJHJK@@IFI@@@@@@@B@@P@@@KJK@@IFGFI@@@@@@A@PQP@@@K@@IFGDGFI@@@@@@PQQQP@@@B@@IFGFI@@@@@@@@PQP@@@@A@@@IFI@@@@@@@@@@P@@@@@@@@@@I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(9)="KKKKKAKKKKKKKKKKKAKKKKKKCJJJAJJJJJCJJJJJAJJJCKKJBIIAIIIIIDIIIIIAIIBJKKJIHHAHBHHHHHHHBHAHHIJKKJIHGAGGGGGGGGGGGAGHIJKKJIBGA@@AAAAAAA@@AGBIJKKJIHGA@@@@@@@@@@@AGHIJKKJIHG@@@@@@@@@@@@@GHIJKAAAA@@@@@@@@@@@@@@@AAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
niv(10)="@@@@@@@@@@@@@KKK@@@@@@C@@@@C@@@@@@@KKFKK@@@G@@@@@@@@@FFF@@KFAFK@@GBG@@@G@@@FJFJF@KKFKK@@@G@@@GBG@@FFAFF@@KKK@@@@@@@@@G@@@FJFJF@@@@@@@KKK@@@@@@@@@FFF@@@@@@@KKFKK@@@FFF@@@@@@@@@G@@KFAFK@@FJFJF@@@@@@@GBG@KKFKK@@FFAFF@@@C@@@@G@@@KKK@@@FJFJF@@@@@@@@@@@@@@@@@@@FFF@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
OpenWindow(0,0,0,ex* zoom,ey* zoom,"casse brique",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,ex,ey,1,0,0,#PB_Screen_SmartSynchronization)
LoadFont(1, "Arial", 13, #PB_Font_Bold)
LoadFont(2, "Arial", 20, #PB_Font_Bold)
LoadFont(3, "Arial", 45)
initniveau(1)
message(titre)
xrenderframe