Jackerbomber

Contenu du snippet

J'ai fait ce jeu sous blitz3d j'ai juste les codes j'ai pas pu les mettres en format .exe car mon blitz 3D est une version demo.

voilà je souhaite plus tard mettre un mod réseau une intelligence artificielle pour jouer seul.

Source / Exemple :


; JackerBomber

Const BORD_GAUCHE = 13
Const BORD_HAUT = 7
Const BORD_DROIT=660
Const BORD_BAS = 580

Const NB_CASESX = 11
Const NB_CASESY = 9

Const NB_CAISSES=30
Const PROBA_BONUS = 2

Const CSTE_VITESSE = 5

Const TIMER_BOMBE = 600

; Définition d'un type pour les murs
Type TypeMurBrique
	Field x,y,etat
End Type

; Définition d'un type pour les maisons
; (pour savoir quelle couleur copier)
Type TypeMaison
	Field x,y,couleur
End Type

Type TypeJoueur
	Field x,y,etat,sens
	Field image
	Field vitesse
	Field nbBombes
	Field bombes
	Field bombetimer
	Field puissance
	Field score
	Field mort
	Field heure_mort
End Type

Type TypeBombe
	Field active#
	Field puissance
	Field heure
	Field numjoueur
End Type

Type TypeCase
	Field etat
	Field heure
End Type

; Variable des murs
Dim MurBrique.TypeMurBrique(19)
; Variable des toits de maisons
Dim Maison.TypeMaison(19)
; Variables joueurs
Dim Joueur.TypeJoueur(3)
Dim gfxJoueurBas(3,5)
Dim gfxJoueurHaut(3,5)
Dim gfxJoueurGauche(3,5)
Dim gfxJoueurDroite(3,5)
Dim Bombe.TypeBombe(NB_CASESX-1,NB_CASESY-1)
Dim Cases.TypeCase(NB_CASESX-1,NB_CASESY-1)
Dim MaisonB(NB_CASESX-1,NB_CASESY-1)
Dim Caisse(NB_CASESX-1,NB_CASESY-1)
Dim Bonus(NB_CASESX-1,NB_CASESY-1)

; Variables images
Global gfxFond,gfxMaisonToit1,gfxMaisonToit2,gfxMaisonToit3
Global gfxCaisse
Global sndExplosion
Global Fin=0
Dim gfxBombe(2)
Dim gfxBonus(2)
Dim gfxInit(1)
Dim gfxExplosionX(3)
Dim gfxExplosionV(3)
Dim gfxExplosionH(3)
Dim gfxExplosionFH(3)
Dim gfxExplosionFB(3)
Dim gfxExplosionFG(3)
Dim gfxExplosionFD(3)
Dim gfxMort(4)

; Mode d'affichage : 800 x 600
Graphics 800,600,16

ChargementSprites()

Introduction()
;NouvellePartie()

End

Function Affichage()
	Local i,j,k=0
	Local b=0

	; On dessine sur le backbuffer
	SetBuffer BackBuffer()
	
	Cls()	
	
	; On réaffiche le fond
	DrawImage gfxFond,0,0 
		
	For i =0 To NB_CASESX-1
		For j=0 To NB_CASESY-1
			; Affichage des bombes
			If Bombe(i,j)\active>0 Then
				b=Bombe(i,j)\active
				If b<1 Then b=1
				If b>3 Then b=3
				DrawImage gfxBombe(b-1),i*64+BORD_GAUCHE,j*64+BORD_HAUT		
			EndIf					
		
			; Affichage des caisses
			If Caisse(i,j)=1 Then
				DrawImage gfxCaisse,i*64+BORD_GAUCHE,j*64+BORD_HAUT
			EndIf
			
			; Affichage des bonus
			If Bonus(i,j)>0 And Caisse(i,j)=0 Then
				DrawImage gfxBonus(Bonus(i,j)-1),i*64+BORD_GAUCHE,j*64+BORD_HAUT
			EndIf
			
			; Affichage des explosions
			k = Cases(i,j)\etat
			If k>0 Then
				DrawImage gfxExplosionX(k-1),i*64+BORD_GAUCHE,j*64+BORD_HAUT
			EndIf
		Next
	Next	
	
	
	; Affichage des personnages
	For k= 0 To 3
		i=Joueur(k)\x
		j=Joueur(k)\y	
		If Joueur(k)\mort=0 Then		
			DrawImage Joueur(k)\image,i,j	
		Else
			If Joueur(k)\mort<5 Then
				DrawImage gfxMort(Joueur(k)\mort),i,j	
			EndIf
		EndIf
	Next
	
	; Enfin, on dessine le toit des maisons
	For k=0 To 19
		i=Maison(k)\x
		j=Maison(k)\y
		Select Maison(k)\couleur
			Case 1
				DrawImage gfxMaisonToit1,i*128+77,j*128+13
			Case 2
				DrawImage gfxMaisonToit2,i*128+77,j*128+13
			Case 3
				DrawImage gfxMaisonToit3,i*128+77,j*128+13	
		End Select			
	Next
	
	; Affichage du score
	Text 755,145,Str(Joueur(0)\score),True,False
	Text 755,275,Str(Joueur(1)\score),True,False
	Text 755,400,Str(Joueur(2)\score),True,False
	Text 755,525,Str(Joueur(3)\score),True,False
	
	Flip
