Autor Tema: Código PACMAN en código ascii y C++  (Leído 8548 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Davied

  • Administrator
  • Sr. Member
  • *****
  • Mensajes: 418
  • Karma: +26/-0
  • deividcoptero
    • Canal Youtube
Código PACMAN en código ascii y C++
« en: Febrero 11, 2013, 08:12:52 pm »


Bueno pues aquí les dejo el código de pacman en código ascii pues me lo han pedido.
El código puede ser usado para cualquier fin solo pido los créditos :)

El código es muy parecido al que hice en allegro, así que si no entiendes bien el programa te recomiendo que tomes este curso
http://www.youtube.com/playlist?list=PL9E48CC99A9EE4F6F

Por cierto en la parte superior izquierda veras mi foto de perfil y abajo puedes darme un +Karma si gustas :D

Código: C++
  1. /*Programador David Mendoza Velis
  2.   contacto: deividcoptero@gmail.com
  3.             www.youtube.com/user/deividcoptero  */
  4.  
  5.  
  6. #include <windows.h>
  7. #include <iostream>
  8. #include <conio.h>
  9. //#include <stdlib.h>
  10. #include <stdio.h>
  11.  
  12. //#include <ctype.h>
  13. //#pragma hdrstop
  14. //#include <tchar.h>
  15. //#pragma argsused
  16.  
  17. #define ARRIBA     72      // NUMEROS ASOCIADOS A LAS FLECHAS DEL TECLADO
  18. #define IZQUIERDA  75
  19. #define DERECHA    77
  20. #define ABAJO      80
  21. #define ESC        27
  22. #define ENTER      13
  23.  
  24. int backcolor=0;
  25. int dir = 0;
  26. int x=39,y=22;
  27. int anteriorpx,anteriorpy;
  28. char tecla;
  29.  
  30. long int puntos = -5;
  31. int vidas = 3;
  32.  
  33. void setCColor( int color)
  34. {
  35.         static HANDLE hConsole;
  36.  
  37.         hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
  38.  
  39.         SetConsoleTextAttribute( hConsole, color | (backcolor * 0x10 + 0x100) );
  40. }
  41.  
  42. int color[7] = {
  43.       0x009,
  44.       0x00E,
  45.       0x00C,
  46.       0x002,
  47.       0x00B,
  48.       0x005,
  49.       0x00F
  50.  
  51.      };
  52.  
  53. void gotoxy(int x, int y)  // funcion que posiciona el cursos en la coordenada (x,y)
  54. {
  55.     HANDLE hCon;
  56.     COORD dwPos;
  57.  
  58.     dwPos.X = x;
  59.     dwPos.Y = y;
  60.     hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  61.     SetConsoleCursorPosition(hCon,dwPos);
  62. }
  63.  
  64. char mapa[50][100] = {
  65.      "                                                      ",
  66.      "                  AXXXXXXXXXXXXXXXXXXXB AXXXXXXXXXXXXXXXXXXXB",
  67.      "                  Y___________________Y Y___________________Y",
  68.      "                  Y_AXXXXXB_AXXXXXXXB_Y Y_AXXXXXXXB_AXXXXXB_Y",
  69.      "                  Y_Y     Y_Y       Y_Y Y_Y       Y_Y     Y_Y",
  70.      "                  Y_DXXXXXC_DXXXXXXXC_DXC_DXXXXXXXC_DXXXXXC_Y",
  71.      "                  Y________|_________|___|_________|________Y",
  72.      "                  Y_AXXXXXB_AXB_AXXXXXXXXXXXXXB_AXB_AXXXXXB_Y",
  73.      "                  Y_DXXXXXC_Y Y_DXXXXB   AXXXXC_Y Y_DXXXXXC_Y",
  74.      "                  Y_________Y Y______Y   Y______Y Y_________Y",
  75.      "                  DXXXXXXXB_Y DXXXXB_Y   Y_AXXXXC Y_AXXXXXXXC",
  76.      "                          Y_Y AXXXXC_DXXXC_DXXXXB Y_Y        ",
  77.      "                          Y_Y Y_________________Y Y_Y        ",
  78.      "                  XXXXXXXXC_DXC_AXXXXXX XXXXXXB_DXC_DXXXXXXXX",
  79.      "                  _________|____Y      *      Y____|_________",
  80.      "                  XXXXXXXXB_AXB_DXXXXXXXXXXXXXC_AXB_AXXXXXXXX",
  81.      "                          Y_Y Y_________________Y Y_Y        ",
  82.      "                          Y_Y Y_AXXXXXXXXXXXXXB_Y Y_Y        ",
  83.      "                  AXXXXXXXC_DXC_DXXXXB   AXXXXC_DXC_DXXXXXXXB",
  84.      "                  Y________|_________Y   Y_________|________Y",
  85.      "                  Y_AXXXXXB_AXXXXXXB_Y   Y_AXXXXXXB_AXXXXXB_Y",
  86.      "                  Y_DXXXB Y_DXXXXXXC_DXXXC_DXXXXXXC_Y AXXXC_Y",
  87.      "                  Y_____Y Y_________|_____|_________Y Y_____Y",
  88.      "                  DXXXB_Y Y_AXB_AXXXXXXXXXXXXXB_AXB_Y Y_AXXXC",
  89.      "                  AXXXC_DXC_Y Y_DXXXXB   AXXXXC_Y Y_DXC_DXXXB",
  90.      "                  Y_________Y Y______Y   Y______Y Y_________Y",
  91.      "                  Y_AXXXXXXXC DXXXXB_Y   Y_AXXXXC DXXXXXXXB_Y",
  92.      "                  Y_DXXXXXXXXXXXXXXC_DXXXC_DXXXXXXXXXXXXXXC_Y",
  93.      "                  Y_________________|_____|_________________Y",
  94.      "                  DXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC",
  95. };
  96.  
  97.  
  98. void pintar_mapa()// Funcion que pinta el borde de la pantalla de juego
  99. {
  100.      for(int i = 0 ; i < 78 ; i++){
  101.          for(int j = 0 ; j < 30 ; j++){
  102.                gotoxy(i,j);
  103.  
  104.                if(mapa[j][i] == 'X') {setCColor(color[0]);printf("%c",205);}
  105.                if(mapa[j][i] == '_') {setCColor(color[1]); printf("%c",250);}
  106.                else if(mapa[j][i] == 'Y') {setCColor(color[0]);printf("%c",186);}
  107.                else if(mapa[j][i] == 'A') {setCColor(color[0]);printf("%c",201);}
  108.                else if(mapa[j][i] == 'B') {setCColor(color[0]);printf("%c",187);}
  109.                else if(mapa[j][i] == 'C') {setCColor(color[0]);printf("%c",188);}
  110.                else if(mapa[j][i] == 'D') {setCColor(color[0]);printf("%c",200);}
  111.  
  112.  
  113.          }
  114.      }
  115. }
  116.  
  117.  
  118. void pacman(int x , int y){
  119.      setCColor(color[1]);
  120.      gotoxy(x,y); printf("%c",2);
  121. }
  122.  
  123. void borrar_pacman(int x, int y){
  124.      gotoxy(x,y); printf(" ");
  125.      if(mapa[y][x] == '_'){ mapa[y][x] = ' '; puntos += 5;}
  126. }
  127. void teclear(){
  128.     if(kbhit()){
  129.       tecla = getch();
  130.       switch(tecla){
  131.       case ARRIBA:
  132.          dir = 0;
  133.          break;
  134.  
  135.       case ABAJO:
  136.          dir = 1;
  137.          break;
  138.  
  139.       case DERECHA:
  140.          dir = 2;
  141.          break;
  142.  
  143.       case IZQUIERDA:
  144.          dir = 3;
  145.          break;
  146.  
  147.       }// FIN SWITCH
  148.  
  149.    }// FIN DEL IF
  150.  
  151. }
  152.  
  153. class fantasma{
  154.       int fdir;
  155.       int _x, _y;
  156.       int col;
  157. public:
  158.       fantasma(int x , int y , int color); // constructor
  159.       void dibujar_fantasma() const;
  160.       void borrar_fantasma() const;
  161.       void mover_fantasma();
  162.       void choque_pacman();
  163. };
  164. fantasma::fantasma(int x , int y, int color){
  165.       _x = x;
  166.       _y = y;
  167.       col = color;
  168.       fdir = rand()%4;
  169. }
  170. void fantasma::dibujar_fantasma() const{
  171.  
  172.      setCColor(color[col]);
  173.      gotoxy(_x,_y); printf("%c",6);
  174. }
  175. void fantasma::borrar_fantasma() const{
  176.  
  177.      gotoxy(_x,_y); printf(" ");
  178. }
  179. void fantasma::choque_pacman(){
  180.      if(y == _y && x == _x || (fdir == 0 && dir == 1 || fdir == 1 && dir == 0
  181.      ||fdir == 2 && dir == 3 || fdir == 3 && dir == 2 )&&(_y == anteriorpy && _x == anteriorpx)){
  182.  
  183.  
  184.       x = 39;
  185.       y = 22;
  186.       dir = 4;
  187.       vidas--;
  188.  
  189.      }
  190.  
  191.  
  192. }
  193.  
  194. void fantasma::mover_fantasma(){
  195.      borrar_fantasma();
  196.      choque_pacman();
  197.      int bolx=_x,boly=_y;
  198.  
  199.      if(mapa[_y][_x] == '|'){
  200.              fdir = rand()%4;
  201.      }
  202.      if(mapa[_y][_x] == '*'){
  203.              fdir = 0;
  204.      }
  205.  
  206.      if(fdir == 2){
  207.           if(mapa[_y][_x+1] != 'X' && mapa[_y][_x+1] != 'A' && mapa[_y][_x+1] != 'Y' &&
  208.           mapa[_y][_x+1] != 'B' && mapa[_y][_x+1] != 'C' && mapa[_y][_x+1] != 'D')         _x++;
  209.           else fdir = rand()%4;
  210.      }
  211.      if(fdir == 3){
  212.           if(mapa[_y][_x-1] != 'X' && mapa[_y][_x-1] != 'A' && mapa[_y][_x-1] != 'Y' &&
  213.           mapa[_y][_x-1] != 'B' && mapa[_y][_x-1] != 'C' && mapa[_y][_x-1] != 'D')          _x--;
  214.           else fdir = rand()%4;
  215.      }
  216.      if(fdir == 0){
  217.           if(mapa[_y-1][_x] != 'X' && mapa[_y-1][_x] != 'A' && mapa[_y-1][_x] != 'Y' &&
  218.           mapa[_y-1][_x] != 'B' && mapa[_y-1][_x] != 'C' && mapa[_y-1][_x] != 'D')           _y--;
  219.           else fdir = rand()%4;
  220.      }
  221.      if(fdir == 1){
  222.           if(mapa[_y+1][_x] != 'X' && mapa[_y+1][_x] != 'A' && mapa[_y+1][_x] != 'Y' &&
  223.       mapa[_y+1][_x] != 'B' && mapa[_y+1][_x] != 'C' && mapa[_y+1][_x] != 'D')                _y++;
  224.           else fdir = rand()%4;
  225.      }
  226.  
  227.      if(mapa[boly][bolx] == '_') {setCColor(color[1]); gotoxy(bolx,boly);printf("%c",250);}
  228.  
  229.      // rutina atajo
  230.      if(_x <= 17) _x = 61;
  231.         else if(_x >= 62) _x = 18;
  232.      dibujar_fantasma();
  233. }
  234.  
  235.  
  236. void marcador(){
  237.  
  238.    gotoxy(5,4); printf("PUNTOS");
  239.    gotoxy(5,6); printf("    ");
  240.    setCColor(color[6]);
  241.    gotoxy(5,6); printf("%ld",puntos);
  242.  
  243.    setCColor(color[1]);
  244.    gotoxy(5,25); printf("VIDAS");
  245.    for(int i = 0 ; i <= vidas ; i++){
  246.        gotoxy(5,i+27);printf(" ");
  247.  
  248.    }
  249.    for(int i = 0 ; i < vidas ; i++){
  250.        gotoxy(5,i+27);printf("%c",2);
  251.  
  252.    }
  253.    setCColor(color[2]);
  254.    gotoxy(70,27);printf("%c",169);
  255.  
  256.  
  257. }
  258.  
  259. int main(){
  260.  
  261.  
  262.  
  263.    fantasma A(41,14,2);
  264.    fantasma B(43,14,3);
  265.    fantasma C(40,14,4);
  266.    fantasma D(39,14,5);
  267.    pintar_mapa();
  268.  
  269.    while(vidas > 0 && puntos < 1950){
  270.       marcador();
  271.       borrar_pacman(x,y);
  272.       anteriorpx = x; anteriorpy = y;
  273.  
  274.  
  275.       teclear();
  276.  
  277.       if(dir == 0 && mapa[y-1][x] != 'X' && mapa[y-1][x] != 'A' && mapa[y-1][x] != 'Y' &&
  278.       mapa[y-1][x] != 'B' && mapa[y-1][x] != 'C' && mapa[y-1][x] != 'D')                       y--;
  279.  
  280.  
  281.       else if(dir == 1 && mapa[y+1][x] != 'X' && mapa[y+1][x] != 'A' && mapa[y+1][x] != 'Y' &&
  282.       mapa[y+1][x] != 'B' && mapa[y+1][x] != 'C' && mapa[y+1][x] != 'D')                       y++;
  283.  
  284.  
  285.       pacman(x,y);
  286.       Sleep(55);
  287.       borrar_pacman(x,y);
  288.  
  289.       B.choque_pacman();
  290.       C.choque_pacman();
  291.       D.choque_pacman();
  292.       A.choque_pacman();
  293.  
  294.       //A.mover_fantasma();
  295.       anteriorpx = x; anteriorpy = y;
  296.       teclear();
  297.  
  298.  
  299.       if(dir == 2 && mapa[y][x+1] != 'X' && mapa[y][x+1] != 'A' && mapa[y][x+1] != 'Y' &&
  300.       mapa[y][x+1] != 'B' && mapa[y][x+1] != 'C' && mapa[y][x+1] != 'D')                       x++;
  301.  
  302.  
  303.       else if(dir == 3 && mapa[y][x-1] != 'X' && mapa[y][x-1] != 'A' && mapa[y][x-1] != 'Y' &&
  304.       mapa[y][x-1] != 'B' && mapa[y][x-1] != 'C' && mapa[y][x-1] != 'D')                         x--;
  305.  
  306.       A.mover_fantasma();
  307.       B.mover_fantasma();
  308.       C.mover_fantasma();
  309.       D.mover_fantasma();
  310.       pacman(x,y);
  311.       Sleep(55);
  312.  
  313.       //pacman(x,y);
  314.       //rutina atajo
  315.       if(x < 17) {
  316.         borrar_pacman(x,y);
  317.         x = 61;
  318.       }
  319.       else if(x > 62){
  320.         borrar_pacman(x,y);
  321.         x= 18;
  322.       }
  323.  
  324.  
  325.  
  326.    }
  327.  
  328.  
  329.  
  330.    for(int i = 0 ; i <= vidas ; i++){
  331.        gotoxy(5,i+27);printf(" ");
  332.  
  333.    }
  334.  
  335.    system("pause>NULL");
  336.    return 0;
  337.  
  338. }
  339.  
  340.  
