Implementacion De PacMan En C++ Usando Estructuras De Datos

Imprimir

En esta ocacion les voy a compartir el código de un juego muy popular "PacMan", este juego esta implementado en C++, usando la librería Allegro 4.2.2 en el Editor CodeBlocks. Antes de todo voy a aclarar algunos puntos para no tener problemas respecto al codigo.
El código Básico No Es Mio:
Si bien es cierto el codigo que voy a compartir es interesante y  parte fue modificado por mi, para poder exponer sobre la utilización de Estructuras de Datos como las pilas en Los Videojuegos.  El código original lo obtuve de este video el cual recomiendo mucho si se van a iniciar en los videojuegos sabiendo solo el lenguaje C++, el link lo pueden encontrar aqui y le pertenece al canal de Deividcoptero Chann, aqui en este canal van a encontrar muchos tutoriales de como implementar juegos en C++, y es bueno que lo vean para que aprendan mucho sobre la logica de ls juegos.
 
Habiendo aclarado esto seguimos con el post.
 
Requerimientos necesarios para poder Ejecutar el programa:
 
Es nesesario tener configuradas algunas cosas antes de ejecutar el  videojuego por que sino les saldra error.
 
 Si bien la librería Allegro fue hecha para Dev C++, se puede usar en todos los IDE que usan C++,  en lo particular uso CodeBlocks y no tengo ningun problema al ejecutar el videojuego, si usas Dev C++ no te preocupes puedes descargar CodeBlocks y usar los dos sin problemas.
 
1.- Para instalar codeblocks Deividcoptero Chann hizo un video sobre como configurarlo, y esta muy bien explicado asi que aqui les comparto, solo hay que aclarar una cosa, el hizo el video cuando el editor estaba en la version 8, asi que nosotros usaremos la version mas reciente y no tendremos ningun problema, el link aqui, descargar el que dice codeblocks-13.12mingw-setup.exe  , luego de descargar e instalar sigan con el video tutorial de como configurar allegro y codeblocks.
 
2.- Habiendo configurado el CodeBlocks solo es nesesario descargar el archivo y abrir el main.cpp, si configuraron todo bien al ejecutar se ejecutara el juego sin problemas.


 

Puedes descargar el .rar 
aqui  

 

Un poco de la lógica del Juego y el uso de la pila en el juego.

 

PacMan inicia con 3 vidas, si desean pueden modificar las vidas solo cambiando el valor de la variable int vidas=3.

 

Si desean agregar mas monedas al mapa solo tiene que ir al arreglo char mapa[MAXFILAS][MAXCOLS]; y en los espacios en blanco que vean, agregar la letra "O" mayuscula, siempre respetando el diseño y tamaño del mapa, OJO que los tres ultimos espacios en blanco del arreglo son usados para graficar la pila, asi que no moverlos.
 

Si desean agregar mas diamantes pueden agregar al arreglo la letra L para diamantes Azules y la letra M para diamantes Rojos.

 

Pueden modificar el mapa cambiando las X de posición, pero siempre respetando las dimensiones del arreglo, lo único que no pueden modificar es la puerta donde el pacman se traslada de un lado a otro, eso no lo muevan.

 

Respecto a la Pila:


Apila con la función push() el caracter L o M cuando el pacman come un diamante, y  desapila con pop(), cuando pacman pierde una vida.

La función mostrar_pila(), se encarga de dibujar los diamantes apilados en pantalla.

La función destruir_pila(), se encarga de destruir todos los nodos y calcular el bonus de acuerdo al valor L o M, si es L o diamante azul suma al bonus 100, y si es M o diamante rojo, suma 200.

 

Bueno eso es todo lo respecto al juego, espero les agrade y no se olviden de darle like a mi pagina de facebook. Gracias.


Nota: si deseas entender gran parte del juego puedes mirar todos los videos empezando por este  aqui.

Fuente: Deividcoptero Chann 

 

Aqui les dejo el codigo hecho en c++ si solo deseas verlo, pero si deseas todo el proyecto descargate el .rar que comparti arriba.

 

