TGC Codebase Backup



Break Out by laurent mrejen

26th May 2006 2:55
Summary

Hi, This time, I show you my new version of Break out.



Description

Hi,

I bring you those new features: Show the score, 3 lives to win and a level made with BreakOut LevelMaker (The former code I gave you).

However, there is a small function to help you loading all your bitmap and put them im image variables.



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    `Casse pas des briques Version 2
`Jeu de casse briques
`Mai 2006

`#########################################################
`#               Initialisation du jeu                   #
`#########################################################

   `On cache le curseur de la souris
   hide mouse

   `On initialise les variables
   gosub Init_VarGlobales
   `On charge les objets
   gosub Charge_Objets
   gosub Charge_SonEtMusique

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


`#########################################################
`#               Méthodes de gestion du menu             #
`#########################################################
Show_Menu:

   `On affiche le menu
   gosub Affiche_Menu
   `On joue la musique du menu
   loop music Musique_Menu

   `On vérifie que la touche appuyé est Espace ou escape
   repeat

      `Si on appuie sur Echape alors on termine le programme
      if escapekey() then end
   until spacekey()

return

`#########################################################
`#               Fin de la gestion du menu               #
`#########################################################


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

Jeu:

   `Changement de la musique
   stop music Musique_Menu
   loop music Musique_Jeu
   `Affichage du niveau
   level=1
   Vies=3
   Score=0
   gosub DisplayLevel

   do

      `Gestion de la raquette à la souris
      XMoveObjectWithMouse(Raquette_Sprite, 15, Ecran_PanneauJeuX-sprite width(Raquette_Sprite)-15, Raquette_Image)
      `Gestion de la balle
      gosub DetecteCollisionBalleAvecRaquette
      gosub DetecteCollisionBalleAvecEcran
      gosub DetecteCollisionBalleAvecBrique
      gosub Anime_Balle

      `Gestion de la fin de jeu si il ne reste plus de briques à l'écran
      if NbBrique=0
         `On a franchi un niveau ou on a gagné dans le jeu
         level=level+1
         if level>2
            `On a gagné
            gosub Affiche_Victoire
            goto Show_Menu
         else
            gosub DisplayLevel
            `On affiche un message "Next Level"
            set current bitmap ECRAN
         endif
      Endif
     if GameOver=1 then goto Show_Menu
      sync
   loop

end

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


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

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

   `Constantes des couleurs
   GRIS = rgb(168,168,168)
   BLANC = rgb(255,255,255)
   ORANGE = rgb(250,100,20)
   NOIR = rgb(0,0,0)

   `Constante indiquant l'écran
   ECRAN=0

   `Constante pour la taille de la zone de jeu
   Ecran_PanneauJeuX=screen width()-130

   `Constante de bitmap du décor
   Bitmap_Decor1=1
   Bitmap_Decor2=2
   Decor1_Image=1
   Decor2_Image=2

   `Constante de bitmap de la raquette
   Bitmap_Raquette=3
   Raquette_Image=3
   Raquette_Sprite=10
   Raquette_Son=2

   `Constante de bitmap pour les briques
   Bitmap_Briques=4
   `Les images vont de 4 à 7
   Brique_Image=4
   Brique_Sprite=100
   Brique_Son=3
   `Coodonnées des briques
   Dim Niveau(40,3)

   `Constante d'affichage de la balle
   Bitmap_Balle=8
   Balle_Image=8
   Balle_Sprite=200
   Balle_Speed=3

   `Constantes pour les musiques
   Musique_Menu=1
   Musique_Jeu=2
   Musique_Lose1Life=3

   `Variable de jeu
   Score=0
   NbBrique=40
   Level=1
   Vies=3
   GameOver=0

return

