Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Pacman pour le prochain article | |
| | Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Pacman pour le prochain article Mar 22 Avr 2014 - 1:53 | |
| Bon, j'ai bossé un peu sur le Pacman pour préparer le prochain article. Le but: On avait Pacman qui mangeait des pacgommes et marquait des points. => On ajoute les fantômes et quelques interactions => Les fantômes mangent Pacman => Perte d'une vie et à 0: fin du jeu => Si Pacman mange une superpacgomme, les fantômes passent en mode Panic et Pacman peut les manger. S'il les mange, on marque des points, ils se transforment en yeux et retournent au point de départ. Pour faire des sources plus petits, j'ai divisé le programme en 8 parties Source 1: Pacman_Source_N8.bas - Pacman_Source_N8.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' Tutorial pour créer un Pacman ' Source n°8 : Pacman mange toujours des Pacgommes dans un labyrinthe et marque des points ' mais on ajoute les fantômes qui partent de leur prison et sortent se promener ' eux aussi dans le labyrinthe. S'ils croisent Pacman, le jeu se termine. ' Pour s'y retrouver dans ce programme qui commence à s'allonger, on va le couper en plusieurs parties: ' --------------------------------------------------------------------------------- '
Label Boucle,t1,t2,fin : ' déclaration des étiquettes des procédures de gestion d'événements
' --------------------------------------------------------------------------------- #include "Declaration.bas" ' 82 lignes : déclaration des variables et initialisations : L_Total = 94
' --------------------------------------------------------------------------------- #include "ProgrammePrincipal.bas" ' 199 lignes : la boucle principale du jeu et la gestion des événements : L_Total = 298
' --------------------------------------------------------------------------------- #include "CreerSprites.bas" ' 112 lignes : création des sprites utilisés dans le jeu L_Total = 412
' --------------------------------------------------------------------------------- #include "Niveau1.bas" ' 79 lignes : définition des données du niveau 1 L_Total = 494
' --------------------------------------------------------------------------------- #include "TraceNiveau.bas" ' 150 lignes : traçge du niveau L_Total = 647
' --------------------------------------------------------------------------------- #include "Gestion_Pacman.bas" ' 119 lignes : toutes les procédures permettant de gérer le comportement de Pacman 769
' --------------------------------------------------------------------------------- #include "Gestion_Fantomes.bas" ' 316 lignes : toutes les procédures permettant de gérer le comportement des fantômes
Source 2 : Declaration.bas - Declaration.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' ' Déclaration des variables et initialisation des valeurs ' ' Partie 2 du porgramme Pacman - Ne pas utiliser seul, ce programme est inclus dans ' le programme par le fichier source proncipal: Pacman_Source_N8.bas ' ' Créer par Jicehel le 13/04/2014 (Nb lignes : 82) ' ' --------------------------------------------------------------------------------- ' Dim I_Travail% : ' Numéro de l'objet contenant l'image des sprites du jeu Dim O% : O%=1 : ' Compteur d'objets Dim temp% : ' Utilisation a deviner avec un minimum de bon sens ... Dim Fond% : ' Picture servant à la création du fond de la scene2D Dim Spr%:Spr%=0 : ' Compteur de sprites (initialisé à 0) Dim ligne%,col% : ' Compteurs ligne et colonne Dim Scene2D% : ' Stocke le numero de l'objet Scene2D Dim N_Spr_Pacgomme% : ' Stocke l'image d'une Pacgomme Dim N_Spr_0% : ' Stocke le numero du sprite "0" Dim N_Spr_A% : ' Stocke le numero du sprite "A" Dim N_Spr_Laby% : ' Stocke le numero du premier sprite des murs Dim Pac_Man_G(1) : ' Stocke le numero des 2 sprites de Pac-Man vers la gauche Dim Pac_Man_B(1) : ' Stocke le numero des 2 sprites de Pac-Man vers le bas Dim Pac_Man_D(1) : ' Stocke le numero des 2 sprites de Pac-Man vers la droite Dim Pac_Man_H(1) : ' Stocke le numero des 2 sprites de Pac-Man vers le bas Dim Pac_Man_F : ' Stocke le numero de Pac-Man fermé Dim Pac_X,Pac_Y : ' Position du Pac-Man en X et en Y Dim Pac_dir$ : ' Direction du Pac-Man Dim Pac_Affiche% : ' Numero du sprite de PacMan affiche Dim Pac_Man_Etat$ :' Etat de Pac-Man (Normal, chasse)
Dim Fantome_G(7,1): ' Stocke le numero des 2 sprites des 4 Fantomes et des yeux vers la gauche Dim Fantome_B(7,1): ' Stocke le numero des 2 sprites des 4 Fantomes et des yeux vers le bas Dim Fantome_D(7,1): ' Stocke le numero des 2 sprites des 4 Fantomes et des yeux vers la droite Dim Fantome_H(7,1): ' Stocke le numero des 2 sprites des 4 Fantomes et des yeux vers le bas Dim Fantome_Panique(7,1) : ' Stocke les numéros des sprites des fantômes en mode panique (2 bleus / 2 blancs) Dim Fantome_X(3),Fantome_Y(3) : ' Position des 4 Fantomes et des yeux en X et en Y Dim Fantome_dir$(3) : ' Direction des 4 Fantomes et des yeux Dim Fantome_Affiche%(3) : ' Numero du sprite affiché des 4 fantomes Dim Fantome_Etat$(3) : ' Etat des 4 fantomes (Attente, Sort, Normal, Chasse, Panique, Yeux, ...) Dim Fantome_Timer%(3) : ' Timers du temps de panique restant sur chaque fantôme pour permettre une gestion personnalisée
Dim Attente : Attente = 10 : ' Délai d'attente entre 2 sorties de fantômes Dim L_Prison : L_Prison = 14 : ' Ligne de la maison des fantômes Dim Tps_Panique : Tps_Panique = 60 : ' Nb de cycles de panique des fantômes Dim Alerte_Fin_Panique% : Alerte_Fin_Panique% = 40 : ' Nb de cycles restant où le fantôme va clignoter en blanc pour alerter de la fin proche de l'état de panique Dim bonus_fantome% : ' Correspond au multiplicateur de points de bonus d'un fantôme mangé, augmente quand on mange plusieurs fantôme pendant l'état panique Dim Cpt_Panique% : ' Variable temporaire pour compter s'il reste des fantômes en mode Panique
Dim img% : ' Numero de l'image de travail Dim Nb_L : Nb_L = 30 : ' Nb de lignes de 0 à Nb_L Dim Nb_C : Nb_C = 27 : ' Nb de colonnes de 0 à Nb_C Dim Tuiles(Nb_C,Nb_L): ' Tableau des tuiles chargées Dim Pacgommes(Nb_C,Nb_L): ' Tableau des emplacement de pacgommes Dim Retour$(Nb_C,Nb_L): ' Tableau des déplacements des fantômes pour retourner à leur prison Dim Nb_Pacgommes% : ' Nombre de Pacgommes restantes Dim Taille_Tuile : Taille_Tuile = 12 : ' Dimension d'une tuile Dim Boucle% : ' Timer de la boucle principale Dim Tps_Boucle%,Nb_Cycle% : ' Tps élémentaire d'une boucle et nb de cycle de boucle composant un cycle complet du jeu Dim Cpt_Cycle% : ' Permet de connaitre le nombre de fois que la boucle a été déclenchée dans le cycle complet d'une phase de jeu Tps_Boucle% = 6 : Nb_Cycle% = 10 Dim Score%, A_Score% : ' Je pense qu'avec un peu d'imagination vous trouverez ... Dim Pause% : ' A 1 on a le jeu en pause Dim NbCarMenu% : NbCarMenu% = 13 : ' Nombre de caractères à pouvoir afficher dans le menu Dim L_Menu% : L_Menu% = (NbCarMenu% + 2.5)*Taille_Tuile : ' Taille du Menu Dim L_Score%, L_High% : ' Stockage des numéros de ligne du score et du High score Dim L_vie%, L_niveau% : ' Stockage du numéro de la ligne pour afficher les vies et pour le niveau Dim Aff_Score%, Aff_High% : ' Alpha servant à l'affichage du score et du highscore Dim Aff_vie%, Aff_niveau% : ' Alpha servant à afficher le nombre de vies restantes et le niveau courant Dim Menu% : ' Numero du picture pour garder l'affichage du menu si on réduit la fenêtre
Dim Vie% : ' Nombre de vies restantes Dim Niveau% : ' Niveau courant
' ****************************** COMMANDES CLAVIER ************************** Dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:.... 27 * Dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> PIVOTER À GAUCHE:....... 37 * Dim tfh,ctfh : ctfh=38 : ' * FLÈCHE HAUTE ==> AVANCER:................. 38 * Dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> PIVOTER À DROITE:....... 39 * Dim tfb,ctfb : ctfb=40 : ' * FLÈCHE BASSE ==> RECULER:................. 40 * ' ***************************************************************************
Source 3 : ProgrammePrincipal.bas - ProgrammePrincipal.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' ' Programme principal et autres procédures ' ' Partie 3 du porgramme Pacman - Ne pas utiliser seul, ce programme est inclus dans ' le programme par le fichier source proncipal: Pacman_Source_N8.bas ' ' Créer par Jicehel le 13/04/2014 (Nb lignes : 199) ' ' --------------------------------------------------------------------------------- '
' Redimensionnement de la fenêtre principal Width 0,L_Menu% + 30*Taille_Tuile: Height 0, 32*Taille_Tuile + 38 : color 0,0,0,0 Caption 0, "Pacman - Programme de fin de la 2ème partie du tutorial"
' Création du picture pour le menu Menu% = O% : Picture O% : O%=O%+1 : Top Menu%,0 : Width Menu%, L_Menu% : Height Menu%,Height(0)-38 Color Menu%,0,0,0
' Création du fond du scene2D fond% = O%: Picture fond% : O%=O%+1 : hide fond% : Top fond%,0 : Left fond%,L_Menu% Width fond%,Width(0)-16 - L_Menu% : Height fond%,Height(0)-38
' Création du scene2D qui nous servira pour le jeu Scene2D% = O% : Scene2D Scene2D% : Hide Scene2D% : O%=O%+1 : Top Scene2D%,0 Width Scene2D%,Width(0)-16 - L_Menu%: Height Scene2D%,Height(0)-38 : Left Scene2D%, L_Menu%
' Préparation des éléments graphiques tuiles, sprites, menu, ... CreerSprites() Niveau% = 1 : ' On initalise le premier tableau à 1 (niveau de départ) Vie% = 4 : ' On initailise le nombre de vies de départ du joueur
' Création des objet "Alpha" pour l'affichage du score et le high score O% = O% + 1 : Aff_Score% = O% : Creer_Alpha() O% = O% + 1 : Aff_High% = O% : Creer_Alpha() O% = O% + 1 : Aff_vie% = O% : Creer_Alpha() O% = O% + 1 : Aff_niveau% = O% : Creer_Alpha() O% = O% + 1
' Création du niveau initial (notre seul niveau pour ce tutorial) Trace_niveau()
' Initialisation du score et de la position de Pacman Score% = 0 : Init_PacMan(14,17) : Init_Fantomes()
' Affichage de l'écran Show Scene2D%
' On détecte le changement d'état des touches on_key_down 0,t1 : on_key_up 0,t2
' Création du timer principal du jeu, c'est le coeur du jeu, le temps de base d'un cycle Boucle% = O% : O%=O%+1 :Timer Boucle%: Timer_interval Boucle%,40 : On_Timer Boucle%, Boucle Timer_on Boucle%
End
' ********************************************************************************* ' Fin du programme principal ' *********************************************************************************
' ******** Procédure pour créer les alphas d'affichage dans les menus *********
Sub Creer_Alpha() Alpha O% : Font_color O%,255,255,255 : Color O%,0,0,0 : Font_size O%,13 :Font_bold O% End_sub
' ******* Procédure testant les collisions entre les fantômes et Pacman *******
Sub Test_collision(Num%) Dim_local i% If Num% < 5 If Fantome_X(Num%) = Pac_X and Fantome_Y(Num%) = Pac_Y then Collision(Num%) Else For i% = 0 to 3 If Fantome_X(i%) = Pac_X and Fantome_Y(i%) = Pac_Y then Collision(i%) Next i% End_if End_sub
' ******* Procédure traitant les collisions entre les fantômes et Pacman *******
Sub Collision(NumF%) Dim_local i% If Fantome_Etat$(NumF%)="Panique" or Fantome_Etat$(NumF%)="Normal" If Fantome_Etat$(NumF%)="Panique" then MangeFantome(NumF%) If Fantome_Etat$(NumF%)="Normal" then MangePacman() End_If End_sub
' ****** Procédures événementielles
t1: if key_down_code=cesc then esc=1 if key_down_code=ctfg then tfg=1 if key_down_code=ctfh then tfh=1 if key_down_code=ctfd then tfd=1 if key_down_code=ctfb then tfb=1 return
t2: if key_down_code=cesc then esc=0 if key_down_code=ctfg then tfg=0 if key_down_code=ctfh then tfh=0 if key_down_code=ctfd then tfd=0 if key_down_code=ctfb then tfb=0 return
' ******* Procédure traitant les événements de touches *******
sub Test_Touche() ' Si on a détecté que la touche flèche gauche avait été enfoncée if tfg=1 if Pac_X > 0 ' Alors s'il n'y a pas de mur, on va à gauche if Tuiles(Pac_X-1,Pac_Y) >= 44 then Pac_dir$="Gauche" end_if ' On vérifie que la touche est toujours enfoncé, sinon on efface le drapeau comme quoi elle l'est... if scancode<>ctfg then tfg=0 end_if
' On fait la même chose pour les touche droite, haut et bas dans les lignes ci-dessous
if tfd=1 if Pac_X < Nb_C if Tuiles(Pac_X+1,Pac_Y) >= 44 then Pac_dir$="Droite" end_if if scancode<>ctfd then tfd=0 end_if
if tfh=1 if Pac_Y > 0 if Tuiles(Pac_X,Pac_Y-1) >= 44 then Pac_dir$="Haut" end_if if scancode<>ctfh then tfh=0 end_if
if tfb=1 if Pac_Y < Nb_L if Tuiles(Pac_X,Pac_Y+1) >= 44 then Pac_dir$="Bas" end_if if scancode<>ctfb then tfb=0 end_if end_sub
' ******* Boucle principale du jeu *******
boucle: timer_off Boucle% : ' On coupe le timer le temps de traiter la boucle principale du jeu if esc=1 then goto fin : ' On sort si on a appuyé sur la touche 'Esc'
' Maintenant on test s'il reste des Pacgommes à manger quand il n'en reste plus normalement, on changera de niveau if Nb_Pacgommes% = 0 then message "Bravo, vous avez tout vidé !!": goto fin : ' Mais pour l'instant on s'arrète après un niveau
' Mise à jour des temps pour les états des 4 fanômes pour quand ils attendent pour sortir ou quand ils sont en mode "Panique" Cpt_Panique% = 0 : ' Va servir pour savoir s'il reste des fantômes en mode panique. S'il n'y en a plus on réinitialise le bonus For temp% = 0 to 3 If Fantome_Etat$(temp%)="Attente" then Fantome_Timer%(temp%) = Fantome_Timer%(temp%) - 1 If Fantome_Etat$(temp%)="Panique" Cpt_Panique% = Cpt_Panique% + 1 Fantome_Timer%(temp%) = Fantome_Timer%(temp%) - 1 If Fantome_Timer%(temp%) <= 0 then Fantome_Etat$(temp%)="Normal" : Fantome_Timer%(temp%) = 0 End_If Next temp% If Cpt_Panique% = 0 then bonus_fantome% = 1
' Comptage du nombre de boucles pour faire intervenir les différents élément du jeu Cpt_Cycle% = Cpt_Cycle% + 1
' On bouge pacman environ tous les 3 cycles, donc Pacman est un peu plus rapide que les fantômes (en tout cas pour le moment) ' On pourra jouer sur ces paramètrage plus tard en fonction de l'augmentation du niveau if Cpt_Cycle% = 1 or Cpt_Cycle%=4 or Cpt_Cycle%=7 or Cpt_Cycle%=9 then Test_Touche() : Deplace_Pacman() ' Les fantomes bougents environ tous les 5 cycles, mais on peut les accélérer par rapport à pacman en changeant les lignes ci dessous if Cpt_Cycle% = 1 or Cpt_Cycle% = 6 then Deplace_Fantomes(0) if Cpt_Cycle% = 3 or Cpt_Cycle% = 7 then Deplace_Fantomes(1) if Cpt_Cycle% = 4 or Cpt_Cycle% = 8 then Deplace_Fantomes(2) if Cpt_Cycle% = 5 or Cpt_Cycle% = 9 then Deplace_Fantomes(3) ' Si on a atteind le Nb de cycles maximum d'une séquence de jeu, remettre à 0 le compteur pour commencer une nouvelle séquence if Cpt_Cycle% >= Nb_Cycle% then Cpt_Cycle% = 0
' On n'oublie pas de remettre en route le timer qui redéclenchera la boucle principale timer_on Boucle% return
' ******* Boucle de sortie du jeu ******* ' Procédure événementielle minimaliste pour le moment. On améliorera la sortie du jeu prochainement.
fin: terminate
Source 4 : CreerSprites.bas - CreerSprites.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' ' Création de tous les sprites depuis l'image contenant l'ensembles des éléments ' ' Partie 4 du porgramme Pacman - Ne pas utiliser seul, ce programme est inclus dans ' le programme par le fichier source proncipal: Pacman_Source_N8.bas ' ' Créer par Jicehel le 13/04/2014 (Nb lignes : 112) ' ' --------------------------------------------------------------------------------- '
sub CreerSprites() ' Création de I_Travail% et chargement de l'image contenant les sprites dans cet objet I_travail% = O%: O%=O%+1 :Picture I_travail% : Hide I_travail% Width I_travail%,392 : Height I_travail%,296 : Top I_travail%,-2000 File_load I_travail%,"gfx_12px.bmp"
' Chargement des sprites dans des images 2D_target_is I_travail% For ligne%=1 to 8 For col%=1 to 32 O%=O% + 1 If ligne%=1 and col%=17 then N_Spr_Pacgomme% = O% If ligne%=2 and col%=17 then N_Spr_0% = O% If ligne%=3 and col%=2 then N_Spr_A% = O% If ligne%=7 and col%=17 then N_Spr_Laby% = O% Image O% 2D_Image_Copy O%,col%*Taille_Tuile-8,ligne%*Taille_Tuile-7,col%*Taille_Tuile+4,ligne%*Taille_Tuile+5 Next col% Next ligne%
For ligne%=0 to 1 ' Sprites des déplacements de Pacman O%=O% + 1 : img% = O% : Image img% : hide img% 2D_Image_Copy img%,12*Taille_Tuile*2+4+4*Taille_Tuile*ligne%,7*2*Taille_Tuile+4,13*2*Taille_Tuile+3+4*Taille_Tuile*ligne%,8*2*Taille_Tuile+3 Spr% = Spr%+1 : Pac_Man_D(ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,13*2*Taille_Tuile+4+4*Taille_Tuile*ligne%,7*2*Taille_Tuile+4,14*2*Taille_Tuile+3+4*Taille_Tuile*ligne%,8*2*Taille_Tuile+3 Spr% = Spr%+1 : Pac_Man_B(ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,4+4*Taille_Tuile*ligne%,11*2*Taille_Tuile+4,27+4*Taille_Tuile*ligne%,12*2*Taille_Tuile+3 Spr% = Spr%+1 : Pac_Man_G(ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,4+2*Taille_Tuile+4*Taille_Tuile*ligne%,11*2*Taille_Tuile+4,27+2*Taille_Tuile+4*Taille_Tuile*ligne%,12*2*Taille_Tuile+3 Spr% = Spr%+1 : Pac_Man_H(ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr%
' Sprites des déplacements des Fantômes
' Fantome rouge 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4,14*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3,16*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_D(0,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+4*Taille_Tuile,14*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3+4*Taille_Tuile,16*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_B(0,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+8*Taille_Tuile,14*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3+8*Taille_Tuile,16*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_G(0,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+12*Taille_Tuile,14*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3+12*Taille_Tuile,16*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_H(0,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr%
' Fantome rose 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4,18*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3,20*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_D(1,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+4*Taille_Tuile,18*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3+4*Taille_Tuile,20*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_B(1,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+8*Taille_Tuile,18*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3+8*Taille_Tuile,20*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_G(1,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+12*Taille_Tuile,18*Taille_Tuile+5,2*Taille_Tuile*(1+ligne%)+3+12*Taille_Tuile,20*Taille_Tuile+4 Spr% = Spr%+1 :Fantome_H(1,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr%
' Fantome bleu 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+16*Taille_Tuile,18*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+16*Taille_Tuile,20*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_D(2,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+20*Taille_Tuile,18*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+20*Taille_Tuile,20*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_B(2,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+24*Taille_Tuile,18*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+24*Taille_Tuile,20*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_G(2,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+28*Taille_Tuile,18*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+28*Taille_Tuile,20*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_H(2,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr%
' Fantome orange 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_D(3,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+4*Taille_Tuile,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+4*Taille_Tuile,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_B(3,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+8*Taille_Tuile,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+8*Taille_Tuile,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_G(3,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+12*Taille_Tuile,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+12*Taille_Tuile,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_H(3,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr%
' Création des sprites pour les 4 fantomes For temp%=0 to 3 ' Yeux 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+16*Taille_Tuile,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+16*Taille_Tuile,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_D(4+temp%,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+20*Taille_Tuile,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+20*Taille_Tuile,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_B(4+temp%,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+24*Taille_Tuile,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+24*Taille_Tuile,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_G(4+temp%,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+28*Taille_Tuile,20*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+28*Taille_Tuile,22*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_H(4+temp%,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr%
' Fantome panique bleu 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+24*Taille_Tuile,12*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+24*Taille_Tuile,14*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_Panique(0+2*temp%,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr%
' Fantome panique blanc 2D_Image_Copy img%,2*Taille_Tuile*ligne%+4+8*Taille_Tuile,22*Taille_Tuile+4,2*Taille_Tuile*(1+ligne%)+3+8*Taille_Tuile,24*Taille_Tuile+3 Spr% = Spr%+1 :Fantome_Panique(1+2*temp%,ligne%) = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% Next temp%
Next ligne% 2D_Image_Copy img%,4,8*2*Taille_Tuile+4,3+2*Taille_Tuile,9*2*Taille_Tuile+3 Spr% = Spr%+1 : Pac_Man_F = Spr% : Sprite Spr% : Sprite_image_load Spr%,img% : Sprite_Hide Spr% O% = O% + 1 end_sub
Source 5 : Niveau1.bas - Niveau1.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' ' Défintions de la valeurs des cases du level 1 de notre Pacman ' ' Partie 5 du porgramme Pacman - Ne pas utiliser seul, ce programme est inclus dans ' le programme par le fichier source proncipal: Pacman_Source_N8.bas ' ' Créer par Jicehel le 13/04/2014 (Nb lignes : 79) ' ' --------------------------------------------------------------------------------- ' ' Les données du niveau 1 ' Les murs ' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Data 01,10,10,10,10,10,10,10,10,10,10,10,10,43,42,10,10,10,10,10,10,10,10,10,10,10,10,00 : ' 01 Data 03,44,44,44,44,44,44,44,44,44,44,44,44,25,24,44,44,44,44,44,44,44,44,44,44,44,44,02 : ' 02 Data 03,44,39,14,14,38,44,39,14,14,14,38,44,25,24,44,39,14,14,14,38,44,39,14,14,38,44,02 : ' 03 Data 03,46,25,45,45,24,44,25,45,45,45,24,44,25,24,44,25,45,45,45,24,44,25,45,45,24,46,02 : ' 04 Data 03,44,41,20,20,40,44,41,20,20,20,40,44,41,40,44,41,20,20,20,40,44,41,20,20,40,44,02 : ' 05 Data 03,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,02 : ' 06 Data 03,44,39,14,14,38,44,39,38,44,39,14,14,14,14,14,14,38,44,39,38,44,39,14,14,38,44,02 : ' 07 Data 03,44,41,20,20,40,44,25,24,44,41,20,20,35,34,20,20,40,44,25,24,44,41,20,20,40,44,02 : ' 08 Data 03,44,44,44,44,44,44,25,24,44,44,44,44,25,24,44,44,44,44,25,24,44,44,44,44,44,44,02 : ' 09 Data 05,12,12,12,12,22,44,25,41,14,14,38,44,25,24,44,39,14,14,40,24,44,23,12,12,12,12,04 : ' 10 Data 45,45,45,45,45,03,44,25,34,20,20,40,44,41,40,44,41,20,20,35,24,44,02,45,45,45,45,45 : ' 11 Data 45,45,45,45,45,03,44,25,24,44,44,44,44,44,44,44,44,44,44,25,24,44,02,45,45,45,45,45 : ' 12 Data 45,45,45,45,45,03,44,25,24,44,29,12,33,-1,-1,32,12,28,44,25,24,44,02,45,45,45,45,45 : ' 13 Data 10,10,10,10,10,40,44,41,40,44,02,45,45,45,45,45,45,03,44,41,40,44,41,10,10,10,10,10 : ' 14 Data 44,44,44,44,44,44,44,44,44,44,02,45,45,45,45,45,45,03,44,44,44,44,44,44,44,44,44,44 : ' 15 Data 12,12,12,12,12,22,44,39,38,44,02,45,45,45,45,45,45,03,44,39,38,44,23,12,12,12,12,12 : ' 16 Data 45,45,45,45,45,03,44,25,24,44,31,10,10,10,10,10,10,30,44,25,24,44,02,45,45,45,45,45 : ' 17 Data 45,45,45,45,45,03,44,25,24,44,44,44,44,45,45,45,44,44,44,25,24,44,02,45,45,45,45,45 : ' 18 Data 45,45,45,45,45,03,44,25,24,44,39,14,14,14,14,14,14,38,44,25,24,44,02,45,45,45,45,45 : ' 19 Data 01,10,10,10,10,40,44,41,40,44,41,20,20,35,34,20,20,40,44,41,40,44,41,10,10,10,10,00 : ' 20 Data 03,44,44,44,44,44,44,44,44,44,44,44,44,25,24,44,44,44,44,44,44,44,44,44,44,44,44,02 : ' 21 Data 03,44,39,14,14,38,44,39,14,14,14,38,44,25,24,44,39,14,14,14,38,44,39,14,14,38,44,02 : ' 22 Data 03,44,41,20,38,24,44,41,20,20,20,40,44,41,40,44,41,20,20,20,40,44,25,39,20,40,44,02 : ' 23 Data 03,46,44,44,25,24,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,25,24,44,44,46,02 : ' 24 Data 07,14,22,44,25,24,44,39,38,44,39,14,14,14,14,14,14,38,44,39,38,44,25,24,44,23,14,06 : ' 25 Data 09,20,26,44,41,40,44,25,24,44,41,20,20,35,34,20,20,40,44,25,24,44,41,40,44,27,20,08 : ' 26 Data 03,44,44,44,44,44,44,25,24,44,44,44,44,25,24,44,44,44,44,25,24,44,44,44,44,44,44,02 : ' 27 Data 03,44,39,14,14,14,14,40,41,14,14,38,44,25,24,44,39,14,14,40,41,14,14,14,14,38,44,02 : ' 28 Data 03,44,41,20,20,20,20,20,20,20,20,40,44,41,40,44,41,20,20,20,20,20,20,20,20,40,44,02 : ' 29 Data 03,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,02 : ' 30 Data 05,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,04 : ' 31
' Les déplacements pour retourner à la prison ' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Data 01,10,10,10,10,10,10,10,10,10,10,10,10,43,42,10,10,10,10,10,10,10,10,10,10,10,10,00 : ' 01 Data 03, B, D, D, D, D, B, G, G, D, D, D, B,25,24, B, G, G, G, D, D, B, G, G, G, G, B,02 : ' 02 Data 03, B,39,14,14,38, B,39,14,14,14,38, B,25,24, B,39,14,14,14,38, B,39,14,14,38, B,02 : ' 03 Data 03, B,25,45,45,24, B,25,45,45,45,24, B,25,24, B,25,45,45,45,24, B,25,45,45,24, B,02 : ' 04 Data 03, B,41,20,20,40, B,41,20,20,20,40, B,41,40, B,41,20,20,20,40, B,41,20,20,40, B,02 : ' 05 Data 03, D, D, D, D, D, D, D, D, B, G, G, G, G, D, D, D, D, B, G, G, G, G, G, G, G, G,02 : ' 06 Data 03, B,39,14,14,38, H,39,38, B,39,14,14,14,14,14,14,38, B,39,38, H,39,14,14,38, B,02 : ' 07 Data 03, B,41,20,20,40, H,25,24, B,41,20,20,35,34,20,20,40, B,25,24, H,41,20,20,40, B,02 : ' 08 Data 03, D, D, D, D, D, H,25,24, D, D, D, B,25,24, B, G, G, G,25,24, H, G, G, G, G, G,02 : ' 09 Data 05,12,12,12,12,22, H,25,41,14,14,38, B,25,24, B,39,14,14,40,24, H,23,12,12,12,12,04 : ' 10 Data 45,45,45,45,45,03, H,25,34,20,20,40, B,41,40, B,41,20,20,35,24, H,02,45,45,45,45,45 : ' 11 Data 45,45,45,45,45,03, B,25,24, D, D, D, D, B, G, G, G, G, G,25,24, B,02,45,45,45,45,45 : ' 12 Data 45,45,45,45,45,03, B,25,24, H,29,12,33, B, B,32,12,28, H,25,24, B,02,45,45,45,45,45 : ' 13 Data 10,10,10,10,10,40, B,41,40, H,02,45,45, B, B,45,45,03, H,41,40, B,41,10,10,10,10,10 : ' 14 Data D, D, D, D, D, D, D, D, D, H,02,45,45, S, S,45,45,03, H, G, G, G, G, G, G, G, G, G : ' 15 Data 12,12,12,12,12,22, H,39,38, H,02,45,45,45,45,45,45,03, H,39,38, H,23,12,12,12,12,12 : ' 16 Data 45,45,45,45,45,03, H,25,24, H,31,10,10,10,10,10,10,30, H,25,24, H,02,45,45,45,45,45 : ' 17 Data 45,45,45,45,45,03, H,25,24, H, G, G, G, G, G, D, D, D, H,25,24, H,02,45,45,45,45,45 : ' 18 Data 45,45,45,45,45,03, B,25,24, H,39,14,14,14,14,14,14,38, H,25,24, B,02,45,45,45,45,45 : ' 19 Data 01,10,10,10,10,40, B,41,40, H,41,20,20,35,34,20,20,40, H,41,40, B,41,10,10,10,10,00 : ' 20 Data 03, D, D, D, D, D, D, D, D, H, G, G, G,25,24, D, D, D, H, G, G, G, G, G, G, G, G,02 : ' 21 Data 03, H,39,14,14,38, H,39,14,14,14,38, H,25,24, H,39,14,14,14,38, H,39,14,14,38, H,02 : ' 22 Data 03, H,41,20,38,24, H,41,20,20,20,40, H,41,40, H,41,20,20,20,40, H,25,39,20,40, H,02 : ' 23 Data 03, H, D, B,25,24, H, G, G, D, D, D, H, G, D, H, G, G, G, D, D, H,25,24, B, G, H,02 : ' 24 Data 07,14,22, B,25,24, H,39,38, H,39,14,14,14,14,14,14,38, H,39,38, H,25,24, B,23,14,06 : ' 25 Data 09,20,26, B,41,40, H,25,24, H,41,20,20,35,34,20,20,40, H,25,24, H,41,40, B,27,20,08 : ' 26 Data 03, D, D, D, D, D, H,25,24, H, G, G, G,25,24, D, D, D, H,25,24, H, G, G, G, G, G,02 : ' 27 Data 03, H,39,14,14,14,14,40,41,14,14,38, H,25,24, H,39,14,14,40,41,14,14,14,14,38, H,02 : ' 28 Data 03, H,41,20,20,20,20,20,20,20,20,40, H,41,40, H,41,20,20,20,20,20,20,20,20,40, H,02 : ' 29 Data 03, H, G, G, D, D, D, D, D, D, D, D, H, G, D, H, G, G, G, G, G, G, G, G, D, D, H,02 : ' 30 Data 05,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,04 : ' 31
Source 6 : TraceNiveau.bas - TraceNiveau.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' ' Procedure qui charge les données du niveau, le trace puis le sauvegarde en tant ' qu'image "niveau.bmp". Cette partie contient aussi la valeur de la case pour choisir ' le chemin du retour des fantômes mangés jusqu'à leur "prison" ' ' Partie 6 du porgramme Pacman - Ne pas utiliser seul, ce programme est inclus dans ' le programme par le fichier source proncipal: Pacman_Source_N8.bas ' ' Créer par Jicehel le 13/04/2014 (Nb lignes : 150) ' ' --------------------------------------------------------------------------------- '
Sub trace_Niveau() 2D_target_is fond% : Color fond%,0,0,0 Nb_Pacgommes% = 0 For ligne% = 0 to Nb_L For col% = 0 to Nb_C Read temp% : Tuiles(col%,ligne%) = temp% : ' On lit le sprite à afficher et on le mémorise dans le tableau 2D_Image_Paste N_Spr_Laby%+temp%,col%*Taille_Tuile+5,ligne%*Taille_Tuile+5 If temp%=44 Spr%=Spr%+1 : Sprite Spr% Sprite_image_load Spr%,N_Spr_Pacgomme% : Sprite_Position Spr%,col%*Taille_Tuile+4,ligne%*Taille_Tuile+4 Pacgommes(col%,ligne%) = Spr% : Nb_Pacgommes% = Nb_Pacgommes% + 1 Else If temp%=46 Spr%=Spr%+1 : Sprite Spr% Sprite_image_load Spr%,N_Spr_Pacgomme%+4 : Sprite_Position Spr%,col%*Taille_Tuile+4,ligne%*Taille_Tuile+4 Pacgommes(col%,ligne%) = Spr% : Nb_Pacgommes% = Nb_Pacgommes% + 1 End_If End_if Next col% Next ligne% CreerMenu() File_save fond%,"niveau.bmp" File_load scene2D%,"niveau.bmp"
' Charge le tableau des déplacements de retour des fantômes dans le labyrinthe
For ligne% = 0 to Nb_L For col% = 0 to Nb_C Read Retour$(col%,ligne%) Next col% Next ligne%
End_sub
' --------------------------------------------------------------------------------- ' Procédure permettant d'afficher la partie "Menu" située à gauche de l'écran ' Sub CreerMenu() 2D_Target_is Menu% menu_2L(1,NbCarMenu%,"HIGH SCORE") : menu_2L(9,NbCarMenu%,"SCORE PLAYER 1") menu_1L(18,NbCarMenu%,"VIES") : menu_1L(24,NbCarMenu%,"NIVEAU") L_Score% = 13 : L_High%=5 : L_vie% = 19 : L_niveau% = 25 Left Aff_score%, 2 * Taille_Tuile : Top Aff_score%,(L_Score% - 1) * Taille_Tuile : Caption Aff_score%,"00000000" Left Aff_High% , 2 * Taille_Tuile : Top Aff_High%,(L_High% - 1) * Taille_Tuile : Caption Aff_High%,"00000000" Left Aff_vie% , 10 * Taille_Tuile : Top Aff_vie%,(L_vie% - 1) * Taille_Tuile : Caption Aff_vie%,Right$("000"+ str$(Vie%),3) Left Aff_niveau%, 10 * Taille_Tuile : Top Aff_niveau%,(L_niveau% - 1)* Taille_Tuile : Caption Aff_niveau%,Right$("000"+str$(Niveau%),3) End_sub
' --------------------------------------------------------------------------------- ' Procédures permettant la création des menus '
' Procédure menu_1L a appeler pour créer un cadre d'une ligne ' paramètres: Position en Y, taille du texte à afficher (hors cadre) et texte à afficher ' Sub menu_1L(Position_Y,Nb_Car%,Texte_Menu$) menu_h(Position_Y,Nb_Car%) menu_t(Position_Y+1,Nb_Car%,Texte_Menu$) menu_b(Position_Y+2,Nb_Car%) End_Sub
' Procédure menu_2L a appeler pour créer un cadre de deux lignes ' paramètres: Position en Y, taille du texte à afficher (hors cadre) et texte à afficher ' Sub menu_2L(Position_Y,Nb_Car%,Texte_Menu$) menu_h(Position_Y,Nb_Car%) menu_t(Position_Y+1,Nb_Car%,Texte_Menu$) menu_m(Position_Y+2,Nb_Car%) menu_t(Position_Y+4,Nb_Car%,"") menu_b(Position_Y+5,Nb_Car%) End_Sub ' ---------------------------------------------------------------------------------
' --------------------------------------------------------------------------------- ' Procédure permettant de créer la ligne du haut du menu ' paramètres: Position en Y et taille du texte à afficher (hors cadre) ' Sub menu_h(Y,L) Y=Y-1 Dim_Local compt 2D_Image_Paste N_Spr_Laby%+1, 0.5*Taille_Tuile+5,Y*Taille_Tuile+5 For compt=1.5 to (L-0.5) 2D_Image_Paste N_Spr_Laby%+10, compt*Taille_Tuile+5,Y*Taille_Tuile+5 Next compt 2D_Image_Paste N_Spr_Laby%, (L+0.5)*Taille_Tuile+5,Y*Taille_Tuile+5 End_sub
' Procédure permettant de créer une ligne de texte du menu ' paramètres: Position en Y, taille du texte à afficher (hors cadre) et texte à afficher ' Sub menu_t(Y,L,T$) Y=Y-1 Dim_Local compt 2D_Image_Paste N_Spr_Laby%+3, 0.5*Taille_Tuile+5,Y*Taille_Tuile+5 2D_Image_Paste N_Spr_Laby%+3, (L+1)*Taille_Tuile+5,Y*Taille_Tuile+5 If T$<>"" T$=Upper$(Left$(T$+String$(L," "),L)) For compt=1.5 to Len(T$)+1.5 If Asc(Mid$(T$,(compt-0.5),1)) >= 65 and Asc(Mid$(T$,(compt-0.5),1)) < 90 2D_Image_Paste N_Spr_A%+Asc(Mid$(T$,(compt-0.5),1))-65, compt*Taille_Tuile+5,Y*Taille_Tuile+5 End_If Next compt End_if End_sub
' Procédure permettant de créer les deux lignes de séparations ' paramètres: Position en Y et taille du texte à afficher (hors cadre) ' sub menu_m(Y,L) Y=Y-1 Dim_Local compt 2D_Image_Paste N_Spr_Laby%+7, 0.5*Taille_Tuile+5,Y*Taille_Tuile+5 2D_Image_Paste N_Spr_Laby%+9, 0.5*Taille_Tuile+5,(Y+1)*Taille_Tuile+5 For compt=1.5 to (L-0.5) 2D_Image_Paste N_Spr_Laby%+14, compt*Taille_Tuile+5,Y*Taille_Tuile+5 2D_Image_Paste N_Spr_Laby%+20, compt*Taille_Tuile+5,(Y+1)*Taille_Tuile+5 Next compt 2D_Image_Paste N_Spr_Laby%+6, (L+0.5)*Taille_Tuile+5,Y*Taille_Tuile+5 2D_Image_Paste N_Spr_Laby%+8, (L+0.5)*Taille_Tuile+5,(Y+1)*Taille_Tuile+5 End_sub
' Procédure permettant de créer la ligne du bas du menu ' paramètres: Position en Y et taille du texte à afficher (hors cadre) ' sub menu_b(Y,L) Y=Y-1 Dim_Local compt 2D_Image_Paste N_Spr_Laby%+5, 0.5*Taille_Tuile+5,Y*Taille_Tuile+5 For compt=1.5 to (L-0.5) 2D_Image_Paste N_Spr_Laby%+12, compt*Taille_Tuile+5,Y*Taille_Tuile+5 Next compt 2D_Image_Paste N_Spr_Laby%+4, (L+0.5)*Taille_Tuile+5,Y*Taille_Tuile+5 End_sub ' ---------------------------------------------------------------------------------
Source 7 : Gestion_Pacman.bas - Gestion_Pacman.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' ' Procedures permettant de gérer le comportement de Pacman ' ' Partie 7 du porgramme Pacman - Ne pas utiliser seul, ce programme est inclus dans ' le programme par le fichier source proncipal: Pacman_Source_N8.bas ' ' Créer par Jicehel le 13/04/2014 (Nb lignes : 119) ' ' --------------------------------------------------------------------------------- '
sub Init_PacMan(I_X,I_Y) Pac_X = I_X : Pac_Y = I_Y : Pac_dir$ = "" Pac_Affiche% = Pac_Man_F Sprite_Position Pac_Affiche%, Pac_X*Taille_Tuile,Pac_Y*Taille_Tuile Sprite_show Pac_affiche% end_sub
sub PacMan(X,Y) if Pac_Affiche% > 0 Sprite_hide Pac_Affiche% If Pacgommes(X,Y) > 0 if Tuiles(X,Y) = 44 then Score% = Score% + 10 : ' Si on mange une pacgomme, on modifie le score if Tuiles(X,Y) = 46 Score% = Score% + 50 : ' Si on mange une superpacgomme on modifier le score Fantomes_Panique() : ' On changera les états des fantômes pour qu'ils passent de chasseurs à chassés end_if Caption Aff_score%,Right$("00000000"+Trim$(Str$(Score%)),8) : ' On affiche le score Sprite_Hide Pacgommes(X,Y) : Pacgommes(X,Y) = 0 : ' On masque la pacgomme et on enregistre dans le tableau qu'elle a été mangée Nb_Pacgommes% = Nb_Pacgommes% - 1 : ' On décrémente le compteur de pacgomme restant à manger End_if
If Pac_dir$="Gauche" If Pac_Affiche% <> Pac_Man_G(0) Pac_Affiche% = Pac_Man_G(0) Else Pac_Affiche% = Pac_Man_G(1) End_if End_if
If Pac_dir$="Droite" If Pac_Affiche% <> Pac_Man_D(0) Pac_Affiche% = Pac_Man_D(0) Else Pac_Affiche% = Pac_Man_D(1) End_if End_if
If Pac_dir$="Haut" If Pac_Affiche% <> Pac_Man_H(0) Pac_Affiche% = Pac_Man_H(0) Else Pac_Affiche% = Pac_Man_H(1) End_if End_if
If Pac_dir$="Bas" If Pac_Affiche% <> Pac_Man_B(0) Pac_Affiche% = Pac_Man_B(0) Else Pac_Affiche% = Pac_Man_B(1) End_if End_if
Pac_X = X : Pac_Y = Y Sprite_Position Pac_Affiche%, Pac_X*Taille_Tuile,Pac_Y*Taille_Tuile Sprite_show Pac_affiche% Test_collision(5) End_if end_sub
sub Deplace_Pacman() if Pac_dir$="Gauche" if Pac_X <= 0 PacMan(Nb_C,Pac_Y) else if Tuiles(Pac_X-1,Pac_Y) >= 44 then PacMan(Pac_X-1,Pac_Y) end_if end_if
if Pac_dir$="Droite" if Pac_X >= Nb_C PacMan(0,Pac_Y) else if Tuiles(Pac_X+1,Pac_Y) >= 44 then PacMan(Pac_X+1,Pac_Y) end_if end_if
if Pac_dir$="Haut" if Pac_Y <= 0 PacMan (Pac_X,Nb_L) else if Tuiles(Pac_X,Pac_Y-1) >= 44 then PacMan(Pac_X,Pac_Y-1) end_if end_if
if Pac_dir$="Bas" if Pac_Y >= Nb_L PacMan(Pac_X,0) else if Tuiles(Pac_X,Pac_Y+1) >= 44 then PacMan(Pac_X,Pac_Y+1) end_if end_if end_sub
Sub MangePacman() Dim_local cpt% Vie%=Vie%-1 : Caption Aff_vie%,Right$("000"+ str$(Vie%),3) If Vie%<=0 then goto fin For cpt% = 0 to 3 : Sprite_Hide Fantome_Affiche%(cpt%) : Next cpt% Sprite_Hide Pac_affiche% Init_PacMan(14,17) : Init_Fantomes() End_sub
Source 8 : Gestion_Fantomes.bas - Gestion_Fantomes.bas:
- Code:
-
' --------------------------------------------------------------------------------- ' ' Procedures permettant de gérer le comportement des fantômes ' ' Partie 8 du porgramme Pacman - Ne pas utiliser seul, ce programme est inclus dans ' le programme par le fichier source proncipal: Pacman_Source_N8.bas ' ' Créer par Jicehel le 13/04/2014 (Nb lignes : 316) ' ' --------------------------------------------------------------------------------- '
' ******* Initialisation de la position des fantômes au début du niveau *******
Sub Init_fantomes() ' Initialiser le fantome rouge, colonne 12, il regarde à gauche Fantome_Etat$(0)="Attente" : Init_fantome(0,12,L_Prison,"Gauche") ' Initialiser le fantome rose, colonne 13, il regarde à gauche Fantome_Etat$(1)="Attente" : Init_fantome(1,13,L_Prison,"Gauche") ' Initialiser le fantome bleu, colonne 14, il regarde à droite Fantome_Etat$(2)="Attente" : Init_fantome(3,14,L_Prison,"Droite") ' Initialiser le fantome orange,colonne 15, il regarde à droite Fantome_Etat$(3)="Attente" : Init_fantome(2,15,L_Prison,"Droite") End_sub ' --------------------------------------------------------------------------------------------
' ******* Init. d'un fantôme donné à une position X,Y dans une direction initiale *******
Sub Init_fantome(N,I_X,I_Y, dir$) ' On rentre les valeurs d'initialisation dans les tableaux des fantomes (X,Y et direction) Fantome_X(N) = I_X : Fantome_Y(N) = I_Y : Fantome_dir$(N)=dir$ ' On se sert de l'état du fantome pour gérer le délai d'attente avant la sortie de la prison Fantome_Timer%(N)=int(N+1)*Attente ' En fonctiion de la direction dans laquelle regarde le fantome, afficher le sprite du fantome correspondant If dir$="Gauche" then Fantome_Affiche%(N)=Fantome_G(N,0) If dir$="Droite" then Fantome_Affiche%(N)=Fantome_D(N,0) End_sub ' --------------------------------------------------------------------------------------------
' ******* Affiche le sprite d'un fantôme en fonction de l'animation correspondant à son état *******
Sub Fantome(X,Y,N)
Dim_local Ancien_num%,ind_yeux%
' On mémorise le numéro du sprite affiché actuel pour le masquer plus tard Ancien_num% = Fantome_Affiche%(N) if Fantome_Etat$(N)="Yeux" ind_yeux% = 4 else ind_yeux% = 0 end_if
' Calcule le nouveau sprite à afficher If Fantome_Affiche%(N) > 0 ' Afficher le sprite suivant de l'animation si le fantôme est en état "Normal" If Fantome_Etat$(N)="Normal" or Fantome_Etat$(N)="Yeux" or Fantome_Etat$(N) = "Attente" If Fantome_dir$(N)="Gauche" If Fantome_Affiche%(N) <> Fantome_G(N+ind_yeux%,0) Fantome_Affiche%(N) = Fantome_G(N+ind_yeux%,0) Else Fantome_Affiche%(N) = Fantome_G(N+ind_yeux%,1) End_if End_if
If Fantome_dir$(N)="Bas" If Fantome_Affiche%(N) <> Fantome_B(N+ind_yeux%,0) Fantome_Affiche%(N) = Fantome_B(N+ind_yeux%,0) Else Fantome_Affiche%(N) = Fantome_B(N+ind_yeux%,1) End_if End_if
If Fantome_dir$(N)="Droite" If Fantome_Affiche%(N) <> Fantome_D(N+ind_yeux%,0) Fantome_Affiche%(N) = Fantome_D(N+ind_yeux%,0) Else Fantome_Affiche%(N) = Fantome_D(N+ind_yeux%,1) End_if End_if
If Fantome_dir$(N)="Haut" If Fantome_Affiche%(N) <> Fantome_H(N+ind_yeux%,0) Fantome_Affiche%(N) = Fantome_H(N+ind_yeux%,0) Else Fantome_Affiche%(N) = Fantome_H(N+ind_yeux%,1) End_if End_if End_if ' Calcul du sprite suivant si le fantome est en mode "Panique" If Fantome_Etat$(N)="Panique" If Fantome_Affiche%(N) = Fantome_Panique(0+N*2,0) If Fantome_Timer%(N) <= Alerte_Fin_Panique% Fantome_Affiche%(N) = Fantome_Panique(1+N*2,0) Else Fantome_Affiche%(N) = Fantome_Panique(0+N*2,1) End_if Else If Fantome_Affiche%(N) = Fantome_Panique(0+N*2,1) If Fantome_Timer%(N) <= Alerte_Fin_Panique% Fantome_Affiche%(N) = Fantome_Panique(1+N*2,1) Else Fantome_Affiche%(N) = Fantome_Panique(0+N*2,0) End_if Else If Fantome_Affiche%(N) = Fantome_Panique(1+N*2,0) Fantome_Affiche%(N) = Fantome_Panique(0+N*2,1) Else Fantome_Affiche%(N) = Fantome_Panique(0+N*2,0) End_if End_if End_if End_if ' On modifie les coordonnées du fantome avec les informations reçues en parametre Fantome_X(N) = X : Fantome_Y(N) = Y ' Positionner le nouveau sprite à afficher au coordonnées que l'on vient de mémoriser Sprite_Position Fantome_Affiche%(N), Fantome_X(N)*Taille_Tuile,Fantome_Y(N)*Taille_Tuile
' Cacher l'ancien sprite et afficher le nouveau Sprite_hide ancien_num% : Sprite_show Fantome_Affiche%(N)
' Tester s'il y a collision entre le fantôme et Pacman Test_collision(N) end_if
End_sub ' --------------------------------------------------------------------------------------------
' ******* Procédure permettant de déterminer si un fantome doit changer de direction dans son prochain déplacement *******
Sub Test_changement(N%) dim_local compttemp%, Choix%,directions$(3),Compt_dir% Compt_dir% = 0 : choix% = 0 if Fantome_dir$(N%) = "Haut" and Tuiles(Fantome_X(N%),Fantome_Y(N%)-1) < 44 then choix%=1 if Fantome_dir$(N%) = "Bas" and Tuiles(Fantome_X(N%),Fantome_Y(N%)+1) < 44 then choix%=1 if Fantome_dir$(N%) = "Gauche" and Tuiles(Fantome_X(N%)-1,Fantome_Y(N%)) < 44 then choix%=1 if Fantome_dir$(N%) = "Droite" and Tuiles(Fantome_X(N%)+1,Fantome_Y(N%)) < 44 then choix%=1
' Tirage aléatoire d'un changement de direction compttemp% = rnd(3) ' Si on ne peut plus avancer ou si le tirage aléatoire l'a décidé, on change de direction if compttemp%=0 or choix%=1 ' On teste les déplacements possibles et on les stocke dans le tableau direction$ if Tuiles(Fantome_X(N%),Fantome_Y(N%)-1) >= 44 then directions$(Compt_dir%) = "Haut" : Compt_dir% = Compt_dir%+1 if Tuiles(Fantome_X(N%),Fantome_Y(N%)+1) >= 44 if (Fantome_Y(N%) = (L_Prison - 2) and Fantome_X(N%) = 14) ' On ne retourne pas dans la prison !! else directions$(Compt_dir%) = "Bas" : Compt_dir% = Compt_dir%+1 end_if end_if if Tuiles(Fantome_X(N%)-1,Fantome_Y(N%)) >= 44 then directions$(Compt_dir%) = "Gauche" : Compt_dir% = Compt_dir%+1 if Tuiles(Fantome_X(N%)+1,Fantome_Y(N%)) >= 44 then directions$(Compt_dir%) = "Droite" : Compt_dir% = Compt_dir%+1
' On tire une direction au hazard parmi les directions possibles compttemp% = int(rnd(Compt_dir%)) : Fantome_dir$(N%)= directions$(compttemp%) end_if ' On met à jour les coordonnées du fantome selon la direction choisie if Fantome_dir$(N%) = "Haut" then Fantome(Fantome_X(N%),Fantome_Y(N%)-1,N%) if Fantome_dir$(N%) = "Bas" then Fantome(Fantome_X(N%),Fantome_Y(N%)+1,N%) if Fantome_dir$(N%) = "Gauche" then Fantome(Fantome_X(N%)-1,Fantome_Y(N%),N%) if Fantome_dir$(N%) = "Droite" then Fantome(Fantome_X(N%)+1,Fantome_Y(N%),N%) End_sub ' --------------------------------------------------------------------------------------------
' ******* Calcule la prochaine position du fantôme *******
Sub Deplace_Fantomes(i%) dim_local tmp%, dir$ if Fantome_Etat$(i%)="Normal" or Fantome_Etat$(i%)="Panique" depl_fantome_normal(i%) else if Fantome_Etat$(i%)="Sort" Fantome(Fantome_X(i%),Fantome_Y(i%)-1,i%) if Fantome_Y(i%) = (L_Prison - 2) then Fantome_Etat$(i%) = "Normal" : ' A-t-on fini de sortir de la prison, si oui passer en mode "Normal" else if Fantome_Etat$(i%)="Yeux" dir$ = Retour$(Fantome_X(i%),Fantome_Y(i%)) if dir$="G" then Fantome_dir$(i%)="Gauche" : Fantome(Fantome_X(i%)-1,Fantome_Y(i%),i%) if dir$="D" then Fantome_dir$(i%)="Droite" : Fantome(Fantome_X(i%)+1,Fantome_Y(i%),i%) if dir$="B" then Fantome_dir$(i%)="Bas" : Fantome(Fantome_X(i%),Fantome_Y(i%)+1,i%) if dir$="H" then Fantome_dir$(i%)="Haut" : Fantome(Fantome_X(i%),Fantome_Y(i%)-1,i%) ' if dir$="S" then Fantome_dir$(i%)="Gauche" : Hide Fantome_Affiche%(i%) : Fantome_Affiche%(i%)=Fantome_G(i%,0) : Fantome_Etat$(i%)="Attente" : Fantome_Timer%(i%)=Tps_Panique * 2 if dir$="S" then Fantome_dir$(i%)="Gauche" : Fantome_Etat$(i%)="Attente" : Fantome_Timer%(i%)=Tps_Panique * 2
else if Fantome_Etat$(i%)="Attente" and Fantome_Timer%(i%) > 0 if Fantome_dir$(i%)="Gauche" if Tuiles(Fantome_X(i%)-2,Fantome_Y(i%))=02 : ' Si le fantôme va à gauche et qu'il rencontre un mur, il se retourne vers la droite Fantome_dir$(i%)="Droite" : Fantome(Fantome_X(i%)+1,Fantome_Y(i%),i%) else Fantome(Fantome_X(i%)-1,Fantome_Y(i%),i%): ' Sinon il continue à gauche end_if else if Tuiles(Fantome_X(i%)+1,Fantome_Y(i%))=03 : ' Si le fantôme va à droite et qu'il rencontre un mur, il se retourne vers la gauche Fantome_dir$(i%)="Gauche" : Fantome(Fantome_X(i%)-1,Fantome_Y(i%),i%) else Fantome(Fantome_X(i%)+1,Fantome_Y(i%),i%) : ' Sinon il continue à droite end_if end_if else if Fantome_X(i%) <> 14 : ' Si on a atteind la fin de l'attente, si on est pas sous la sortie, on continue if Fantome_dir$(i%)="Gauche" if Tuiles(Fantome_X(i%)-2,Fantome_Y(i%))=02 Fantome_dir$(i%)="Droite" : Fantome(Fantome_X(i%)+1,Fantome_Y(i%),i%) else Fantome(Fantome_X(i%)-1,Fantome_Y(i%),i%) end_if else if Tuiles(Fantome_X(i%)+1,Fantome_Y(i%))=03 Fantome_dir$(i%)="Gauche" : Fantome(Fantome_X(i%)-1,Fantome_Y(i%),i%) else Fantome(Fantome_X(i%)+1,Fantome_Y(i%),i%) end_if end_if else : ' Sinon on sort Fantome_Etat$(i%)="Sort" end_if end_if end_if end_if end_if end_sub ' --------------------------------------------------------------------------------------------
' ******* Sous procédure de calcul du déplacement du fantome pour l'état normal ou panique ******* ' Cette procédure est juste séparée pour améliorer la lisibilité de la procédure précédente... ' On pourrait faire pareil pour chacun des états
sub depl_fantome_normal(NumFantome%)
if Fantome_dir$(NumFantome%)="Haut" if Fantome_Y(NumFantome%) <= 0 Fantome(Fantome_X(NumFantome%),Nb_L-1,NumFantome%) else if Fantome_Etat$(NumFantome%)= "Normal" or Fantome_Etat$(NumFantome%)="Panique" then Test_changement(NumFantome%) end_if end_if
if Fantome_dir$(NumFantome%)="Bas" if Fantome_Y(NumFantome%) >= NB_L Fantome(Fantome_X(NumFantome%),1,NumFantome%) else Test_changement(NumFantome%) end_if end_if
if Fantome_dir$(NumFantome%)="Gauche" if Fantome_X(NumFantome%) <= 0 Fantome(NB_C-1,Fantome_Y(NumFantome%),NumFantome%) else Test_changement(NumFantome%) end_if end_if
if Fantome_dir$(NumFantome%)="Droite" if Fantome_X(NumFantome%) >= Nb_C Fantome(1,Fantome_Y(NumFantome%),NumFantome%) else Test_changement(NumFantome%) end_if end_if end_sub
' --------------------------------------------------------------------------------------------
' ******* Procédure permettant de basculer les fantômes en mode Panique ******* ' Typiquement, Pacman vient de manger une super Pacgomme => Les fantômes peuvent être mangés ' Quand nous gérerons les comportements des fantômes, ils fuiront pacman dans cet état
sub Fantomes_Panique() dim_local tmp% For tmp%=0 to 3 If Fantome_Etat$(tmp%)="Yeux" or Fantome_Etat$(tmp%)="Attente" ' On peut faire quelque chose si l'on veut mais pour le moment, je ne fais rien dans ce cas ... Else Fantome_Etat$(tmp%)="Panique" If Fantome_Timer%(tmp%) < Tps_Panique then Fantome_Timer%(tmp%)=Tps_Panique * 5 End_if Next tmp% end_sub ' --------------------------------------------------------------------------------------------
' ******* Procédure permettant de basculer un fantôme en une paire d'yeux ******* ' Le fantôme vient de se faire manger, on change sont état en "Yeux" ' Il va retourner dans sa prison comme un grand en suivant les indications que l'on a programmé ' pour chaque case. Il pourrait aussi calculer tout seul son itinéraire de retour. ' s'il y a un volontaire pour le coder, je l'ajouterais. Pour le moment, ce système me convient ' même s'il alourdit la création des niveaux, comme pour le moment, il n'y en a qu'un...
sub MangeFantome(N%) if bonus_fantome% < 4 then bonus_fantome% = bonus_fantome% * 2 Score% = Score% + 100*bonus_fantome% Fantome_Etat$(N%)="Yeux" end_sub ' --------------------------------------------------------------------------------------------
Bien voilà, je n'aurais plus qu'à ajouter les commentaires et explications dans l'article correspondant Etape suivante: Le bruitage quand on mange une pacgomme, une superpacgomme ou un fantôme Animation et bruitage quand Pacman se fait manger Gestion de la fin de jeu (demandera si l'on veut rejouer ou quitter) et demandera les initiales pour stocker les high scores. Après, on verra peut être que je ferrais l'éditeur de niveau puisqu'il faudra que j'en créais d'autre bientôt pour la gestion. Après il restera à coder l'intelligence et le comportement des fantômes, le menu de départ et peut être un écran de fin, etc ... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 3:40 | |
| Bravo Jicehel Beau traval. J’ai voulu tester un peu : je me suis heurté à ligne 17 de CreerSprites.bas« Impossible to load … » - Code:
-
File_load I_travail%,"gfx_12px.bmp" Mais ce n’est pas grave. A+ Avec tous mes encouragements ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 8:14 | |
| Le fichier bmp est le même que celui de l'article n°2, mais de toute façon, je ferais un zip sur mon webdav d'ici ce midi. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 12:48 | |
| Voilà, j'ai déposé les sources de Pacman sur mon Webdav.
J'en ai profité pour implémenter rapidos le son dans le jeu comme ce n'était pas bien compliqué et j'ai corrigé un petit bug qui faisait que dans certains cas, le changement d'état bloquaient les fantômes dans la prison.
Je vous laisse tester et me dire si vous voyez des bugs.
Le jeu n'ait pas fini, mais il est jouable pour le premier niveau. On peut le vider, se faire manger (vous avez 4 vies et le jeu est réglé pour être assez facile pour le moment, donc, il faut un peu faire exprès si on n'a plus de vie pour finir le niveau).
Il reste plein de choses à faire pour le prochain article, faire un fichier externe qui contient les données des niveaux, gérer les personnalités des fantômes qui jouent sur leur mode de déplacement, gérer les fruits comme dans le jeu original, gérer les gain de vies bonus, jouer sur la difficulté en progressant, gérer les highscores, faire un menu de démarrage et un écran de fin, faire un éditeur de niveau pour se faciliter la vie...
Bon tests | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 13:19 | |
| Bravo Jicehel ! Je viens de tester, ca fonctionne parfaitement. Belle réalisation ! Dommage qu'il n'y est que le premier tableau Par contre est ce normal que ça saccade durant les déplacements ? Remarque : on pourra toujours le compiler pour gagner en fluidité... Encore Bravo !!! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 14:14 | |
| Ca ne devrait pas saccader. Il y a peut être quelques optimisations à faire dans le programme. Il y a un autre petit bug visuel, les pacgommes s'affichent au dessus des fantômes, ça ne se voit pas beaucoup, mais ça se voit. Pour le moment, je ne pense pas qu'il y ait une solution simple avec Panoramic pour pouvoir le corriger, mais j'oublie peut être quelque chose.
Comme il reste pas mal de choses à implémenter dedans, il y aura sans doute encore au moins 3 articles: Un sur le déplacement des monstres en mode normal (ce ne sera plus simplement aléatoire) et en mode panique (les fantômes essayeront de fuir) Un autre sur l'éditeur et avec le système de changement de niveau et quelques niveaux pour tester. Un dernier sur le menu, la page de fin, la gestion des high score.
J'inclurais sans doutes les autres petits trucs à l'occasion de ces articles car ils sont moins intéressant (la gestion des fruits, des vies bonus, des options (par exemple, il faut que je vois si je peux jouer un musique de fond pendant le jeu tout en le gardant jouable)...
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 17:46 | |
| Klaus, comme j'ai vu que tu étais là, je me permet de te poser une question. Avec ta DLL, je peux lancer une musique en tache de fond sans perturber ou ralentir le jeu ? Si oui, est-ce que je peux en régler le volume indépendamment de celui des effets sonores du jeu (donc sans baisser ou monter le volume général ?) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 18:34 | |
| Pour jouer un son, regarde mes fonctions dans la catégorie "Gestion du Windows Media Player".
Et oui, le son sera joué pendant que les autres actions du programme se déroulent (fonctionnement asynchrone).
Et oui, tu peux régler le volume du player indépendemment du volume général.
Tu voudras peut-être cacher le player pendant l'exécution - tu crées une form indépendante ou un panel dans lequel tu injectes le player, puis tu fais HIDE sur cet objet, et voilà. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 19:45 | |
| Avec Klaus, l'impossible est IMPOSSIBLE ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Mar 22 Avr 2014 - 22:22 | |
| Excellent, je pense que j'opterais pour cette solution si le joueur décide d'avoir de la musique pendant le jeu. Si tu peux me faire la procédure Klaus (si tu en as le temps), je serais preneur, sinon je chercherais comment exploiter tout ça en lisant la doc comme tout le monde | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pacman pour le prochain article Mer 23 Avr 2014 - 0:37 | |
| Voici quelques subs pour gérer le player dans un panel invisible: - Code:
-
' === créer l'objet player sub creer_player(no%) dim_local res% ' créer le panel contenant le player panel no% : hide no% ' ici, les dimensions dans CreatePlayer n'ont pas d'importance ! res% = dll_call5("CreatePlayer",handle(no%),0,0,100,100) end_sub
' === charger un son dans le player (ne joue pas le son !) sub load_player(nom$) dim_local res% res% = dll_call1("LoadFileIntoPlayer",adr(nom$)) end_sub
' === jouer le son avec le volume indiqué (0=muet 100=max) sub play_player(vol%) dim_local res% res% = dll_call0(PlayPlayer") res% = dll_call1("VolumePlayer",vol%) end_sub
' === changer le volume du player sub volume_player(vol%) dim_local res% res% = dll_call1("VolumePlayer",vol%) end_sub
' === couper/réactiver le son du player (sans changer le volume) sub mute_player(mode%) dim_local res% ' 0 = muet 1 = son audible res% = dll_call1("MutePlayer",mode%) end_sub
' === mettre le player en pause (relancer par play_player) sub pause_player() dim_local res% res% = dll_call0("PausePlayer") end_sub
' === supprimer le player sub delete_player(no%) dim_local res% res% = dll_call0("DeletePlayer") pause 300 delete no% end_sub | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Mer 23 Avr 2014 - 7:55 | |
| Génial, ça va me faire gagner du temps en recherche et réglages Merci beaucoup Klaus pour nous avoir fait ces fonctions et pour ton aide. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Pacman pour le prochain article Mer 23 Avr 2014 - 16:28 | |
| Joli, on se croirait revenu aux années 80 ! Avec le son, et tout ! Tu saurais aussi faire un truc en panoramic servant à y retourner pour de bon ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Mer 23 Avr 2014 - 18:40 | |
| Si seulement je le pouvais... ce serait avec plaisir. En tout cas, rien que pour le Pacman, il reste beaucoup à faire. Déjà, avec la DLL de Klaus, je vais pouvoir ajouter l'option musique assez facilement. Même s'il faudra attendre les menus pour pouvoir paramétrer avec ou sans musique, le volume sonore et éventuellement la bande son (MP3) pendant le jeu. Après tout normalement, il n'y avait pas de musique, mais bon on n'est plus dans les année 80 alors si on veut écouter du Mozart en jouant à Pacman, pourquoi s'en priver | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Ven 25 Avr 2014 - 0:41 | |
| Merci Klaus, avec tes procédures, ajouter la musique a été un jeu d'enfant et ce sera intégré dans le prochain article. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pacman pour le prochain article Ven 25 Avr 2014 - 0:48 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Pacman pour le prochain article Ven 25 Avr 2014 - 0:57 | |
| - Jicehel a écrit:
- Merci Klaus, avec tes procédures, ajouter la musique a été un jeu d'enfant et ce sera intégré dans le prochain article.
Un jeu d'enfant ?! Et moi qui pensait que c'est un jeu pour ... bon , pour des enfants adultes, voila! Concernant la musique, je te propose ce lien. C'est marrant | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pacman pour le prochain article Jeu 8 Mai 2014 - 22:28 | |
| Est ce que quelqu'un pourrait me proposer une procédure pacman_visible(x,y) qui retourne une valeur 1 si pacman est visible depuis le point x,y ou 0 s'il ne l'est pas ? Il doit y avoir une méthode simple pour le faire mais je n'ai pas de bonne idée la dessus. J'ai cherché un peu sur le net mais ma petite tête se bloque un peu sur le sujet ... C'est pourtant certainement assez simple car le pacman original le faisait en assembleur en quelques lignes ... Si besoin on peut mettre un rayon de visibilité de quelques cases genre un rayon de 6 cases autour de x,y. Si quelqu'un veut chercher un peu et proposer une idée, ça m'arrangerait... Ca peut servir à plein de choses, un pacman, un jeu de rôle, un wargame avec obstacles, ... | |
| | | Contenu sponsorisé
| Sujet: Re: Pacman pour le prochain article | |
| |
| | | | Pacman pour le prochain article | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |