TGC Codebase Backup



Space invaders clone by laurent mrejen

31st Mar 2006 2:42
Summary

This is a simple code of a clone of Space Invaders



Description

This is a complete program to make a simple Space invaders game.

At last, i have to add those things:
- Sound
- Make able the enemy to shoot
- A menu



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    ` Space invaders Mars 2006

`#########################################################
`#               Initialisation du jeu                   #
`#########################################################
	
`On cache la souris
Hide mouse

	gosub Init_VarGlobales
	gosub Charge_Monstre
   gosub Charge_Decor
   gosub Charge_Heros
	gosub Charge_Tir

GameOver:
   gosub Init_VarGlobales
	gosub InitSprite_HerosMonstre

	show all sprites

`#########################################################
`#               Fin de l'initialisation du jeu          #
`#########################################################

`#########################################################
`#               boucle principale                       #
`#########################################################

do

   gosub Anime_Monstre
	gosub DetecteCollisionHerosAvecEnemi
	`gosub DetecteCollisionHerosAvecTir
	gosub DetecteCollisionTirHerosAvecEnemi
	gosub DeplaceTirHeros
	`gosub Supprime_TirEnemi
	`gosub Supprime_TirHeros

	gosub GestionHeros

   `rafraichissement de l'écran
   sync
loop

`#########################################################
`#               Fin de la boucle principale             #
`#########################################################

`#########################################################
`#             Méthodes Gosub                            #
`#########################################################

`Méthode d'initialisation des variables globales
Init_VarGlobales:

   `Constantes de couleurs
   BLANC = rgb(255,255,255)

   `Constante pour le décor
   Bitmap_Decor=1
   `Constante pour l'écran
   Ecran=0

   ` Constantes pour les monstres
   Bitmap_Monstre=20
   Monstre_Sprite=100
   Monstre_Image=100
   Monstre_Speed=2
   Monstre_PosX=10
   Monstre_PosY=10
   Monstre_DistanceX=50
   Monstre_DistanceY=50
   Monstre_Direction=1
   Monstre_AuxLimites=0

   `Constante pour le héros
   Bitmap_Heros=10
   Heros_Sprite=10
   Heros_Image=10
   Heros_Speed=5
   Heros_PosX=screen width()/2
   Heros_PosY=screen height()-70

	`Constantes pour les tirs
	Bitmap_TirMonstre=15
	TirMonstre_Sprite=200
	TirMonstre_Image=200
	TirMonstre_Speed=5

	Bitmap_TirHeros=16
	TirHeros_Sprite=250
	TirHeros_Image=250
	TirHeros_Speed=5

return

`Méthode pour charger le décor
Charge_Decor:

   load bitmap "ImagesBackground.bmp", Bitmap_Decor
   copy bitmap Bitmap_Decor, Ecran
return

`Méthode pour charger les monstres
Charge_Monstre:

   for i=0 to 3
      `On charge l'image d'un vaisseau monstre
      load bitmap GetNomFichier("ImagesMonstre", i+1, "jpg"), Bitmap_Monstre+i
	
      `On charge l'image dans le sprite
      get image Monstre_Image+i, 0,0, bitmap width(), bitmap height()
	next i

return

`Méthode pour charger le héros
Charge_Heros:

   load bitmap "ImagesHeros.jpg", Bitmap_Heros
   `On charge l'image dans le sprite
   get image Heros_Image, 0,0,bitmap width(), bitmap height()

   `On cree le sprite
   Sprite Heros_Sprite, Heros_PosX, Heros_PosY , Heros_Image
   set sprite Heros_Sprite,1, 1
   `on redimensionne le sprite
   scale sprite Heros_Sprite, 9

return

`Méthode pour charger les tirs
Charge_Tir:
	
	load bitmap "ImagesTirHeros.bmp", Bitmap_TirHeros
   `On charge l'image dans le sprite
   get image TirHeros_Image, 0,0,bitmap width(), bitmap height()

			
	load bitmap "ImagesTirEnemi.bmp", Bitmap_TirMonstre
   `On charge l'image dans le sprite
   get image TirMonstre_Image, 0,0,bitmap width(), bitmap height()

return

`Méthode d'initialisation des sprites Heros et monstre
InitSprite_HerosMonstre:

	`On cree le sprite
   Sprite Heros_Sprite, Heros_PosX, Heros_PosY , Heros_Image
   set sprite Heros_Sprite,1, 1
   `on redimensionne le sprite
   scale sprite Heros_Sprite, 9

	`On initialise les 30 sprites de monstres
	for i=0 to 3
  		for j=0 to 9
	   	set sprite Monstre_Sprite+i*10+j,1, 1
	      scale sprite Monstre_Sprite+i*10+j, 9
	   next j
   next i

   `On initialise la position des monstres
   for i=0 to 3
      for j=0 to 9
         sprite Monstre_Sprite+i*10+j, Monstre_PosX+Monstre_DistanceX*j, Monstre_PosY+Monstre_DistanceY*i, Monstre_Image+i
      next j
   next i

return

`Méthode pour animer le monstre
Anime_Monstre:

   `On regarde si un monstre est au bord de l'écran
   for i=0 to 3
      for j=0 to 9
         if sprite exist(Monstre_Sprite+i*10+j)
            `Si on est au bord
            if sprite X(Monstre_Sprite+i*10+j)>screen width() - sprite width(Monstre_Sprite+i*10+j)
               Monstre_AuxLimites=1
               Monstre_Direction=0-Monstre_Direction
               `On sort de la boucle
               goto Deplace_Monstre
            Endif
            if sprite X(Monstre_Sprite+i*10+j)<0
               Monstre_AuxLimites=1
               Monstre_Direction=0-Monstre_Direction
               `On sort de la boucle
               goto Deplace_Monstre
            Endif
         Endif
      next j
   next i
	
	Deplace_Monstre:
	   `On descend les monstre si on est au bord
	   for i=0 to 3
	      for j=0 to 9
	         if sprite exist(Monstre_Sprite+i*10+j)
	            `Si on est au bord on descend d'un cran
	            if Monstre_AuxLimites=1
	               sprite Monstre_Sprite+i*10+j, sprite X(Monstre_Sprite+i*10+j), sprite Y(Monstre_Sprite+i*10+j)+Monstre_DistanceY, Monstre_Image+i
	            Endif
	         Endif
	      next j
	   next i
	
	   `On dit qu'on est pas aux limites de l'écran
	   Monstre_AuxLimites=0
	
	   `On déplace les monstres
	   for i=0 to 3
	      for j=0 to 9
	         if sprite exist(Monstre_Sprite+i*10+j)
	            sprite Monstre_Sprite+i*10+j, sprite X(Monstre_Sprite+i*10+j)+ Monstre_Speed*Monstre_Direction, sprite Y(Monstre_Sprite+i*10+j), Monstre_Image+i
	         EndIf
	      next j
	   next i

return

`Méthode de suppression des tirs enemis si ils ne sont plus à l'écran
Supprime_TirEnemi:
	
	for i=0 to 50
		if sprite exist(TirMonstre_Sprite+i)
			if sprite Y(TirMonstre_Sprite+i)> screen height()
				`On supprime le sprite de la mémoire
				delete sprite TirMonstre_Sprite+i
			Endif
		Endif
	next i

return

`Méthode de suppression des tirs du héros
Supprime_TirHeros:

	if sprite exist(TirHeros_Sprite)
		if sprite Y(TirHeros_Sprite)<0
			delete sprite TirHeros_Sprite
		Endif
	Endif

return

`Méthode de gestion des collisions des tirs enemis avec le vaisseau héros
DetecteCollisionHerosAvecTir:
	
	`Pour chaque tir on regarde si il touche le vaisseau héros
	for i=0 to 50
		if sprite exist(TirMonstre_Sprite+i)
			if sprite hit(TirMonstre_Sprite+i, Heros_Sprite)
				goto GameOver
			Endif
		Endif
	next i

return

`Méthode de gestion des collisions des enemis avec le vaisseau héros
DetecteCollisionHerosAvecEnemi:

	if sprite hit(Heros_Sprite,0)>=100
		`Si le sprite de tir du héros existe on le supprime
		if sprite exist(TirHeros_Sprite)
			sprite TirHeros_Sprite, -50,-50, TirHeros_Image
		Endif
		goto GameOver
	Endif

return

`Méthode de gestion des collisions des tirs du héros avec les vaisseaux enemis
DetecteCollisionTirHerosAvecEnemi:

	` Pour chaque tir du héros on vérifie si il a touché un enemi
	if sprite exist(TirHeros_Sprite)
		Monstre_Detruit=sprite hit(TirHeros_Sprite,0)
		if Monstre_Detruit>=100
			`On détruit le sprite du monstre et le sprite du tir
			`delete sprite TirHeros_Sprite
			sprite TirHeros_Sprite, -50,-50, TirHeros_Image
			`delete sprite Monstre_Detruit
			sprite Monstre_Detruit, 320, -1000, Monstre_Image
		Endif
	Endif

return

`Méthode de tir du vaisseau héros
HerosTir_Evenement:

	if sprite exist(TirHeros_Sprite)=0
		`On a trouvé un sprite libre, on peut tirer
		sprite TirHeros_Sprite, sprite x(Heros_Sprite)+10, sprite y(Heros_Sprite)-20, TirHeros_Image
	Endif
	if sprite Y(TirHeros_Sprite)<0
		sprite TirHeros_Sprite, sprite x(Heros_Sprite)+10, sprite y(Heros_Sprite)-20, TirHeros_Image
	Endif

return

`Gestion des actions du vaisseau héros
GestionHeros:

	`On déplace le vaisseau Héros
   if leftKey() AND sprite X(Heros_Sprite)>0 then sprite Heros_Sprite, sprite X(Heros_Sprite)-Heros_Speed, Sprite Y(Heros_Sprite), Heros_Image
   if rightKey() AND sprite X(Heros_Sprite)<Screen width()-Sprite width(Heros_Sprite) then sprite Heros_Sprite, sprite X(Heros_Sprite)+Heros_Speed, Sprite Y(Heros_Sprite), Heros_Image
	
	`On fait tirer le vaisseau héros
	if spacekey() then gosub HerosTir_Evenement

return

`Deplacement du tir du vaisseau héros
DeplaceTirHeros:
	
	`Si le tir existe on le déplace
	if sprite exist(TirHeros_Sprite)
		Sprite TirHeros_Sprite, sprite x(TirHeros_Sprite), sprite Y(TirHeros_Sprite)-TirHeros_Speed, TirHeros_Image
	Endif
return

`#########################################################
`#               Fin des méthodes Gosub                  #
`#########################################################

`#########################################################
`#               Fonctions utiles                        #
`#########################################################

`Fonction qui renvoie le nom d'un fichier en concaténant un mot, un chiffre et une extension
Function GetNomFichier(NomFichier$, Numero, Extension$)

   `On crée le nom du fichier
   NomFichierFinal$=NomFichier$ + str$(Numero) + "." + Extension$

EndFunction NomFichierFinal$