Break Out by laurent mrejen26th May 2006 2:55
|
---|
Summary Hi, This time, I show you my new version of Break out. Description Hi, 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 |