`Méthode d'initialisation du panneau d'affichage des infos du jeu
Init_PanneauJeu:
   set current bitmap ECRAN
   cls
   ink ORANGE,BLANC
   box Ecran_PanneauJeuX,1,Ecran_PanneauJeuX + 130-1,screen height()-1
   `On va écrire les scores
   ink NOIR, BLANC
   text Ecran_PanneauJeuX +25, 75, "SCORE"
   text Ecran_PanneauJeuX +25, 100, str$(Score)
   text Ecran_PanneauJeuX +25, 125, "LEVEL"
   text Ecran_PanneauJeuX +25, 150, str$(level)
   `On affiche les vies
   text Ecran_PanneauJeuX +25, 175, "VIES"
   text Ecran_PanneauJeuX +25, 200, str$(Vies)
   for i=1 to 3
      sprite Raquette_Sprite+i, Ecran_PanneauJeuX +5+i*15, 200, Raquette_Image
      scale sprite Raquette_Sprite+i, 5
   next i
return

`Initialisation de la raquette
Init_Raquette:

   `On affiche la raquette
   set sprite Raquette_Sprite, 1, 1
   sprite Raquette_Sprite, Ecran_PanneauJeuX/2, screen height()-50, Raquette_Image

return

`Initialisation de la balle
Init_Balle:

   `On affiche la balle
   set sprite Balle_Sprite, 1, 1
   sprite Balle_Sprite, Ecran_PanneauJeuX/2, screen height()-300, Balle_Image
   scale sprite Balle_Sprite, 40
return

`Méthode de construction de l'image du menu
Affiche_Menu:
   set current bitmap ECRAN
   `On vide l'écran
   cls
   `On écrit le nom du jeu
   ShowString2(screen width()/2, screen height()/2-40, BLANC, 60, "Comic Sans MS", "Casse pas des BRIQUES", 1)
   ShowString2(screen width()/2, screen height()-200, BLANC, 20, "Comic Sans MS", "Jouer.........Espace",1)
   ShowString2(screen width()/2, screen height()-180, BLANC, 20, "Comic Sans MS", "Quitter.......Echappe",1)
   ShowString2(screen width()/2, screen height()-120, BLANC, 20, "Comic Sans MS", "Programmé par Laurent Mrejen Mai 2006",1)
   ShowString2(screen width()/2, screen height()-70,  BLANC, 20, "Comic Sans MS", "Version 2",1)

return

`Méthode de construction de l'image Game Over
Affiche_GameOver:

   set current bitmap ECRAN
   `On définit la couleur et la police
   ink BLANC, NOIR
   set text font "Comic Sans MS"
   set text size 60
   `On écrit le nom du jeu
   center text screen width()/2, screen height()/2-40, "GAME OVER"
   set text size 20
   `On écrit le score
   center text screen width()/2, screen height()/2+50, "Score "
   center text screen width()/2+50, screen height()/2+50, str$(Score)

   `On arrête le jeu
   HideAllSprite(200)
   sleep 2000
   `On stoppe la musique
   stop music Musique_Jeu
   GameOver=1

return

`Méthode pour afficher le message disant au joueur qu'il a gagné
Affiche_Victoire:

   set current bitmap Ecran
   `On définit la couleur et la police
   ink BLANC, NOIR
   set text font "Comic Sans MS"
   set text size 60
   `On écrit le nom du jeu
   center text screen width()/2, screen height()/2-40, "You Win"
   `On arrête le jeu
   HideAllSprite(200)
   sleep 2000
   `On stoppe la musique
   stop music Musique_Jeu

return

`Méthode de chargement des objets à l'écran
Charge_Objets:

   `Chargement des 2 décors
   for i=0 to 1
      LoadSpriteImage(GetNomFichier("Images\Decor",i+1,"jpg"), Bitmap_Decor1+i)
   next i
   `Chargement des 4 briques
   for i=0 to 3
      LoadSpriteImage(GetNomFichier("Images\Brique",i+1,"bmp"), Bitmap_Briques+i)
   next i
   `Chargement de la raquette
   LoadSpriteImage("Images\Raquette.bmp", Bitmap_Raquette)
   `Chargement de la balle
   LoadSpriteImage("Images\Balle.bmp", Balle_Image)

return

`Méthode de chargement des son et musique
Charge_SonEtMusique:

   load sound "Musiques\Raquette.wav", Raquette_Son
   load sound "Musiques\Brique.wav", Brique_Son

   load music "Musiques\Intro.mid", Musique_Menu
   Load music "Musiques\Jeu.mid", Musique_Jeu
   Load music "Musiques\lost1life.mid", Musique_Lose1Life

return

`Méthode d'affichage du nouveau tableau
DisplayLevel:

   ` Affichage du panneau de jeu
   gosub Init_PanneauJeu
   `On affiche le décor
   DisplayBackground(Decor1_Image+level-1, 0, 0)
   `On affiche les briques
   gosub Decode_DataLevel
   `On affiche la raquette et la balle
   gosub Init_Raquette
   gosub Init_Balle
   `Initialisation des variables de jeu
   Balle_HDirection=1
   Balle_Vdirection=1
   NbBrique=40
   GameOver=0
   ShowAllSprite(200)

return

`Méthode de gestion du mouvement de la balle
Anime_Balle:

   `On déplace la balle suivant la direction
   sprite Balle_Sprite, sprite X(Balle_Sprite)+Balle_HDirection*Balle_Speed, sprite Y(Balle_Sprite)+ Balle_VDirection*Balle_Speed, Balle_Image

return

`Méthode de gestion des collisions de la balle avec le bord de l'écran
DetecteCollisionBalleAvecEcran:

   Borne_Sup=Ecran_PanneauJeuX-20
   if sprite X(Balle_Sprite)<15
      Balle_HDirection=1
      sprite Balle_Sprite, 15, Sprite Y(Balle_Sprite), Balle_Image
   Endif
   if sprite X(Balle_Sprite)>Borne_Sup
      Balle_HDirection=-1
      sprite Balle_Sprite, Borne_Sup, Sprite Y(Balle_Sprite), Balle_Image
   Endif
   if sprite Y(Balle_Sprite)<15
      Balle_VDirection=1
      sprite Balle_Sprite,Sprite X(Balle_Sprite), 15, Balle_Image
   Endif
   `Si la balle tombe en dessous de la raquette, on perd une vie
   if sprite Y(Balle_Sprite)>screen height()
      if Vies=0
         gosub Affiche_GameOver
      else
         Vies=Vies-1
         ShowString(ORANGE, Ecran_PanneauJeuX +25, 200, 30, 30, NOIR, str$(Vies))
         stop music Musique_Jeu
         play music Musique_Lose1Life
         sleep 5000
         `On affiche la raquette et la balle
         gosub Init_Raquette
         gosub Init_Balle
         stop music Musique_Lose1Life
         play music Musique_Jeu
      Endif
   Endif

return

`Méthode de gestion des collisions de la balle avec une brique
DetecteCollisionBalleAvecBrique:

   Brique_Detruit=Sprite hit(Balle_Sprite, 0)
   if Brique_Detruit>=100 AND Brique_Detruit<200
      `La balle a touché une brique
      sprite Brique_Detruit, Ecran_PanneauJeuX+50, screen height(), Brique_Image
      Hide sprite Brique_Detruit
      play sound Brique_Son
      Score=Score+1
      NbBrique=NbBrique-1
      `On affiche les scores
      ShowString(ORANGE, Ecran_PanneauJeuX +25, 100, 20, 20, NOIR, str$(Score))
      `On change la direction de la balle
      if sprite X(Balle_Sprite)<=sprite X(Brique_Detruit)
         Balle_XDirection=0-Balle_Xdirection
      Endif
      if sprite Y(Balle_Sprite)<=sprite Y(Brique_Detruit) then Balle_VDirection=0-Balle_Vdirection
   Endif

return

`Méthode de gestion des collisions dela balle avec la raquette
DetecteCollisionBalleAvecRaquette:

   if sprite hit(Balle_Sprite, Raquette_Sprite)
      Balle_VDirection=0-Balle_VDirection
      play sound Raquette_Son
   Endif
Return

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

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


`Fonction qui charge une bitmap crée l'image associée et libère la mémoire de la bitmap
Function LoadSpriteImage(Bitmap_path$, Image)

   Bitmap_Number=31

   `On charge l'image
   load bitmap Bitmap_path$, Bitmap_Number
   get image Image, 0,0, bitmap width(), bitmap height()
   `On supprime les fichiers bitmap de la mémoire
   delete bitmap Bitmap_Number