Data hosted with ♥ by Pastebin.com -  - See Original
  1. /*
  2.     Autores: Saldaña Ramos, Edinson
  3.              Fernandez Segura, Joel
  4.     Tema: Implementacion de un Juego usando Estructuras de Datos
  5.     Curso: Estructura de Datos
  6.     Blog: http://codebotic.blogspot.com
  7.     Fuente: Devidcoptero Chann canal de Youtube
  8.  
  9. */
  10. #include <allegro.h>
  11. #include<allegro/alcompat.h>
  12. #include <cstdlib>
  13. #include<iostream>
  14. #include<sstream>
  15.  
  16. #define MAXFILAS 20 // eje y
  17. #define MAXCOLS 33  //eje x
  18.  
  19. using std::cout;
  20. using std::endl;
  21.  
  22. struct nodo {
  23.     char item;
  24.     struct nodo *sgte;
  25. };
  26.  
  27. typedef nodo *Puntero;
  28.  
  29. Puntero p=NULL;//puntero de pila
  30.  
  31. int puntaje=0;
  32. int bonusRojo=0;
  33. int bonusAzul=0;
  34. int anteriorpx, anteriorpy;
  35. int px=30*14, py=30*17;
  36. int dir=4;//indica la direccion
  37. int vidas=3;
  38. int s=0; //contador para la pila
  39. int d=570;
  40. char w;
  41. /*   Declaracion de BITMAP */
  42. BITMAP *buffer;
  43. BITMAP *roca;
  44. BITMAP *pacbmp;
  45. BITMAP *pacman;
  46. BITMAP *comida;
  47. BITMAP *muertebmp;
  48. BITMAP *diamante1;
  49. BITMAP *diamante2;
  50. BITMAP *fondo1;
  51. BITMAP *fondo2;
  52. BITMAP *fondo3;
  53. BITMAP *cursor;
  54. BITMAP *win;
  55. BITMAP *loser;
  56. /* ---- declaracion del audio ----*/
  57. MIDI *musica1;
  58.  
  59.  
  60. /*----Funcion Apilar valor----*/
  61. void push( char valor )
  62. {
  63.      Puntero aux;
  64.      aux = new(struct nodo);
  65.      aux->item = valor;
  66.      cout<<endl<<aux->item;
  67.      aux->sgte = p ;
  68.      p = aux ;
  69. }
  70. /*---Funcion que es llamada cuando pacan pierde una vida  ----*/
  71. int pop(  )
  72. {   char it;
  73.  
  74.      Puntero aux;
  75.      if(p!=NULL){
  76.      aux = p ;
  77.      it = aux->item;
  78.      cout<<endl<<"desapilado:"<<it<<endl;
  79.      p = aux->sgte ;
  80.      delete(aux);
  81.      } else cout<<endl<<"no hay elementos en la pila"<<endl;
  82.  
  83.  
  84. }
  85.  
  86. /*Funcion que muestra el elemento apilado en pantalla*/
  87. void mostrar_pila(  )
  88. {   int t=0;
  89.      Puntero aux;
  90.      aux = p;     // apunta al inicio de la lista
  91.  
  92.      while( aux !=NULL )
  93.      {      if(aux->item=='L')//diamante azul
  94.             draw_sprite(buffer,diamante1,30*30,d-t*30);//resta el tamaño de pantalla-30 para posicionar un diamante
  95.  
  96.             if(aux->item=='M')//diamante Rojo
  97.             draw_sprite(buffer,diamante2,30*30,d-t*30);
  98.  
  99.             aux = aux->sgte;
  100.             t++;
  101.      }
  102. }
  103.  
  104. /*---- Funcion que desapila y destruye la pila -----*/
  105. void destruir_pila( )
  106. {
  107.      Puntero aux;
  108.  
  109.      while( p != NULL)
  110.      {
  111.            aux = p;
  112.            p = aux->sgte;
  113.            if(aux->item=='L')
  114.                 bonusAzul=bonusAzul+100;
  115.            if(aux->item=='M')
  116.                 bonusRojo=bonusRojo+200;
  117.            delete(aux);
  118.  
  119.      }
  120. }
  121.  
  122. /*----- Declaracion del Arreglo del mapa -----*/
  123. char mapa[MAXFILAS][MAXCOLS]={
  124.          "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
  125.          "XOOOO|OOOOO XXXXX OOOOO|OOOMX  ",
  126.          "XOXXX XXXXXLXXXXXOXXXXXOXXXOX  ",
  127.          "XOXXX XXXXX XXXXXOXXXXXOXXXOX  ",
  128.          "XOOLOOOOOO |OOOOOO|OOOOMOOOOX  ",
  129.          "XOXXX XX|XXXXXXXXXX |XX XXXOX  ",
  130.          "XOOOO|XXOOOOOXXX O OOXX|OOOOX  ",
  131.          "XOXXX XXXXXXLXXX XXXXXX XXXOX  ",
  132.          "XLXXX XX OOM OOOO O  XX XXX X  ",
  133.          "OOOOOOXX|XXXXXXXXXXX|XXOOOOOO  ",
  134.          "X XXX XX XXXXXXXXXXXOXX XXX X  ",
  135.          "XOXXX|XXOOOOOOMOOOOOOXX XXX X  ",
  136.          "XOXXX XXXXXX XXX XXXXXX XXX X  ",
  137.          "XOOOO XXOOOOOXXXOOOOOXX OOOOX  ",
  138.          "XMXXXOXXOXXXXXXXXXXX XX XXX X  ",
  139.          "XOXXX  O O |OOOOOO|OOOOOXXXLX  ",
  140.          "XOXXX XXXX0XXXXXXXXOXXXLXXXOX  ",
  141.          "XOXXXOXXXX  O OO O OXXX XXXOX  ",
  142.          "XOOLOO O O XXXXXXXX OOOOOO OX  ",
  143.          "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
  144. };
  145. /*-------------Funcion para Dibujar bloques, monedas, diamantes  ---------*/
  146. void dibujar_mapa()
  147. {
  148.         int row, col;
  149.         for (row = 0 ; row<MAXFILAS ; row++)
  150.         {
  151.                 for (col = 0 ; col<MAXCOLS ; col++)
  152.                 {
  153.                         if(mapa[row][col] == 'X')
  154.                         {
  155.                                 draw_sprite(buffer, roca, col*30, row*30);
  156.                         }
  157.                         else if(mapa[row][col] == 'O')
  158.             {
  159.                 draw_sprite(buffer, comida, col*30, row*30);
  160.                 if(py/30 == row && px/30 == col)/*Si pacman come una moneda, desaparcerla*/
  161.                   {
  162.                       mapa[row][col] = ' ';
  163.                       puntaje=puntaje+10;
  164.  
  165.                   }
  166.             }
  167.             else if(mapa[row][col]=='L')/*  pacman come un diamante azul*/
  168.             {
  169.                 draw_sprite(buffer,diamante1,col*30,row*30);
  170.                 if(py/30 == row && px/30 == col)
  171.                   {
  172.                       mapa[row][col] = ' ';
  173.                       push('L');
  174.  
  175.                     }
  176.             }
  177.  
  178.             if(mapa[row][col]=='M')/*  pacman come un diamante rojo*/
  179.             {
  180.                 draw_sprite(buffer,diamante2,col*30,row*30);
  181.                 if(py/30 == row && px/30 == col)
  182.                   {
  183.                       mapa[row][col] = ' ';
  184.                       push('M');
  185.  
  186.                     }
  187.             }
  188.             char c1[10];
  189.             textout_ex(buffer, font, "Vidas:"88530,  0xfff000-1);
  190.             textout_ex(buffer, font, itoa(vidas,c1,10)89560,  0xfff000-1);//muestra las vidas en pantalla
  191.             mostrar_pila();//dibujar diamantes apilados en pantalla
  192.                 }
  193.         }
  194. }
  195. /*----- Funcion que dibuja todo lo de buffer en pantalla principal -------*/
  196. void pantalla()
  197. {
  198.         blit(buffer, screen, 0000,940600);
  199. }
  200.  
  201. /*------- Muestra en pantalla a pacman -------*/
  202. void dibujar_pacman()
  203. {
  204.     blit(pacbmp,pacman,dir*33,0,0,0,33,33);// imprimir imagen de pacman
  205.     draw_sprite(buffer, pacman, px,py);
  206. }
  207. /*----------Funcion que determina si las monedas se acabaron------*/
  208. bool win_juego(){
  209.     int row, col;
  210.  
  211.         for (row = 0 ; row<MAXFILAS ; row++){
  212.                 for (col = 0 ; col<MAXCOLS ; col++){
  213.                         if(mapa[row][col] == 'O')  return true;
  214.                 }
  215.         }
  216.         return false;
  217. }
  218.  
  219. /*------- Funcion que activa el fin del juego si es que las vidas llegan a cero ------*/
  220. bool lose_juego(){
  221.     if(vidas==0) return true;
  222.     return false;
  223. }
  224.  
  225. /*---------------------Implementacion de la clase fantasma-----------*/
  226. class fantasma
  227. {
  228.     BITMAP *enemigobmp;
  229.     BITMAP *enemigo;
  230.  
  231.     int fdir ;
  232.     int _x, _y;
  233.  
  234. public:
  235.        fantasma(int x, int y); //construcctor de parametros
  236.        void dibujar_fantasma() const;
  237.        void mover_fantasma();
  238.        void choque_pacman();
  239. };
  240. /*---------- Constructor de la clase ------------*/
  241. fantasma::fantasma(int x, int y)
  242. {
  243.     _x = x;
  244.     _y = y;
  245.     fdir = rand()%4;
  246.     enemigobmp = load_bitmap("images/enemigo.bmp",NULL);
  247.     enemigo = create_bitmap(30,30);
  248. }
  249.  
  250.  
  251. void fantasma::dibujar_fantasma()const
  252. {
  253.      blit(enemigobmp,enemigo ,0,0,0,0,30,30);
  254.      draw_sprite(buffer, enemigo, _x,_y);
  255. }
  256.  
  257. /*---------- Funcion que determina si hay colision entre pacman y un fantasma ------------*/
  258. void fantasma::choque_pacman()
  259. {
  260.     if(py== _y && px == _x || _y ==anteriorpy && _x==anteriorpx)
  261.     {
  262.  
  263.         for(int j=0;j<=5;j++)
  264.         {
  265.             clear(pacman);
  266.             clear(buffer);
  267.             dibujar_mapa();
  268.  
  269.             blit(muertebmp, pacman,j*33,0,0,0,33,33);
  270.             draw_sprite(buffer,pacman,px,py);
  271.  
  272.             pantalla();
  273.             rest(80);
  274.  
  275.         }
  276.         vidas--;
  277.         cout<<endl<<"vidas"<<vidas<<endl;
  278.         pop();//desapilar TOS
  279.         px =30*14;
  280.         py =30*17;
  281.         dir =4;
  282.     }
  283. }
  284.  
  285. /*-------------- Funcion para mover un fantasma --------------*/
  286. void fantasma::mover_fantasma()
  287. {
  288.     dibujar_fantasma();
  289.     choque_pacman();
  290.     if(mapa[_y/30][_x/30] == '|'){
  291.         fdir = rand()%4;
  292.         }
  293.     if(fdir == 0)
  294.     {
  295.        if(mapa[_y/30][(_x-30)/30]!= 'X') _x-=30;
  296.             else fdir = rand()%4;
  297.     }
  298.     if(fdir == 1)
  299.     {
  300.        if(mapa[_y/30][(_x+30)/30]!= 'X') _x+=30;
  301.             else fdir = rand()%4;
  302.     }
  303.     if(fdir == 2)
  304.     {
  305.        if(mapa[(_y-30)/30][(_x)/30]!= 'X') _y-=30;
  306.             else fdir = rand()%4;
  307.     }
  308.     if(fdir == 3)
  309.     {
  310.        if(mapa[(_y+30)/30][(_x)/30]!= 'X') _y+=30;
  311.             else fdir = rand()%4;
  312.     if(_x <= -30) _x=870;
  313.             else if(_x >= 870) _x = -30;
  314. }
  315. }
  316.  
  317.  
  318. /*--------------------------Funcion Principal --------------------------*/
  319. int main()
  320. {
  321.     bool fin_menu;
  322.     bool lose;
  323.     bool salir;
  324.     char c1[10],c2[10];
  325.  
  326.         allegro_init();
  327.         install_keyboard();
  328.     install_mouse();
  329.  
  330.         set_color_depth(32);
  331.         set_gfx_mode(GFX_AUTODETECT_WINDOWED, 94060000);
  332.  
  333.     if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0)
  334.         {   allegro_message("Error: inicializando sistema de sonido\n%s\n", allegro_error);
  335.             return 1;
  336.         }
  337.     set_volume(7070); //Control del volumen
  338.  
  339.  
  340.     /*----- Cargamos todos las imagenes a su respectivo BITMAP---*/
  341.         fondo1 = load_bitmap("menu/FONDO1.bmp"NULL);
  342.         fondo2 = load_bitmap("menu/FONDO2.bmp"NULL);
  343.         fondo3 = load_bitmap("menu/FONDO3.bmp"NULL);
  344.         cursor = load_bitmap("menu/cursor.bmp"NULL);
  345.  
  346.     roca = load_bitmap ("images/roca.bmp"NULL);
  347.         pacbmp = load_bitmap("images/pacman.bmp"NULL);
  348.     comida = load_bitmap("images/Comida.bmp"NULL);
  349.     muertebmp= load_bitmap ("images/muerte.bmp"NULL);
  350.     diamante1=load_bitmap("images/diamante1.bmp",NULL);
  351.     diamante2=load_bitmap("images/diamante2.bmp",NULL);
  352.  
  353.     win=load_bitmap("images/WIN.bmp",NULL);
  354.     loser=load_bitmap("images/LOSE.bmp",NULL);
  355.  
  356.     musica1=load_midi("sounds/mario.mid");
  357.  
  358.  
  359.  
  360.     /* ------- Implementacion del Menu -----*/
  361.         buffer =create_bitmap(800,530);
  362.     fin_menu=false;
  363.  
  364.      while(!fin_menu){
  365.         if(mouse_x>211&&mouse_x<553&&mouse_y>319&&mouse_y<374)
  366.         {
  367.             blit(fondo2,buffer,0,0,60,0,800,530);
  368.             if(mouse_b&1){
  369.                 fin_menu=true;
  370.             }
  371.         } else if(mouse_x>311&&mouse_x<404&&mouse_y>418&&mouse_y<465){
  372.                   blit(fondo3,buffer,0,0,60,0,800,530);
  373.                   if(mouse_b&1){
  374.                     fin_menu=true;
  375.                     return 0;
  376.                   }
  377.  
  378.     }else blit(fondo1,buffer,0,0,60,0,800,530);
  379.  
  380.     masked_blit(cursor,buffer,0,0,mouse_x,mouse_y,13,22);
  381.     blit(buffer,screen,0,0,60,0,880,600);
  382.  
  383.     }
  384.     /* ------- Fin de Implementacion del Menu -----*/
  385.  
  386.     clear(buffer);/*  Liberamos los registros cargados*/
  387.     clear(cursor);
  388.     clear(fondo1);
  389.     clear(fondo2);
  390.     clear(fondo3);
  391.  
  392.  
  393.  
  394.  
  395.  
  396.     /*-- creamos los enemigos en distintas posiciones ---*/
  397.     fantasma A(30*2,30*3);
  398.     fantasma B(30*15,30*15);
  399.     fantasma C(30*3,30*3);
  400.     fantasma D(30*18,30*18);
  401.     fantasma E(30*9,30*9);
  402.  
  403.     /*  Implementamos la pantalla del juego  */
  404.     buffer =create_bitmap(940,600);
  405.         pacman = create_bitmap(33,33);
  406.     play_midi(musica1,1);//iniciamos musica de fondo
  407.         while(win_juego()==true&&lose_juego()==false )
  408.         {
  409.         if(key[KEY_ESC]) return 0;
  410.  
  411.         /*---- Funcion para manejar el teclado ----*/
  412.             anteriorpx = px;
  413.             anteriorpy = py;
  414.             if(key[KEY_RIGHT]) dir=1;
  415.             else if(key[KEY_LEFT]) dir=0;
  416.             else if(key[KEY_UP]) dir=2;
  417.             else if(key[KEY_DOWN]) dir=3;
  418.  
  419.             if(dir == 0)
  420.         {
  421.             if(mapa[py/30][(px-30)/30]!='X')
  422.                 px -= 30;
  423.             else dir = 4;
  424.         }
  425.             if(dir == 1)
  426.             {
  427.             if(mapa[py/30][(px+30)/30]!='X')
  428.                px += 30;
  429.             else dir = 4;
  430.             }
  431.             if(dir == 2)
  432.             {
  433.             if(mapa[(py-30)/30][(px)/30]!='X')
  434.                py -= 30;
  435.             else dir = 4;
  436.             }
  437.             if(dir == 3)
  438.             {
  439.             if(mapa[(py+30)/30][(px)/30]!='X')
  440.                py += 30;
  441.             else dir = 4;
  442.             }
  443.             if(px <= -30) px = 870;
  444.              else if (px>=870) px = -30;
  445.  
  446.         /*---- Fin de Funcion para manejar el teclado ----*/
  447.  
  448.             clear(buffer);//limpiamos pantalla
  449.  
  450.                 dibujar_mapa();
  451.                 dibujar_pacman();
  452.         A.mover_fantasma();
  453.         B.mover_fantasma();
  454.         C.mover_fantasma();
  455.         D.mover_fantasma();
  456.         E.mover_fantasma();
  457.                 pantalla();
  458.                 rest(70);
  459.  
  460.                 clear (pacman);
  461.                 blit(pacbmp,pacman,4*33,0,0,0,33,33);// imprimir imagen de pacman
  462.         draw_sprite(buffer, pacman, px,py);
  463.         pantalla();
  464.         rest(90);
  465.  
  466.         }               /*---- Fin de la implentacion del juego ----*/
  467.  
  468.         /*-------- Limpiamos todos los buffers ------*/
  469.         clear(buffer);
  470.         clear(pacman);
  471.         clear(roca);
  472.         clear(pacbmp);
  473.         clear(comida);
  474.         clear(muertebmp);
  475.         clear(diamante1);
  476.         clear(diamante2);
  477.         clear(screen);
  478.  
  479.  
  480.     destruir_pila();// calculamos el bonus obtenido
  481.  
  482.     salir=false;
  483.     int Total=puntaje+bonusAzul+bonusRojo;
  484.     while(!salir){
  485.     /*-----  Mostramos pantalla cuando perdemos  ------*/
  486.     if(lose_juego()==true){
  487.  
  488.         blit(loser,buffer,0,0,60,0,880,600);
  489.         textout(buffer,font,"Tu Puntaje es:",220,350,pallete_color[14]);
  490.         textout_ex(buffer, font, itoa(puntaje,c1,10)240380,  0xfff000-1);
  491.         textout(buffer,font,"Bonus Rojo(200) :      Bonus  Azul(100):",220,410,pallete_color[14]);
  492.         textout_ex(buffer, font, itoa(bonusRojo,c2,10)300430,  0xfff000-1);
  493.         textout_ex(buffer, font, itoa(bonusAzul,c2,10)450430,  0xfff000-1);
  494.         textout(buffer,font,"Total de Puntos :",220,460,pallete_color[14]);
  495.         textout_ex(buffer, font, itoa(Total,c2,10)400460,  0xfff000,-1);
  496.         textout(buffer,font,"Presione ESC o ENTER para salir",220,490,pallete_color[14]);
  497.         blit(buffer,screen,0,0,0,0,880,600);
  498.         midi_pause();
  499.         if(key[KEY_ESC]||key[KEY_ENTER]){
  500.             salir=true;
  501.         }
  502.     }
  503.     /*----- Mostramos pantalla cuando ganamos ------*/
  504.     if(win_juego()==false){
  505.         blit(win,buffer,0,0,60,0,880,600);
  506.         textout(buffer,font,"Tu Puntaje es:",220,350,pallete_color[14]);
  507.         textout_ex(buffer, font, itoa(puntaje,c1,10)240380,  0xfff000-1);
  508.         textout(buffer,font,"Bonus Rojo(200) :      Bonus  Azul(100):",220,410,pallete_color[14]);
  509.         textout_ex(buffer, font, itoa(bonusRojo,c2,10)300430,  0xfff000-1);
  510.         textout_ex(buffer, font, itoa(bonusAzul,c2,10)450430,  0xfff000-1);
  511.         textout(buffer,font,"Total de Puntos :",220,460,pallete_color[14]);
  512.         textout_ex(buffer, font, itoa(Total,c2,10)400460,  0xfff000,-1);
  513.         textout(buffer,font,"Presione ESC o ENTER para salir",220,490,pallete_color[14]);
  514.         blit(buffer,screen,0,0,0,0,880,600);
  515.         midi_pause();
  516.         if(key[KEY_ESC]||key[KEY_ENTER]){
  517.             salir=true;
  518.         }
  519.     }
  520.     }
  521.  
  522.     /*--- Destruimos todos los BITMAP usados en el juego para liberar memoria de tarjeta grafica----*/
  523.     destroy_midi(musica1);
  524.     destroy_bitmap(buffer);
  525.     destroy_bitmap(win);
  526.     destroy_bitmap(loser);
  527.     destroy_bitmap(pacbmp);
  528.     destroy_bitmap(pacman);
  529.     destroy_bitmap(comida);
  530.     destroy_bitmap(roca);
  531.     destroy_bitmap(muertebmp);
  532.     destroy_bitmap(diamante1);
  533.     destroy_bitmap(diamante2);
  534.  
  535.  
  536. }
  537. END_OF_MAIN();
Tags: ,