End Function

Function ChargementSprites()
	Local i

	; Chargement des caisses
	gfxCaisse=LoadImage("SpritesRoute/bomber-caisse.bmp")
	
	; Chargement des bombes
	For i=0 To 2
		s$="SpritesBombes/bomber-bombe0" + Str(i+1) + ".bmp"
		gfxBombe(i) = LoadImage(s$)
		MaskImage gfxBombe(i) ,24,255,0
	Next
	
	; Chargement des morts
	For i=0 To 4
		s$="SpritesMort/Mort0" + Str(i+1) + ".bmp"
		gfxMort(i) = LoadImage(s$)
		MaskImage gfxMort(i) ,24,255,0
	Next
		
	; Chargement des bonus
	gfxBonus(0) = LoadImage("SpritesBonus/BonusVitesse.bmp")
	MaskImage gfxBonus(0) ,24,255,0
	gfxBonus(1) = LoadImage("SpritesBonus/BonusPuissance.bmp")
	MaskImage gfxBonus(1) ,24,255,0
	gfxBonus(2) = LoadImage("SpritesBonus/BonusBombe.bmp")
	MaskImage gfxBonus(2) ,24,255,0	
	
	; Chargement des images d'initialisation
	For i=0 To 1
		s$="SpritesDivers/bomber-init0" + Str(i+1) + ".bmp"
		gfxInit(i) = LoadImage(s$)
		MaskImage gfxInit(i) ,24,255,0
	Next	
	
	; Chargement des images d'explosion
	For i=0 To 3
		s$="SpritesExplosion/ExplosionX" + Str(i+1) + ".bmp"
		gfxExplosionX(i) = LoadImage(s$)
		MaskImage gfxExplosionX(i) ,24,255,0
	Next	
	
	For i=0 To 3
		Joueur(i) = New TypeJoueur
		Joueur(i)\score=0
	Next	
	
	; Chargement de l'explosion
	sndExplosion = LoadSound("Sons/Explosion.wav")
End Function

Function ConstructionFondFixe()
	Local i,j,k,cpt
	Local s$
	; Variable du mur
	Local gfxMaison1,gfxMaison2,gfxMaison3	
	Local gfxRouteHG,gfxRouteBG,gfxRouteHD,gfxRouteBD,gfxRouteH,gfxRouteV,gfxRouteCroisement
	Local gfxRoute

	; Chargement de l'image de fond
	gfxFond=LoadImage("SpritesDivers/bomber-fond.bmp")
	
	; Chargement des maisons
	gfxMaison1=LoadImage("SpritesMaison/bomber-maisonD1.bmp")
	gfxMaison2=LoadImage("SpritesMaison/bomber-maisonD2.bmp")
	gfxMaison3=LoadImage("SpritesMaison/bomber-maisonD3.bmp")
	
	gfxMaisonToit1=LoadImage("SpritesMaison/bomber-maisonH1.bmp")
	gfxMaisonToit2=LoadImage("SpritesMaison/bomber-maisonH2.bmp")
	gfxMaisonToit3=LoadImage("SpritesMaison/bomber-maisonH3.bmp")
	MaskImage gfxMaisonToit1,24,255,0
	MaskImage gfxMaisonToit2,24,255,0
	MaskImage gfxMaisonToit3,24,255,0
	
	; Chargement de la route
	gfxRouteHG=LoadImage("SpritesRoute/bomber-routeHG.bmp")
	gfxRouteBG=LoadImage("SpritesRoute/bomber-routeBG.bmp")
	gfxRouteHD=LoadImage("SpritesRoute/bomber-routeHD.bmp")
	gfxRouteBD=LoadImage("SpritesRoute/bomber-routeBD.bmp")
	gfxRouteH=LoadImage("SpritesRoute/bomber-routeH.bmp")
	gfxRouteV=LoadImage("SpritesRoute/bomber-routeV.bmp")
	gfxRouteCroisement=LoadImage("SpritesRoute/bomber-routeCroisement.bmp")

	SeedRnd MilliSecs()

	SetBuffer ImageBuffer(gfxFond)

	; Dessin des routes
	
	For i=0 To 5
		For j=0 To 3
			DrawImage gfxRouteV,i*128+13,j*128+77
		Next
	Next
	
	For i=0 To 4
		For j=0 To 4
			DrawImage gfxRouteH,i*128+77,j*128+13
		Next
	Next	
	
	For i=0 To 5
		For j=0 To 4
			DrawImage gfxRouteCroisement,i*128+13,j*128+13
		Next
	Next	
	
	DrawImage gfxRouteHG,13,13
	DrawImage gfxRouteBG,13,525
	DrawImage gfxRouteHD,653,13
	DrawImage gfxRouteBD,653,525		
				
	; Ensuite, on dessine les murs inamovibles
	cpt=0
	Dim Maison(19)
	For i=0 To 4
		For j=0 To 3
			k=Rnd(1,3)
			Select k
				Case 1
					DrawImage gfxMaison1,i*128+77,j*128+77
				Case 2
					DrawImage gfxMaison2,i*128+77,j*128+77
				Case 3
					DrawImage gfxMaison3,i*128+77,j*128+77
			End Select
			Maison(cpt) = New TypeMaison
			Maison(cpt)\x = i
			Maison(cpt)\y = j										
			Maison(cpt)\couleur = k
			cpt=cpt+1
		Next
	Next
End Function

Function InitNouvellePartie()
	Local i,j,k,l
	Local s$
	Local total

	For i=0 To 3
		
		If i=0 Then
			Joueur(i)\x=0
			Joueur(i)\y=0
		ElseIf i=1 Then
			Joueur(i)\x=64 * (NB_CASESX-1) + BORD_GAUCHE
			Joueur(i)\y=64 * (NB_CASESY-1) + BORD_HAUT
		ElseIf i=2 Then
			Joueur(i)\x=64 * (NB_CASESX-1)+ BORD_GAUCHE
			Joueur(i)\y=0
		Else
			Joueur(i)\x=0
			Joueur(i)\y=64 * (NB_CASESY-1)	+ BORD_HAUT	
		EndIf
		Joueur(i)\etat = 0
		Joueur(i)\vitesse = CSTE_VITESSE
		Joueur(i)\nbBombes = 1
		Joueur(i)\puissance = 1
		Joueur(i)\mort = 0
		
		For k=1 To 6
			j=i+1
			s$= "SpritesPlayers/Player" + Str(j) + "B" + Str(k) + ".bmp"
			gfxJoueurBas(i,k-1) = LoadImage(s$)
			MaskImage gfxJoueurBas(i,k-1),24,255,0
		Next
		For k=1 To 6
			j=i+1
			s$= "SpritesPlayers/Player" + Str(j) + "H" + Str(k) + ".bmp"
			gfxJoueurHaut(i,k-1) = LoadImage(s$)
			MaskImage gfxJoueurHaut(i,k-1),24,255,0
		Next
		For k=1 To 6
			j=i+1
			s$= "SpritesPlayers/Player" + Str(j) + "D" + Str(k) + ".bmp"
			gfxJoueurDroite(i,k-1) = LoadImage(s$)
			MaskImage gfxJoueurDroite(i,k-1),24,255,0
		Next
		For k=1 To 6
			j=i+1
			s$= "SpritesPlayers/Player" + Str(j) + "G" + Str(k) + ".bmp"
			gfxJoueurGauche(i,k-1) = LoadImage(s$)
			MaskImage gfxJoueurGauche(i,k-1),24,255,0
		Next						
		
		Joueur(i)\image = gfxJoueurBas(i,5)
	Next
	
	For i=0 To 10
		For j=0 To 8
			MaisonB(i,j)=1
		Next
	Next
	For i=0 To 10
		MaisonB(i,0)=0
		MaisonB(i,2)=0
		MaisonB(i,4)=0
		MaisonB(i,6)=0
		MaisonB(i,8)=0
	Next 
	For i=0 To 8
		MaisonB(0,i)=0	
		MaisonB(2,i)=0	
		MaisonB(4,i)=0	
		MaisonB(6,i)=0	
		MaisonB(8,i)=0	
		MaisonB(10,i)=0					
	Next
	
	For i=0 To NB_CASESX-1
		For j=0 To NB_CASESY-1
			Bombe(i,j) = New TypeBombe
			Bombe(i,j)\active=0
			Bombe(i,j)\puissance=1
			
			Cases(i,j) = New TypeCase
			Cases(i,j)\etat=0
			
			Caisse(i,j) =0
			Bonus(i,j) =0
		Next
	Next
	
	total=0
	SeedRnd MilliSecs()
	While total<NB_CAISSES
		i=Rnd(0,NB_CASESX-1)
		j=Rnd(0,NB_CASESY-1)
		If MaisonB(i,j)=0 And Caisse(i,j)=0 Then
			If Not ( i=NB_CASESX-1 And j=NB_CASESY-1) Then
				If Not(i=NB_CASESX-1 And j=0) Then
					If Not (i=0 And j=NB_CASESY-1 ) Then
						If Not (i=0 And j=0) Then
							Caisse(i,j)=1
							total=total+1
							l = Rnd(1,PROBA_BONUS)
							If l=PROBA_BONUS Then
								k=Rnd(1,3)
								Bonus(i,j) = k
							EndIf
						EndIf
					EndIf
				EndIf	
			EndIf
		EndIf
	Wend
End Function

Function Deplacement(player,sens)
	Local i,s
	Local v
	Local xx,yy
	
	If Joueur(player)\mort<>0 Then Return
	
	; Pas du déplacement
	v = Joueur(player)\Vitesse
	
	; Ancien sens du déplacement
	s = Joueur(player)\Sens

	; Image utilisée
	i = Joueur(player)\etat

	Select sens 
		Case 1
		;Haut
			xx = (Joueur(player)\x+32-v-BORD_GAUCHE) / 64
			If xx<0 Then xx=0
			yy = (Joueur(player)\y-BORD_HAUT) / 64
			If yy<0 Then yy=0
			If yy>NB_CASESY-1 Then yy=NB_CASESY-1			
			If Joueur(player)\y-v+10>BORD_HAUT And Bombe(xx,yy)\active<1 And MaisonB(xx,yy)=0 And Caisse(xx,yy)=0 Then
				Joueur(player)\y = Joueur(player)\y -v
				AjouteBonus(xx,yy,player)
			EndIf
			If s=1 Then 
				i = i+1
				If i=6 Then i=0
			Else
				s=1
				i=0
			EndIf			
			Joueur(player)\image = gfxJoueurHaut(player,i)
		Case 2
		;Bas
			xx = (Joueur(player)\x+32-v-BORD_GAUCHE) / 64
			If xx<0 Then xx=0
			yy = (Joueur(player)\y+64-BORD_HAUT) / 64
			If yy<0 Then yy=0
			If yy>NB_CASESY-1 Then yy=NB_CASESY-1
			If Joueur(player)\y+v+64<BORD_BAS And Bombe(xx,yy)\active<1 And MaisonB(xx,yy)=0 And Caisse(xx,yy)=0  Then
				Joueur(player)\y = Joueur(player)\y+v
				AjouteBonus(xx,yy,player)				
			EndIf
			If s=2 Then 
				i = (i+1) Mod 6
			Else
				s=2
				i=0
			EndIf			
			Joueur(player)\image = gfxJoueurBas(player,i)
		Case 3
			;Gauche
			xx = (Joueur(player)\x+10-v-BORD_GAUCHE) / 64
			If xx<0 Then xx=0
			yy = (Joueur(player)\y+64-BORD_HAUT) / 64
			If yy<0 Then yy=0
			If yy>NB_CASESY-1 Then yy=NB_CASESY-1			
			If Joueur(player)\x-v>BORD_GAUCHE And Bombe(xx,yy)\active<1 And MaisonB(xx,yy)=0 And Caisse(xx,yy)=0   Then
				Joueur(player)\x = Joueur(player)\x -v
				AjouteBonus(xx,yy,player)				
			EndIf
			If s=3 Then 
				i = (i+1) Mod 6
			Else
				s=3
				i=0
			EndIf			
			Joueur(player)\image = gfxJoueurGauche(player,i)			
		Case 4
		; Droite
			xx = (Joueur(player)\x+54-v-BORD_GAUCHE) / 64
			If xx<0 Then xx=0
			yy = (Joueur(player)\y+64-BORD_HAUT) / 64
			If yy<0 Then yy=0
			If yy>NB_CASESY-1 Then yy=NB_CASESY-1			
			If Joueur(player)\x+v<BORD_DROIT And Bombe(xx,yy)\active<1 And MaisonB(xx,yy)=0 And Caisse(xx,yy)=0   Then
				Joueur(player)\x = Joueur(player)\x + v
				AjouteBonus(xx,yy,player)				
			EndIf			
			If s=4 Then 
				i = (i+1) Mod 6
			Else
				s=4
				i=0
			EndIf			
			Joueur(player)\image = gfxJoueurDroite(player,i)			
	End Select
	
	; On change l'image
	Joueur(player)\sens=s
	Joueur(player)\etat=i 
	
	TestMort()
