Je te mets le code de mon programme, c'est un peu long alors j'essaie de le racourcir :
Code : Tout sélectionner
;-Enumerations
;des différentes constantes du programme
Enumeration
;Planche des personnages
#char
;Corps du ninja bleu
;Côté droit
#Bright
#Bbody
#Bprot
#Barm
#Bpunch
#Bleg
#Bwalk
#Bjump
#Bsquat
#Bsqwalk
;Côté gauche
#Bleft
#BbodyL
#BprotL
#BarmL
#BpunchL
#BlegL
#BwalkL
#BjumpL
#BsquatL
#BsqwalkL
;Corps du ninja rouge
;Côté droit
#Rright
#Rbody
#Rprot
#Rarm
#Rpunch
#Rleg
#Rwalk
#Rjump
#Rsquat
#Rsqwalk
;Côté gauche
#Rleft
#RbodyL
#RprotL
#RarmL
#RpunchL
#RlegL
#RwalkL
#RjumpL
#RsquatL
#RsqwalkL
;Planche des décors
#dec
EndEnumeration
hdiff.w=#Bleft-#Bright ;Permet de remplacer les constantes de la partie gauche et optimise ainsi le code
;-Structures
;Structure des personnages
Structure Char
cx.l
cy.w
body.w
arm.w
leg.w
pos.b
fall.b
jump.b
move.b
walk.b
run.b
prot.b
squat.b
EndStructure
Define.Char
Global NewList Ninja.Char()
Define.l
;Structure des décors
Structure Dec
dx.l
dy.w
EndStructure
Define.Dec
Global NewList Scene.Dec()
Define.l
;Initialisation des fonctions et du décodeur PNG, ouverture de l'écran 800*600
If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse()=0 Or OpenScreen(800,600,32,"Battle Game")=0
MessageRequester("Erreur","Impossible de démarrer le programme.")
End
EndIf
UsePNGImageDecoder()
;Les données initiales concernant le héro!
AddElement(Ninja())
Ninja()\cx=400
Ninja()\cy=300
Ninja()\body=#Bbody
Ninja()\arm=#Barm
Ninja()\leg=#Bleg
Ninja()\pos=0
Ninja()\fall=0
Ninja()\jump=0
Ninja()\move=0
Ninja()\walk=0
Ninja()\run=10
Ninja()\prot=0
Ninja()\squat=0
FirstElement(Ninja())
;-Procédures
;Chargement des images principales et découpage des sprites
Procedure CutSprite()
TransparentSpriteColor(-1,RGB(128,128,128)) ;Transparence du gris par défaut
ClearScreen(RGB(128,128,128)) ;Ecran gris
LoadSprite(#char,"char.png") ;Chargement du sprite principal des personnages
DisplaySprite(#char,0,0) ;Affichage du sprite principal des personnages
;Création des sprites droits du ninja bleu
GrabSprite(#Bbody,1,1,25,30) ;haut du corps
GrabSprite(#Bprot,1,64,25,30) ;haut du corps protection
GrabSprite(#Barm,1,48,20,15) ;bras
GrabSprite(#Bpunch,1,32,20,15) ;bras au combat
GrabSprite(#Bleg,27,1,31,26) ;jambes
GrabSprite(#Bwalk,27,28,31,26) ;jambes en marche
GrabSprite(#Bjump,59,1,31,26) ;jambes en saut
GrabSprite(#Bsquat,59,28,31,26) ;jambes accroupi
GrabSprite(#Bsqwalk,27,55,31,26) ;jambes accroupi en marche
;Création des sprites gauches du ninja bleu
GrabSprite(#BbodyL,92,1,25,30) ;haut du corps
GrabSprite(#BprotL,92,64,25,30) ;haut du corps protection
GrabSprite(#BarmL,92,48,20,15) ;bras
GrabSprite(#BpunchL,92,32,20,15) ;bras au combat
GrabSprite(#BlegL,118,1,31,26) ;jambes
GrabSprite(#BwalkL,118,28,31,26) ;jambes en marche
GrabSprite(#BjumpL,150,1,31,26) ;jambes en saut
GrabSprite(#BsquatL,150,28,31,26) ;jambes accroupi
GrabSprite(#BsqwalkL,118,55,31,26) ;jambes accroupi en marche
;Création des sprites droits du ninja rouge
GrabSprite(#Rbody,1,126,25,30) ;haut du corps
GrabSprite(#Rprot,1,189,25,30) ;haut du corps protection
GrabSprite(#Rarm,1,173,20,15) ;bras
GrabSprite(#Rpunch,1,157,20,15) ;bras au combat
GrabSprite(#Rleg,27,126,31,26) ;jambes
GrabSprite(#Rwalk,27,153,31,26) ;jambes en marche
GrabSprite(#Rjump,59,126,31,26) ;jambes en saut
GrabSprite(#Rsquat,59,153,31,26) ;jambes accroupi
GrabSprite(#Rsqwalk,27,180,31,26) ;jambes accroupi en marche
;Création des sprites gauches du ninja rouge
GrabSprite(#RbodyL,92,126,25,30) ;haut du corps
GrabSprite(#RprotL,92,189,25,30) ;haut du corps protection
GrabSprite(#RarmL,92,173,20,15) ;bras
GrabSprite(#RpunchL,92,157,20,15) ;bras au combat
GrabSprite(#RlegL,118,126,31,26) ;jambes
GrabSprite(#RwalkL,118,153,31,26) ;jambes en marche
GrabSprite(#RjumpL,150,126,31,26) ;jambes en saut
GrabSprite(#RsquatL,150,153,31,26) ;jambes accroupi
GrabSprite(#RsqwalkL,118,180,31,26) ;jambes accroupi en marche
ClearScreen(RGB(128,128,128)) ;Ecran gris, pas de FlipBuffers() donc pas d'affichage de l'opération de découpage
EndProcedure
;Déplacement des personnages, vérification des collisions
Procedure CharMove()
EndProcedure
;Assemblage et affichage des personnages
Procedure DispChar()
DisplayTransparentSprite(Ninja()\body+Ninja()\pos*hdiff,Ninja()\cx-1+8*Ninja()\pos-Ninja()\squat+2*Ninja()\squat*Ninja()\pos,Ninja()\cy-23+Ninja()\squat*4)
If prot=0
DisplayTransparentSprite(Ninja()\arm+Ninja()\pos*hdiff,Ninja()\cx+15-19*Ninja()\pos-Ninja()\squat+2*Ninja()\squat*Ninja()\pos,Ninja()\cy-12+Ninja()\squat*4)
EndIf
DisplayTransparentSprite(Ninja()\leg+Ninja()\pos*hdiff,Ninja()\cx,Ninja()\cy)
EndProcedure
;Appel de la procédure d'initialisation et de découpage des sprites
CutSprite()
;-Boucle Principale
;s'arrête avec la touche Echap
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)<>0
End
EndIf
DispChar(Ninja())
FlipBuffers() ;Affichage de l'écran créé
ClearScreen(RGB(255,255,255)) ;Réinitialisation de l'écran-arrière
ForEver
Ce qui pose problème c'est la procédure DispChar() dans laquelle j'utilise la liste chaînée Ninja() qui a pour Strucutre Char.