suite de mon probleme j'ai reussi a afficher mes envahisseurs mais quand je tire dessus seul le dernier ennemi a une action
j'ai mis en rouge l'endroit qui me pose des soucis,j'ai du mal a saisir la difference entre structure et liste chainee,pouvez vous me depanner et aussi si vous connaissez queleques bons livres pour apprendre le basic dans le style je programme j'apprends je vous serait reconnaissant merci a plus
Code : Tout sélectionner
If InitEngine3D()=0 Or InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0 Or InitSound()=0 Or InitMovie()=0
MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
End
EndIf
UsePNGImageDecoder()
UseOGGSoundDecoder()
Enumeration
#explos1wav;son explosion
#galax ;sprite fond d'ecran
#vaisseau ;sprite vaisseau
#tir1 ;missile 1
#aster1;asteroide 1
#aster2;asteroide 2
#explosion ;=60 frame anim explosion 1
#explovai;=30 frame anim explosion 2
#cinq;musique
#enemi1
#boum ;explosion vaisseau joueur
#boum3d;pour zoom
#encadre
;#envahis
EndEnumeration
Global ta2=0,ta1=0,te1=0,score=200,t=0 ,r=Random(2),scrolling=0,vie=10,vitesse=5
Global explosion.AnimSprite,explovai.animsprite,jouani=0,animx,animy,jouani2=0,animx2,animy2
Global asterx2=40+Random(660),astery2=-100,enemi1x=800,enemi1y=40+Random(400)
Global posxtir,posytir,asterx1=40+Random(700),astery1=-100
Global eva1=0,depx=0,depbord=1,envax,envay,enva=100,envahis
Global MouseExClic.b, MouseClic.b, MousePressed.b, MouseReleased.b,pericer=0,rayon=500
OpenScreen(800,600,32,"ecranjeu")
;son musique******************************************
LoadSound(#explos1wav,"c:\space\explos1.wav")
LoadSound(#cinq,"c:\space\54.wav")
;image et sprite**************************************************************
LoadSprite(#encadre,"c:\space\encadre.png")
TransparentSpriteColor(#encadre,$ffffff)
LoadSprite(#galax,"c:\space\gala1.png") ;
LoadSprite(#aster1,"c:\space\aster1.png")
TransparentSpriteColor(#aster1,$ffffff)
LoadSprite(#aster2,"c:\space\aster2.png")
TransparentSpriteColor(#aster2,$ffffff)
LoadSprite(#vaisseau,"c:\space\vaisseau.png",0)
TransparentSpriteColor(#vaisseau,$ffffff)
LoadSprite(#tir1,"c:\space\tir1.png",0)
TransparentSpriteColor(#tir1,$ffffff)
MouseLocate(385,520)
LoadSprite(#enemi1,"c:\space\enemi1.png",0)
TransparentSpriteColor(#enemi1,$ffffff)
LoadSprite(#boum,"c:\space\spiro.png",#PB_Sprite_Texture)
CreateSprite3D(#boum3d,#boum)
LoadSprite(#explosion,"c:\space\explosion.png",0)
CreateAnimSprite(explosion,#explosion,70,70,50);explosion 1variable animsprite
TransparentSpriteColor(#explosion,$ffffff)
LoadSprite(#explovai,"c:\space\explovai.png",0)
CreateAnimSprite(explovai,#explovai,98,100,100);explosion 2 vaisseau
TransparentSpriteColor(#explovai,$ffffff)
LoadSprite(envahis,"c:\space\envah1.png",0)
TransparentSpriteColor(envahis,$ffffff)
;**************************************************
Declare colisionvaisseaua1()
Declare colisionvaisseaua2()
Declare coltirast()
Declare gestiontir()
Declare affichenemi1()
Declare afficheaster1()
Declare afficheaster2()
Declare endgame()
Declare affichegrille()
;************************************
;
;*************************************
;*********************************
;*********************************
Structure tirjoueur
posxtir.l
posytir.l
EndStructure
Global NewList position.tirjoueur()
;*********************************
Structure asteroide1
asterx1.l
astery1.l
EndStructure
Global NewList coord1.asteroide1()
;******************************
Structure asteroide2
asterx2.l
astery2.l
EndStructure
Global NewList coord2.asteroide2()
;*****************************************************************
Structure enemi1
enemi1x.l
enemi1y.l
EndStructure
Global NewList pose1.enemi1()
;*****************************************************************
[color=red]Structure envahis
envax.l
envay.l
EndStructure
Global NewList place.envahis()
;**********************************************************************
;For enva=100 To 130
;AddElement(place())
LoadSprite(enva,"c:\space\envah1.png",0)
TransparentSpriteColor(enva,$ffffff)
;place()\enva=enva
;Next enva
;position envah
;************************affiche enva
Procedure affichegrille()
;If enva=130 :enva=100:EndIf
For envay=50 To 150 Step 50
For envax=104 To 680 Step 64
AddElement(place())
;enva+1
place()\envax=envax:place()\envay=envay;:place()\enva=enva
DisplayTransparentSprite(enva,place()\envax,place()\envay)
Next envax
Next envay
EndProcedure[/color]
;**********************************************************************
Procedure gestiontir()
Select Mousereleased
Case 0
t=1
Case 1
t=0
EndSelect
If t=1:Goto freintir:EndIf
If t=0
InsertElement(position())
position()\posxtir=MouseX()+13
position()\posytir=MouseY()
EndIf
t=1
freintir:
While NextElement(position())
position()\posytir-5
DisplayTransparentSprite(#tir1,position()\posxtir,position()\posytir)
If position()\posytir=10:score-1:t=0
EndIf
coltirast()
Wend
t=0
ResetList(position())
EndProcedure
;********************************************************************
Procedure DetectClic() ;permet le tir coup par coup je remercie untel du forum j'ai pas le nom
MouseClic = #Null
MouseReleased = #Null
If MouseButton(1) And MouseExClic = #Null
MouseClic = #True
EndIf
If MouseButton(1)=0 And MouseExClic = #True
MouseReleased = #True
EndIf
MouseExClic = MouseButton(1)
MousePressed = MouseButton(1)
EndProcedure
;***********************************
Procedure afficheaster1()
InsertElement(coord1())
If ta1=1:Goto freinaster1:EndIf
If ta1=0:coord1()\asterx1=40+Random(700):EndIf
ta1=1
freinaster1:
While NextElement(coord1())
ta1=1
coord1()\astery1+vitesse
DisplayTransparentSprite(#aster1,coord1()\asterx1,coord1()\astery1)
If coord1()\astery1>600:ta1=0:coord1()\astery1=-100
DeleteElement(coord1())
r=Random(2)
EndIf
Wend
ta1=0
EndProcedure
;*********************************************************************
Procedure afficheaster2()
InsertElement(coord2())
If ta2=1:Goto freinaster2:EndIf
If ta2=0:coord2()\asterx2=40+Random(660):EndIf
ta2=1
freinaster2:
While NextElement(coord2())
ta2=1
coord2()\astery2+vitesse
DisplayTransparentSprite(#aster2,coord2()\asterx2,coord2()\astery2)
If coord2()\astery2>600:ta2=0:coord2()\astery2=-100
DeleteElement(coord2())
r=Random(2)
EndIf
Wend
ta2=0
EndProcedure
;****************************************************************
Procedure affichenemi1()
InsertElement(pose1());============================pose1 enemi 1
If te1=1:Goto freinenemi1:EndIf
If te1=0:pose1()\enemi1y=Random(400):pose1()\enemi1x=800:EndIf
te1=1
freinenemi1:
While NextElement(pose1())
te1=1
pose1()\enemi1x-vitesse
DisplayTransparentSprite(#enemi1,pose1()\enemi1x,pose1()\enemi1y)
If pose1()\enemi1x<-100:te1=0:pose1()\enemi1x=800
DeleteElement(pose1())
r=Random(2)
EndIf
Wend
te1=0
EndProcedure
;*********************************************************************************************************
Procedure coltirast()
;aster1
If SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,#aster1,coord1()\asterx1,coord1()\astery1)
jouani=1;----------------------------------------------------
animx=coord1()\asterx1:animy=coord1()\astery1;-----------------------------------------------------
DeleteElement(coord1()):ta1=0
DeleteElement(position()):t=0
score+10
;PlaySound(#explos1wav)
r=Random(2)
; aster2
ElseIf SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,#aster2,coord2()\asterx2,coord2()\astery2)
jouani=1;----------------------------------------------------
animx=coord2()\asterx2:animy=coord2()\astery2;-----------------------------------------------------
DeleteElement(coord2()):ta2=0
DeleteElement(position()):t=0
; PlaySound(#explos1wav)
score+10
r=Random(2)
;vaisseauenemi
ElseIf SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,#enemi1,pose1()\enemi1x,pose1()\enemi1y)
jouani=1;----------------------------------------------------
animx=pose1()\enemi1x:animy=pose1()\enemi1y;-----------------------------------------------------
DeleteElement(pose1()):te1=0
DeleteElement(position()):t=0
; PlaySound(#explos1wav)
score+15
r=Random(2)
;envahisseur
[color=red]ElseIf SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,enva,place()\envax,place()\envay)
;ElseIf position()\posxtir=grillex(envax) And position()\posytir=grilley(envay)
; jouani=1;----------------------------------------------------
; animx=envahis()\envax+depx:animy=envahis()\envay;-----------------------------------------------------
te1=0
;SelectElement(place(),place()\enva)
DeleteElement(place())
DeleteElement(position()):t=0
PlaySound(#explos1wav)
score+15
; r=Random(2)
EndIf[/color]
EndProcedure
;****************************************************************************************************
Procedure colisionvaisseaua1()
If SpritePixelCollision(#vaisseau,MouseX(),MouseY(),#aster1,coord1()\asterx1,coord1()\astery1)
jouani2=1
animx2=coord1()\asterx1:animy2=coord1()\astery1
DeleteElement(coord1()):ta1=0
r=Random(2) :;PlaySound(#explos1wav)
EndIf
EndProcedure
;*******************************************************************************************************************
Procedure colisionvaisseaua2()
If SpritePixelCollision(#vaisseau,MouseX(),MouseY(),#aster2,coord2()\asterx2,coord2()\astery2)
jouani2=1
animx2=coord2()\asterx2:animy2=coord2()\astery2
DeleteElement(coord2()):ta1=0
r=Random(2) :;PlaySound(#explos1wav)
EndIf
EndProcedure
;****************************************************************************************************
Procedure colisionvaisseaue1();vaisseau contre vaisseau enemi 1
If SpritePixelCollision(#vaisseau,MouseX(),MouseY(),#enemi1,pose1()\enemi1x,pose1()\enemi1y)
jouani2=1
animx2=pose1()\enemi1x:animy2=pose1()\enemi1y
DeleteElement(pose1()):ta1=0
r=Random(2) :;PlaySound(#explos1wav)
EndIf
EndProcedure
;************************************
Procedure gestionvie()
vie=vie-1
If vie=0:endgame():EndIf
EndProcedure
;*****************************************
Procedure endgame()
For rayon=500 To 0 Step -10
StartDrawing(ScreenOutput())
Circle(400,300,rayon,RGB(Random(255),Random(255),Random(255)))
StopDrawing()
FlipBuffers()
Next rayon
Delay(200)
If vie=0:End:EndIf
EndProcedure
;************************************************************
;*********************************************
;** programme principale **
;*********************************************
;*********************************************
InsertElement(pose1());pour eviter le plantage au premier tire avant creation premier element
InsertElement(coord2());pour eviter le plantage au premier tire avant creation premier element
InsertElement(coord1())
InsertElement(place())
;pour eviter le plantage au premier tire avant creation premier element
;InsertElement(place())
;pour eviter le plantage au premier tire avant creation premier element
;PlaySound(#cinq)
;**********************************************************
Repeat
DisplaySprite(#galax,0,scrolling)
DisplaySprite(#galax,0,scrolling-600)
scrolling+2:If scrolling>600:scrolling=0:EndIf
If score>200:vitesse=5:affichegrille():sp30=1:EndIf
ExamineMouse()
ExamineKeyboard()
DetectClic()
gestiontir()
Select r;affiche au hasard different obstacles
Case 0:afficheaster1():colisionvaisseaua1()
Case 1:afficheaster2():colisionvaisseaua2()
Case 2: affichenemi1():colisionvaisseaue1()
EndSelect
If jouani=1:DisplayAnimSprite(explosion,animx,animy) ;l'astuce
If 60=CurrentAnimFrame(explosion):jouani=0
EndIf
EndIf
If jouani2=1:ReleaseMouse(1):DisplayAnimSprite(explovai,animx2,animy2)
If 29=CurrentAnimFrame(explovai):gestionvie(): MouseLocate(385,520):jouani2=0:ReleaseMouse(0): EndIf
EndIf
;--------------------------------------
If jouani2<>1;gestion souris
DisplayTransparentSprite(#vaisseau,MouseX(),MouseY())
If MouseX()<42 :MouseLocate(42,MouseY()):EndIf
If MouseX()>728 :MouseLocate(728,MouseY()):EndIf
If MouseY()<42 :MouseLocate(MouseX(),42):EndIf
If MouseY()>496 :MouseLocate(MouseX(),496):EndIf
EndIf
;difficulte niveau suivant scoreenvah1x
If score>20 And score <40 :vitesse=7:EndIf
If score>40 And score <80 :vitesse=9:EndIf
If score>80 And score <100 :vitesse=11:EndIf
If score>100 And score <200 :vitesse=13:EndIf
;--------------------------------------
DisplayTransparentSprite(#encadre,0,0)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(50,570,"VIE "+Str(vie))
DrawText(200,570,"SCORE "+Str(score)+" enva"+Str(enva))
StopDrawing()
FlipBuffers()
Until KeyboardPushed (#PB_Key_Escape)
End
[color=red][/color]