End Function

Function PoserBombe(player)
	Local xx,yy

	If Joueur(player)\mort<>0 Then Return

	xx = (Joueur(player)\x+32-BORD_GAUCHE) / 64
	If xx<0 Then xx=0
	yy = (Joueur(player)\y+32-BORD_HAUT) / 64
	If yy<0 Then yy=0

	If Joueur(player)\bombes+1<=Joueur(player)\nbBombes And Bombe(xx,yy)\active=0 And MilliSecs()>Joueur(player)\bombetimer+500 Then
		Joueur(player)\bombes = Joueur(player)\bombes +1
		Bombe(xx,yy)\active = 0.5
		Bombe(xx,yy)\puissance = Joueur(player)\puissance
		Bombe(xx,yy)\heure = MilliSecs()
		Bombe(xx,yy)\numjoueur = player
		Joueur(player)\bombetimer = MilliSecs()
	EndIf
End Function

Function Explosion()
	Local i,j
	Local k,l
	Local p

	
	For i=0 To NB_CASESX-1
		For j=0 To NB_CASESY-1
			If Bombe(i,j)\active>0 Then
				; On active celle qui viennent d'être posées
				If Bombe(i,j)\active = 0.5 And MilliSecs()-Bombe(i,j)\heure>600 Then
					Bombe(i,j)\heure = Bombe(i,j)\heure +600
					Bombe(i,j)\active=1
				Else
					; On augmente le timer des bombes
					If MilliSecs()-Bombe(i,j)\heure>TIMER_BOMBE Then
						Bombe(i,j)\heure = Bombe(i,j)\heure +TIMER_BOMBE
						Bombe(i,j)\active = Bombe(i,j)\active + 1
					EndIf
					
					; 3 secondes : explosion !!
					If Bombe(i,j)\active >= 3 Then
						p = Bombe(i,j)\puissance
						For k=i-p To i+p
							l=j
							If k>=0 And l>=0 And k<=NB_CASESX-1 And l<=NB_CASESY-1  Then
								If MaisonB(k,l)=0 Then
									Cases(k,l)\etat = 1
									Cases(k,l)\heure = MilliSecs()
									Bombe(i,j)\active =0			
									If Caisse(k,l)=1 Then 
										Caisse(k,l)=0
									Else
										If Bonus(k,l)>0 Then Bonus(k,l)=0
									EndIf									
									If Bombe(k,l)\active>0 Then ExplosionForcee(i,j)								
								EndIf
							EndIf
						Next
						
						For l=j-p To j+p
							k=i
							If k>=0 And l>=0 And k<=NB_CASESX-1 And l<=NB_CASESY-1 Then
								If MaisonB(k,l)=0 Then
									Cases(k,l)\etat = 1
									Cases(k,l)\heure = MilliSecs()
									Bombe(i,j)\active =0
									If Caisse(k,l)=1 Then 
										Caisse(k,l)=0
									Else
										If Bonus(k,l)>0 Then Bonus(k,l)=0
									EndIf					
									If Bombe(k,l)\active>0 Then ExplosionForcee(k,l)
								EndIf
							EndIf
						Next
						Bombe(i,j)\active =0
						Joueur(Bombe(i,j)\numjoueur)\bombes=Joueur(Bombe(i,j)\numjoueur)\bombes-1
						PlaySound sndExplosion
					EndIf
				EndIf
			EndIf
		Next
	Next
