Je voulais creer (histoie de programmer quelque chose...) un petit casse brique genre Diabolo sur Atari. Cela me permettai de voir comment fonctionne les listes. Mais malheureusement je suis bloqué

Ca bug au chargement du deuxième tableau re...

Et je ne comprend pas pourquoi...

Je vous donne le code, c'est programmé à l'arach mais il permet de se familiariser avec diverses commandes de Pure.
Merci pour vos conseils

André.
Code : Tout sélectionner
; Essai casse brique
; genre Diabolo sur Atari
; Le seul casse brique qui permet de monter au créneau
; version 1.0 du 05/06/2004
; Click Gauche sur la souris pour démarrer
Global xb.w,yb.w,axb.w,ayb.w,dxb.w,dyb.w,deb_jeu.b,br.w,nbb.w
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitPalette() = 0 Or InitMouse() = 0 Or InitSound()=0
MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0)
End
EndIf
;LoadSound(0,"data\CERAMIC5.wav") ici on charge le son de la brique cassée...
;LoadSound(1,"data\Pong.wav") ici celui du rebond
If OpenWindow(0, 0, 0, 400, 500, #PB_Window_SystemMenu | #PB_Window_ScreenCentered , "Good07-Brique") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
hdl=WindowID(0)
OpenWindowedScreen(hdl,0,0,400,500,1,0,0)
CreateSprite(1,30,10,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(1))
Box(0,0,30,10,RGB(255,0,0))
StopDrawing()
CreateSprite(2,30,10,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(2))
Box(0,0,30,10,RGB(0,0,255))
StopDrawing()
CreateSprite(3,30,10,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(3))
Box(0,0,30,10,RGB(0,0,0))
Box(2,2,26,6,RGB(125,125,125))
Box(5,5,20,1,RGB(255,255,255))
StopDrawing()
CreateSprite(4,35,5,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(4))
Box(0,0,5,5,RGB(255,0,0))
Box(5,0,30,5,RGB(101,246,154))
Box(30,0,5,5,RGB(255,0,0))
StopDrawing()
CreateSprite(5,400,500,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(5))
Box(0,0,400,500,RGB(255,255,255))
StopDrawing()
CreateSprite(6,10,10,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(6))
Circle(5,5,5,RGB(128,128,128))
StopDrawing()
Structure briques
type.b
x.l
y.l
cp.b
EndStructure
NewList brique.briques(); on crée une liste pour gérer les briques
Procedure Niveau_jeu(); on rempli la liste avec la position des briques et leur type(1,2 ou 3)
y=15
x=15
Read lb.w
Read cb.w
Read nbb.w
For m=1 To lb
For n=1 To cb
Read tp.b
If tp=1
AddElement(brique())
brique()\type=tp
brique()\x=x
brique()\y=y
EndIf
If tp=2
AddElement(brique())
brique()\type=tp
brique()\x=x
brique()\y=y
EndIf
If tp=3
AddElement(brique())
brique()\type=tp
brique()\x=x
brique()\y=y
EndIf
x+33
Next n
y+15
x=15
Next m
EndProcedure
Procedure Mouvement_Balle()
xb=xb+dxb
yb=yb+dyb
If xb<0
dxb=3
axb=0
EndIf
If xb>390
dxb=-3
axb=390
EndIf
If yb<0
dyb=3
ayb=0
EndIf
If yb>490
dyb=-3
ayb=490
EndIf
EndProcedure
Procedure init(Niv)
deb_jeu=0
br=0
nbb=0
xpos=200
ypos=400
ClearList(brique())
Select tab
Case 1
Restore Niveau1
Case 2
Restore Niveau2
EndSelect
Niveau_jeu()
EndProcedure
init(1)
Repeat
StartSpecialFX()
ClearScreen(0, 0, 0)
DisplaySprite(5,0,0)
ResetList(brique())
While NextElement(brique())
DisplaySprite(brique()\type, brique()\x, brique()\y)
If SpriteCollision(6, xb, yb, brique()\type, brique()\x, brique()\y)
dxb_t=axb-brique()\x
dyb_t=ayb-brique()\y
If dxb_t<=0
dxb=3
Else
dxb=-3
EndIf
If dyb_t<=0
dyb=-3
Else
dyb=3
EndIf
axb=brique()\x
ayb=brique()\y
If brique()\type=1;si c'est une brique de type 1 on casse !
;PlaySound(0); on joue le son de la brique cassée
DeleteElement(brique())
br=br+1
EndIf
If brique()\type=2 And brique()\cp<3; si c'est une brique de type 2 on compte les coups...
brique()\cp=brique()\cp+1
;PlaySound(1): on joue le son du rebond tant que la brique ne se casse pas.
EndIf
If brique()\type=2 And brique()\cp>2; si elle a été touchée + de 2 fois on casse aussi ! (pas de quartier...)
;PlaySound(0); cette fois si elle est cassée (ouf...) et on ...voir plus haut.
DeleteElement(brique())
br=br+1
EndIf
EndIf
Wend
If br=nbb ;Si toutes les briques sont cassées on passe au niveau 2 et là ça bug dur dur ...?????
init(2)
EndIf
If deb_jeu=1
Mouvement_Balle()
DisplayTransparentSprite(4,xPos,yPos)
DisplayTransparentSprite(6,xb,yb)
If SpriteCollision(6,xb,yb,3,xPos,yPos)
;PlaySound(1): rebond sur la raquette
dyb=-3
axb=xPos
ayb=yPos
EndIf
Else
DisplayTransparentSprite(4,xpos,ypos)
DisplayTransparentSprite(6,xpos+12,ypos-10)
EndIf
StopSpecialFX()
FlipBuffers()
ExamineKeyboard()
ExamineMouse()
xPos=MouseX()
yPos=MouseY()
If xpos>365:xpos=365:EndIf
If ypos>490:ypos=490:EndIf
If MouseButton(1)<>0
deb_jeu=1
xb=xPos+15
yb=yPos-10
axb=xb
ayb=yb
dxb=3
dyb=-3
EndIf
Until KeyboardPushed(#PB_Key_Escape)
End
DataSection
;1=brique qui se casse dès qu'elle est touchée
;2=brique qu'il faut toucher 2 fois pour qu'elle se casse
;3= brique incassable
;Première ligne de data= premier chiffre nombre de lignes de briques: 2eme nombre de colonnes: 3eme nombre de briques à casser.
Niveau1:
Data.w 8,11,83
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,3,1,3,1,3,1,3,1,3,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 2,2,2,2,2,2,2,2,2,2,2
Niveau2:
Data.w 10,11,105
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,2,1,2,1,2,1,2,1,2,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,2,1,2,1,2,1,2,1,2,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,2,1,2,1,2,1,2,1,2,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,3,1,3,1,3,1,3,1,3,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
Data.b 1,1,1,1,1,1,1,1,1,1,1
EndDataSection