Space invaders clone by laurent mrejen31st 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. 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$ |