End Function

Function ExplosionForcee(i,j)
	Local p,k,l

	p = Bombe(i,j)\puissance
	For k=i-p To i+p
		l=j
		If k>=0 And l>=0 And k<=NB_CASESX-1 And l<=NB_CASESY-1 Then
			If MaisonB(k,l)=0 Then
				Cases(k,l)\etat = 1
				Cases(k,l)\heure = MilliSecs()
				If Caisse(k,l)=1 Then 
					Caisse(k,l)=0
				Else
					If Bonus(k,l)>0 Then Bonus(k,l)=0
				EndIf
				Bombe(i,j)\active =0			
				If Bombe(k,l)\active>0 Then ExplosionForcee(k,l)
			EndIf
		EndIf
	Next
						
	For l=j-p To j+p
		k=i
		If k>=0 And l>=0 And k<=NB_CASESX-1 And l<=NB_CASESY-1 Then
			If MaisonB(k,l)=0 Then
				Cases(k,l)\etat = 1
				Cases(k,l)\heure = MilliSecs()
				If Caisse(k,l)=1 Then 
					Caisse(k,l)=0
				Else
					If Bonus(k,l)>0 Then Bonus(k,l)=0
				EndIf
				Bombe(i,j)\active =0			
				If Bombe(k,l)\active>0 Then ExplosionForcee(k,l)
			EndIf
		EndIf
	Next
	Bombe(i,j)\active =0
	Joueur(Bombe(i,j)\numjoueur)\bombes=Joueur(Bombe(i,j)\numjoueur)\bombes-1
	PlaySound sndExplosion
End Function

Function FinExplosion()
	Local i,j
	For i=0 To NB_CASESX-1
		For j=0 To NB_CASESY-1
			If Cases(i,j)\etat = 3  And MilliSecs()-Cases(i,j)\heure>TIMER_BOMBE Then
				Cases(i,j)\etat = 0
			Else
				If Cases(i,j)\etat>0 And cases(i,j)\etat<3 Then
					; On augmente le timer des bombes
					If MilliSecs()-Cases(i,j)\heure>TIMER_BOMBE Then
						Cases(i,j)\heure = Cases(i,j)\heure +TIMER_BOMBE 
						Cases(i,j)\etat = Cases(i,j)\etat + 1
					EndIf			
				EndIf
			EndIf
		Next
	Next	
End Function

Function NouvellePartie()
	Local i

	Fin=0

	InitNouvellePartie()
	
	; On initialise le programme en construisant
	; le fond fixe
	ConstructionFondFixe()	
	
	; Passage en double buffering
	SetBuffer BackBuffer()
	
	; On dessine l'image de fond sur le buffer
	FlushKeys()
	Affichage()
	DrawImage gfxInit(0),300,300 
	; Ensuite, on bascule le backbuffer en frontbuffer
	; et on efface le backbuffer
	Flip
	WaitKey()
	
	SetBuffer BackBuffer()
	Affichage()
	DrawImage gfxInit(1),300,300 
	Flip
	
	WaitKey()
	
	BouclePrincipale()
	If Fin<100 Then 
		NouvellePartie()
	Else
		Introduction()
	EndIf
End Function

Function AjouteBonus(i,j,p)
	Local k

	If Bonus(i,j)>0 Then
		k = Bonus(i,j)
		Select k
			Case 1 ; Vitesse
				If Joueur(p)\vitesse<15 Then
					Joueur(p)\vitesse = Joueur(p)\vitesse+3
				EndIf
			Case 2 ; Puissance
				If Joueur(p)\puissance<6 Then
					Joueur(p)\puissance= Joueur(p)\puissance+1
				EndIf				
			Case 3 ; Bombe
				Joueur(p)\nbBombes=Joueur(p)\nbBombes+1
			
		End Select
		Bonus(i,j)=0
	EndIf
End Function

Function TestMort()
	Local casex,casey
	Local i
	
	For i=0 To 3
		If Joueur(i)\mort=0 Then
			casex= (Joueur(i)\x-BORD_GAUCHE) / 64
			If casex<0 Then casex=0
			casey= (Joueur(i)\y-BORD_HAUT) / 64
			If casey<0 Then casey=0
			If Cases(casex,casey)\etat<>0 Then
				Joueur(i)\mort = 1
				Joueur(i)\heure_mort = MilliSecs()
			EndIf
		Else
			If Joueur(i)\mort = 4  And MilliSecs()-Joueur(i)\heure_mort>TIMER_BOMBE Then
				Joueur(i)\mort = 5
			Else
				If Joueur(i)\mort>0 And Joueur(i)\mort<4 Then
					; On augmente le timer des bombes
					If MilliSecs()-Joueur(i)\heure_mort>TIMER_BOMBE Then
						Joueur(i)\heure_mort = Joueur(i)\heure_mort +TIMER_BOMBE 
						Joueur(i)\mort = Joueur(i)\mort + 1
					EndIf			
				EndIf
			EndIf			
		EndIf
	Next
End Function

Function TestFin()
	Local i,k,jg
	
	k=0
	For i=0 To 3	
		If Joueur(i)\mort=0 Then
			k=k+1
			jg=i
		EndIf
	Next
	f=0
	If k=1 Then
		Fin=1
		Joueur(jg)\score=Joueur(jg)\score+1
	ElseIf k=0
		Fin=1
	EndIf
End Function

Function BouclePrincipale()

	; Boucle principale 
	While Fin=0
		; Touche ESC : on quitte
		If KeyHit(1) Then Fin=100
	
	
		; JOUEUR 1
		; Haut
		If KeyDown(200) Then Deplacement(0,1)
		; Bas
		If KeyDown(208) Then Deplacement(0,2)
		; Gauche
		If KeyDown(203) Then Deplacement(0,3)
		; Droite
		If KeyDown(205) Then Deplacement(0,4)
		; Enter 
		If KeyDown(28) Then PoserBombe(0)
		
		; JOUEUR 2
		; Z
		If KeyDown(17) Then Deplacement(1,1)
		; Q
		If KeyDown(30) Then Deplacement(1,3)
		; S
		If KeyDown(31) Then Deplacement(1,2)
		; D
		If KeyDown(32) Then Deplacement(1,4)	
		; A
		If KeyDown(16) Then PoserBombe(1)
	
		; JOUEUR 3
		; I
		If KeyDown(23) Then Deplacement(2,1)
		; K
		If KeyDown(37) Then Deplacement(2,2)
		; J
		If KeyDown(36) Then Deplacement(2,3)
		; L
		If KeyDown(38) Then Deplacement(2,4)	
		; U
		If KeyDown(22) Then PoserBombe(2)		
		
		Explosion()
		
		TestMort()
		
		Affichage()
		
		TestFin()
		
		FinExplosion()
	Wend
End Function

Function Introduction()
	Local fntArial
	Local fntArial18
	Local sortie=0

	fntArial = LoadFont("Arial",24,False,False,False)
	fntArial18 = LoadFont("Arial",18,False,False,False)

	SetBuffer BackBuffer()
	
	Cls()
	
	SetFont fntArial
	Text 400,50,"JackerBomb",True,False	
	Text 400,100,"Instructions pour le jeu",True,False	
	
	
	SetFont fntArial18
	Text 50,160,"- Appuyez sur Espace pour commencer la partie"
	Text 50,180,"- Joueur 1 : Flèches pour se déplacer, Entrée pour poser une bombe"
	Text 50,200,"- Joueur 2 : z,q,s,d pour se déplacer, a pour poser une bombe"
	Text 50,220,"- Joueur 3 : i,j,k,l pour se déplacer, u pour poser une bombe"
	Text 50,240,"- Joueur 4 : Joystick pour se déplacer, Feu pour poser une bombe"

	
	Flip
	While sortie=0
		If KeyHit(1) Then sortie=2
		If KeyHit(57) Then sortie=1
	Wend
	If sortie=1 Then 
		NouvellePartie()
	Else
		End
	EndIf
End Function

Conclusion :


voilà j'ai mis les images en zip qui son necessairent pour jouer car il n'est pas en exe.
vous ne pouvez joueur pour l'instant que si vous avez blitz 3d vous pouvez télécharger la démo.Si vous l'avez mettez mon fichier en exe et mettez sur un petit site pour que l'on le conaisse. merci

JE VAIS METTRE LE ZIP DANS PEUT DE TEMPS !!!!!!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.