mini jeu - casse brique (compatible PB/SB)

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Guillot
Messages : 522
Inscription : jeu. 25/juin/2015 16:18

mini jeu - casse brique (compatible PB/SB)

Message par Guillot »

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...

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:WindowEvent():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
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: mini jeu - casse brique (compatible PB/SB)

Message par djes »

En tant que spécialiste, je te fais mes compliments ;)
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: mini jeu - casse brique (compatible PB/SB)

Message par Ar-S »

Excellent !
La raquette en ellipse, très bonne idée pour les rebonds !
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: mini jeu - casse brique (compatible PB/SB)

Message par JohnJohnsonSHERMAN »

Absolument époustouflant :P J'adooore, même si c'est super dur en fait :mrgreen:
Merci beaucoup pour ce petit jeu!
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: mini jeu - casse brique (compatible PB/SB)

Message par SPH »

S U P E R 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Guillot
Messages : 522
Inscription : jeu. 25/juin/2015 16:18

Re: mini jeu - casse brique (compatible PB/SB)

Message par Guillot »

@ djes:
tres honoré !
j'ai testé purebreaker
mon casse brique fait tres "mini budget" à coté !
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: mini jeu - casse brique (compatible PB/SB)

Message par Ar-S »

Guillot a écrit :@ djes:
tres honoré !
j'ai testé purebreaker
mon casse brique fait tres "mini budget" à coté !
Vu le nombre de lignes pour créer le tiens je te trouve très humble :wink:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: mini jeu - casse brique (compatible PB/SB)

Message par falsam »

Trés bon jeu sur 10 niveaux faisant penser à Arkanoid en bien mieux pour passer un bon moment derrière un ordinateur. Pas de vie mais des libérations de balles et possibilité de tirer avec la souris. Merci beaucoup Guillot.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: mini jeu - casse brique (compatible PB/SB)

Message par djes »

Guillot a écrit :@ djes:
tres honoré !
j'ai testé purebreaker
mon casse brique fait tres "mini budget" à coté !
Il faut une base, et ce que j'apprécie, c'est que tu ne dénatures pas le concept. Arkanoid est très vieux, mais les collisions étaient déjà bien gérées, et ce n'est pas si facile ! Ça montre une envie de bien faire :)
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: mini jeu - casse brique (compatible PB/SB)

Message par comtois »

Wow, c'est excellent, et en si peu de code 8O
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: mini jeu - casse brique (compatible PB/SB)

Message par Kwai chang caine »

Vraiment beau, de la classe de ceux du commerce 8O
Et surtout merci pour le partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: mini jeu - casse brique (compatible PB/SB)

Message par Tonio »

Bonjour Guillot

Comment tu as fait pour inserer les graphismes sans les charger?


merci
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: mini jeu - casse brique (compatible PB/SB)

Message par Ar-S »

Il les dessine... Si tu lis tu vois les emplacements : raquette, balle etc...
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: mini jeu - casse brique (compatible PB/SB)

Message par Tonio »

Ar-S a écrit :Il les dessine... Si tu lis tu vois les emplacements : raquette, balle etc...

Merci pour la réponse mais que veux dire ceci :

Code : Tout sélectionner

;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
Avatar de l’utilisateur
Guillot
Messages : 522
Inscription : jeu. 25/juin/2015 16:18

Re: mini jeu - casse brique (compatible PB/SB)

Message par Guillot »

ils sont créés dans la procedure initdecor
c'est fait avec la lib vectordrawing
comme je dessine des sprites et que la vectordrawing ne fonctionne pas avec, je les créé dans une image que je recopie ensuite dans un sprite
(macro DrawingSprite et StopDrawingSprite)
Répondre