EndFunction

`Fonction d'affichage du décor à l'écran sans redimensionnement et repositionnement (1 décor par niveau)
Function DisplayBackground(Image, X, Y)

   set current bitmap 0
   `Le level commence à 1
   paste image Image, x, y

EndFunction

`Fonction d'affichage d'une chaine de caractère à l'écran avec possibilité de centrer le texte et de changer la taille de la police. Le texte est transparent
Function ShowString2(X, Y, StringColor, StringSize, StringPolice$, mot$, Flag_Center)

   set current bitmap 0
   ink StringColor, rgb(255,255,255)
   set text transparent
   set text size StringSize
   set text font StringPolice$
   if Flag_Center=1
      center text x,y, mot$
   else
      text x,y, mot$
   Endif

EndFunction

`Fonctions du framework
`Fonction qui permet le déplacement d'un objet contrôlé à la souris à l'horizontal
Function XMoveObjectWithMouse(Objet, X_Min, X_Max, Image)

   `On déplace l'objet en fonction de la valeur du déplacement de la souris
   sprite Objet, sprite X(objet)+MouseMoveX(), Sprite Y(Objet), Image
   `On ajuste la position
   if sprite X(Objet)<X_Min then sprite Objet, X_Min, Sprite Y(Objet), Image
   if sprite X(Objet)>X_Max then sprite Objet, X_Max, Sprite Y(Objet), Image

EndFunction

`Fonction qui permet de masquer tous les sprites à l'écran
Function HideAllSprite(iDernierSprite)

   for i=1 to iDernierSprite
      if sprite exist(i) then hide sprite i
   next i
EndFunction

`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$

`Fonction qui permet d'afficher tous les sprites à l'écran
Function ShowAllSprite(iDernierSprite)

   for i=1 to iDernierSprite
      if sprite exist(i) then show sprite i
   next i
EndFunction