« última modificación: Febrero 11, 2013, 08:20:22 pm por Davied »
------------------╔╦╦╦═╦╗╔═╦═╦══╦═╗----------------------
------------------║║║║╩╣╚╣═╣║║║║║╩╣----------------------
------------------╚══╩═╩═╩═╩═╩╩╩╩═╝----------------------

Desconectado abrito393

  • Newbie
  • *
  • Mensajes: 8
  • Karma: +0/-0
Re:Código PACMAN en código ascii y C++
« Respuesta #1 en: Febrero 11, 2013, 08:42:50 pm »
excelente :) grax

Desconectado Koday

  • Full Member
  • ***
  • Mensajes: 104
  • Karma: +9/-0
    • BLOG PROGRAMACION C++
Re:Código PACMAN en código ascii y C++
« Respuesta #2 en: Febrero 12, 2013, 05:13:18 am »
Te quedo muy bien

Desconectado abrito393

  • Newbie
  • *
  • Mensajes: 8
  • Karma: +0/-0
Re:Código PACMAN en código ascii y C++
« Respuesta #3 en: Febrero 12, 2013, 06:46:23 pm »
void gotoxi(int x, int y)  // funcion que posiciona el cursos en la coordenada (x,y)
{
    HANDLE hCon;
    COORD dwPos;

    dwPos.X = x;
    dwPos.Y = y;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hCon,dwPos);
}

CUAL ES EL COMPORTAMIENTO DE ESTA FUNCION ALGUIEN ME LA PUEDE EXPLICAR ES DECIR QUE HACE CADA VARIABLE?

Desconectado WizardRPG

  • Administrator
  • Sr. Member
  • *****
  • Mensajes: 266
  • Karma: +9/-0
    • creatusjuegosdecero
Re:Código PACMAN en código ascii y C++
« Respuesta #4 en: Febrero 12, 2013, 06:53:28 pm »
Excelentísisisisimoooooooooooooooo hermano te ha quedado de puta madre :D

Saludos.-