`Fonction qui efface une portion de l'écran avec une couleur spécifié pour afficher une chaine de caractère
Function ShowString(BackColor, X, Y, longueur, largeur,StringColor, mot$)

   set current bitmap 0
   ink BackColor,rgb(255,255,255)
   box X,Y,X+longueur,Y+largeur
   ink StringColor, rgb(255,255,255)
   text x,y, mot$

EndFunction

`#########################################################
`#               data des niveaux                        #
`#########################################################
`Codage du niveau
` 1: Type de brique
` 2: Coordonnée en X
` 3: Coordonnée en Y
Decode_DataLevel:

   `On détermine la position des briques suivant la valeur de la variable Level
   if Level=1 then gosub Level1
   if level=2 then gosub Level2

   for i=0 to 3
      for j=0 to 9
         set sprite Brique_Sprite+i*10+j, 1, 1
         sprite Brique_Sprite+i*10+j, Niveau(i*10+j,2) , Niveau(i*10+j,3), Niveau(i*10+j,1)
         scale sprite Brique_Sprite+i*10+j, 60
      next j
   next i
return

`Données du niveau 1
Level1:

   `On initialise la position des monstres
   for i=0 to 3
      for j=0 to 9
         Niveau(i*10+j,1)=Brique_Image+i: Niveau(i*10+j,2)=30+45*j: Niveau(i*10+j,3)=35+25*i
      next j
   next i

return

`Données du niveau 2
Level2:

   Niveau(1,1)=Brique_Image+1: Niveau(1,2)=213: Niveau(1,3)=119
   Niveau(2,1)=Brique_Image+1: Niveau(2,2)=248: Niveau(2,3)=119
   Niveau(3,1)=Brique_Image+3: Niveau(3,2)=238: Niveau(3,3)=193
   Niveau(4,1)=Brique_Image+1: Niveau(4,2)=231: Niveau(4,3)=86
   Niveau(5,1)=Brique_Image+1: Niveau(5,2)=212: Niveau(5,3)=102
   Niveau(6,1)=Brique_Image+1: Niveau(6,2)=249: Niveau(6,3)=102
   Niveau(7,1)=Brique_Image: Niveau(7,2)=133: Niveau(7,3)=274
   Niveau(8,1)=Brique_Image: Niveau(8,2)=170: Niveau(8,3)=293
   Niveau(9,1)=Brique_Image: Niveau(9,2)=207: Niveau(9,3)=309
   Niveau(10,1)=Brique_Image: Niveau(10,2)=243: Niveau(1,3)=316
   Niveau(11,1)=Brique_Image: Niveau(11,2)=279: Niveau(11,3)=308
   Niveau(12,1)=Brique_Image: Niveau(12,2)=315: Niveau(12,3)=292
   Niveau(13,1)=Brique_Image: Niveau(13,2)=351: Niveau(13,3)=274
   Niveau(14,1)=Brique_Image: Niveau(14,2)=171: Niveau(14,3)=172
   Niveau(15,1)=Brique_Image: Niveau(15,2)=299: Niveau(15,3)=170
   Niveau(16,1)=Brique_Image+2: Niveau(16,2)=388: Niveau(16,3)=256
   Niveau(17,1)=Brique_Image+2: Niveau(17,2)=357: Niveau(17,3)=237
   Niveau(18,1)=Brique_Image+2: Niveau(18,2)=383: Niveau(18,3)=216
   Niveau(19,1)=Brique_Image+2: Niveau(19,2)=358: Niveau(19,3)=194
   Niveau(20,1)=Brique_Image+2: Niveau(20,2)=93: Niveau(20,3)=256
   Niveau(21,1)=Brique_Image+2: Niveau(21,2)=126: Niveau(21,3)=233
   Niveau(22,1)=Brique_Image+2: Niveau(22,2)=96: Niveau(22,3)=212
   Niveau(23,1)=Brique_Image+2: Niveau(23,2)=122: Niveau(23,3)=187
   Niveau(24,1)=Brique_Image+3: Niveau(24,2)=195: Niveau(24,3)=232
   Niveau(25,1)=Brique_Image+3: Niveau(25,2)=220: Niveau(25,3)=251
   Niveau(26,1)=Brique_Image+3: Niveau(26,2)=256: Niveau(26,3)=251
   Niveau(27,1)=Brique_Image+3: Niveau(27,2)=280: Niveau(27,3)=233
   Niveau(28,1)=Brique_Image+2: Niveau(28,2)=90: Niveau(28,3)=157
   Niveau(29,1)=Brique_Image+2: Niveau(29,2)=58: Niveau(29,3)=121
   Niveau(30,1)=Brique_Image+2: Niveau(30,2)=72: Niveau(30,3)=74
   Niveau(31,1)=Brique_Image+1: Niveau(31,2)=234: Niveau(31,3)=135
   Niveau(32,1)=Brique_Image+2: Niveau(32,2)=120: Niveau(32,3)=48
   Niveau(33,1)=Brique_Image+2: Niveau(33,2)=184: Niveau(33,3)=47
   Niveau(34,1)=Brique_Image+2: Niveau(34,2)=319: Niveau(34,3)=48
   Niveau(35,1)=Brique_Image+2: Niveau(35,2)=253: Niveau(35,3)=47
   Niveau(36,1)=Brique_Image+2: Niveau(36,2)=371: Niveau(36,3)=72
   Niveau(37,1)=Brique_Image+2: Niveau(37,2)=404: Niveau(37,3)=121
   Niveau(38,1)=Brique_Image+2: Niveau(38,2)=373: Niveau(38,3)=164
   Niveau(39,1)=Brique_Image+1: Niveau(39,2)=178: Niveau(39,3)=119
   Niveau(40,1)=Brique_Image+1: Niveau(40,2)=284: Niveau(40,3)=118

return