Advertisement
Fhernd

ajedrez.cpp

Nov 27th, 2018
574
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <graphics.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. #define ROJO 1
  11. #define VERDE 2
  12. #define TRANSPARENTE 0
  13. #define AMARILLA 9
  14. #define BLANCA 10
  15.  
  16. #define TORRE 3
  17. #define REY 4
  18. #define CABALLO 5
  19. #define PEON 6
  20. #define REINA 7
  21.  
  22. #define DIMENSION_TABLERO 8
  23.  
  24. struct Celda {
  25.     int x;
  26.     int y;
  27.     int tipo;
  28.     int color;
  29. };
  30.  
  31. Celda tablero[DIMENSION_TABLERO][DIMENSION_TABLERO];
  32.  
  33. const int VACIA = 0;
  34.  
  35. bool turnoUsuario = true;
  36. bool fichaSeleccionada = false;
  37.  
  38. int xInicio;
  39. int yInicio;
  40.  
  41. int xFin;
  42. int yFin;
  43.  
  44. // Comprueba si es posible mover la ficha TORRE:
  45. bool esPosibleMoverTorre(Celda ficha, int x, int y){
  46.     bool movimientoPosible = false;
  47.    
  48.     cout << "OK" << endl;
  49.    
  50.     if (ficha.x > x && ficha.y == y){
  51.         movimientoPosible = true;
  52.     } else if (ficha.x == x && ficha.y < y){
  53.         movimientoPosible = true;
  54.     } else if (ficha.x < x && ficha.y == y){
  55.         movimientoPosible = true;
  56.     } else if (ficha.x == x && ficha.y > y){
  57.         movimientoPosible = true;
  58.     }
  59.    
  60.     cout << "PM: " << movimientoPosible << endl;
  61.    
  62.     if (movimientoPosible){
  63.         if (ficha.x == 0 && ficha.y == 1){
  64.             return (x == 0 && y == 0) || (x == 0 && y <= 4) || (x <= 2 && y == 1);
  65.         } else if (ficha.x == 0 && ficha.y == 5){
  66.             return (x == 0 && y >= 2) || (x == 0 && y == 6) || (x <= 7 && y == 5);
  67.         } else {
  68.             return false;
  69.         }
  70.     } else {
  71.         return false;
  72.     }
  73. }
  74.  
  75. // Comprueba si es posible mover la ficha REY:
  76. bool esPosibleMoverRey(Celda ficha, int x, int y){
  77.    
  78.     if (abs(ficha.x - x) == 1 && ficha.y == y){
  79.         return true;
  80.     }  else if (ficha.x == x && abs(ficha.y - y) == 1){
  81.         return true;
  82.     } else if (abs(ficha.x - x) == 1 && abs(ficha.y - y) == 1){
  83.         return true;
  84.     } else {
  85.         return false;
  86.     }
  87. }
  88.  
  89. // Comprueba si es posible mover la ficha PEON:
  90. bool esPosibleMoverPeon(Celda ficha, int x, int y){
  91.     return ficha.x < x && abs(ficha.x - x) == 1 && ficha.y == y;
  92. }
  93.  
  94. // Comprueba si es posible mover la ficha REINA:
  95. bool esPosibleMoverReina(Celda ficha, int x, int y){
  96.     if (ficha.x > x && ficha.y > y){
  97.         return false;
  98.     } else if (ficha.x > x && ficha.y == y){
  99.         return true
  100.     } else if ((abs(ficha.x - x) == 1 && abs(ficha.y - y) == 1) && ficha.x > x && ficha.y < y){
  101.         return true
  102.     } else if (ficha.x == x && ficha.y <= 7){
  103.         return true;
  104.     } else if ((x == 5 && y == 3) || (x == 6 && y == 4) || (x == 7 && y == 5)){
  105.         return true;
  106.     } else if (ficha.x <= 6 && ficha.y == y){
  107.         return true;
  108.     } else if ((x == 5 && y == 1) || (x == 6 && y == 0)){
  109.         return true;
  110.     } else if (ficha.x == x && (y >= 0 && y < ficha.y){
  111.         return true;
  112.     } else {
  113.         return false;
  114.     }
  115. }
  116.  
  117. bool sePuedeRealizarMovimiento(Celda ficha, int x, int y){
  118.    
  119.     switch(ficha.tipo){
  120.         case TORRE:
  121.             return esPosibleMoverTorre(ficha, x, y);
  122.            
  123.         case REY:
  124.             return esPosibleMoverRey(ficha, x, y);
  125.            
  126.         case PEON:
  127.             return esPosibleMoverPeon(ficha, x, y);
  128.            
  129.         case REINA:
  130.             return esPosibleMoverReina(ficha, x, y);
  131.     }
  132.    
  133.     return false;
  134. }
  135.  
  136. void click_handler(int x, int y)
  137. {
  138.     if ((x >= 120 && x <= 520) && (y >= 40 && y <= 440)){
  139.         if(turnoUsuario){
  140.             int posY = (x - 120) / 50;
  141.             int posX = (y - 40) / 50;
  142.            
  143.             cout << "Pos X: " << posX << " Pos Y: " << posY << endl;
  144.            
  145.             if (tablero[posX][posY].tipo == VACIA && !fichaSeleccionada){
  146.                 return;
  147.             } else if (tablero[posX][posY].color == AMARILLA || fichaSeleccionada) {
  148.                 if (!fichaSeleccionada){
  149.                     fichaSeleccionada = true;
  150.                    
  151.                     xInicio = posX;
  152.                     yInicio = posY;
  153.                    
  154.                     cout << tablero[posX][posY].tipo << endl;
  155.                 } else if (tablero[posX][posY].tipo == VACIA) {
  156.                    
  157.                     if (sePuedeRealizarMovimiento(tablero[xInicio][yInicio], posX, posY)){
  158.                         turnoUsuario = false;
  159.                        
  160.                        
  161.                         cout << "Yep" << endl;
  162.                     } else {
  163.                         fichaSeleccionada = false;
  164.                        
  165.                         cout << "Nop" << endl;
  166.                     }
  167.                 }
  168.             }
  169.         }
  170.     }
  171. }
  172.  
  173. int main()
  174. {
  175.     initwindow(650, 500, "A");
  176.    
  177.     int dimension = 8;
  178.    
  179.     Celda celda;
  180.    
  181.     registermousehandler(WM_LBUTTONDOWN, click_handler);
  182.    
  183.     // Carga el tablero:
  184.     for(int i = 0; i < DIMENSION_TABLERO; ++i){
  185.         for(int j = 0; j < DIMENSION_TABLERO; ++j){
  186.             celda.x = i;
  187.             celda.y = j;
  188.            
  189.             if( ( i + j ) % 2 == 0 ){
  190.                 celda.color = ROJO;
  191.             }
  192.             else{
  193.                 celda.color = VERDE;
  194.             }
  195.            
  196.             celda.tipo = VACIA;
  197.             tablero[i][j] = celda;
  198.         }
  199.     }
  200.    
  201.     celda.x = 0;
  202.     celda.y = 1;
  203.     celda.color = AMARILLA;
  204.     celda.tipo = TORRE;
  205.     tablero[0][1] = celda;
  206.    
  207.     celda.x = 0;
  208.     celda.y = 5;
  209.     celda.color = AMARILLA;
  210.     celda.tipo = TORRE;
  211.     tablero[0][5] = celda;
  212.    
  213.     celda.x = 0;
  214.     celda.y = 7;
  215.     celda.color = AMARILLA;
  216.     celda.tipo = REY;
  217.     tablero[0][7] = celda;
  218.    
  219.     celda.x = 1;
  220.     celda.y = 4;
  221.     celda.color = BLANCA;
  222.     celda.tipo = CABALLO;
  223.     tablero[1][4] = celda;
  224.    
  225.     celda.x = 2;
  226.     celda.y = 0;
  227.     celda.color = AMARILLA;
  228.     celda.tipo = PEON;
  229.     tablero[2][0] = celda;
  230.    
  231.     celda.x = 2;
  232.     celda.y = 3;
  233.     celda.color = AMARILLA;
  234.     celda.tipo = PEON;
  235.     tablero[2][3] = celda;
  236.    
  237.     celda.x = 2;
  238.     celda.y = 4;
  239.     celda.color = AMARILLA;
  240.     celda.tipo = PEON;
  241.     tablero[2][4] = celda;
  242.    
  243.     celda.x = 3;
  244.     celda.y = 1;
  245.     celda.color = AMARILLA;
  246.     celda.tipo = PEON;
  247.     tablero[3][1] = celda;
  248.    
  249.     celda.x = 4;
  250.     celda.y = 2;
  251.     celda.color = AMARILLA;
  252.     celda.tipo = REINA;
  253.     tablero[4][2] = celda;
  254.    
  255.     celda.x = 4;
  256.     celda.y = 4;
  257.     celda.color = BLANCA;
  258.     celda.tipo = REINA;
  259.     tablero[4][4] = celda;
  260.    
  261.     celda.x = 6;
  262.     celda.y = 0;
  263.     celda.color = BLANCA;
  264.     celda.tipo = PEON;
  265.     tablero[6][0] = celda;
  266.    
  267.     celda.x = 6;
  268.     celda.y = 1;
  269.     celda.color = BLANCA;
  270.     celda.tipo = PEON;
  271.     tablero[6][1] = celda;
  272.    
  273.     celda.x = 6;
  274.     celda.y = 2;
  275.     celda.color = BLANCA;
  276.     celda.tipo = PEON;
  277.     tablero[6][2] = celda;
  278.    
  279.     celda.x = 7;
  280.     celda.y = 2;
  281.     celda.color = BLANCA;
  282.     celda.tipo = REY;
  283.     tablero[7][2] = celda;
  284.    
  285.     celda.x = 7;
  286.     celda.y = 3;
  287.     celda.color = BLANCA;
  288.     celda.tipo = TORRE;
  289.     tablero[7][3] = celda;
  290.    
  291.     int x;
  292.     int y;
  293.     int ancho = 50;
  294.     int alto = 50;
  295.     int color;
  296.    
  297.     y = 0;
  298.    
  299.     int i, j;
  300.    
  301.     rectangle( 120, 40, 120 + ( 50 * 8 ), 40 + ( 50 * 8 ));
  302.    
  303.     char columnas[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
  304.    
  305.     while(y < 210){
  306.        
  307.         if (i != 7){
  308.             cleardevice();
  309.         }
  310.        
  311.         for(i = 0 ; i < 8 ; i++ ) {
  312.             for(j = 0 ; j < 8 ; j++ ) {
  313.                
  314.                 if( ( i + j ) % 2 == 0 ){
  315.                     setfillstyle(SOLID_FILL, RED);
  316.                 }
  317.                 else{
  318.                     setfillstyle(SOLID_FILL, GREEN);
  319.                 }
  320.                
  321.                 bar(120 + (j * alto), 40 + (i * ancho), 170 + (j * alto), 90 + (i * ancho));
  322.             }
  323.            
  324.             char fila [10];
  325.             sprintf(fila, "%d", (8 - i));
  326.             outtextxy(95, 60 + (i * 50), fila);
  327.            
  328.             char columna [10];
  329.             sprintf(columna, "%c", columnas[i]);
  330.             outtextxy(140 + (i * 50), 450, columna);
  331.         }
  332.        
  333.         setfillstyle(SOLID_FILL, YELLOW);
  334.         // Torres amarillas:
  335.         bar(180, 40, 185, 50);
  336.         bar(193, 40, 198, 50);
  337.         bar(205, 40, 210, 50);
  338.         bar(120 + (1 * alto + 10), 40 + (0 * ancho + 10), 170 + (1 * alto - 10), 90 + (0 * ancho - 10));
  339.        
  340.         bar(380, 40, 385, 50);
  341.         bar(393, 40, 398, 50);
  342.         bar(405, 40, 410, 50);
  343.         bar(120 + (5 * alto + 10), 40 + (0 * ancho + 10), 170 + (5 * alto - 10), 90 + (0 * ancho - 10));
  344.        
  345.         // Rey amarillo:
  346.         setfillstyle(SOLID_FILL, YELLOW);
  347.         setcolor(YELLOW);
  348.         circle(135 + (7 * alto + 10), 55 + (0 * ancho + 10), 10);
  349.        
  350.         // Caballo blanco:
  351.         setfillstyle(SOLID_FILL, WHITE);
  352.         bar(355, 90, 360, 100);
  353.         bar(120 + (4 * alto + 10), 40 + (1 * ancho + 10), 170 + (4 * alto - 10), 90 + (1 * ancho - 10));
  354.        
  355.         // Peones amarillos:
  356.         setfillstyle(SOLID_FILL, YELLOW);
  357.         bar(120 + (0 * alto + 10), 40 + (2 * ancho + 10), 170 + (0 * alto - 10), 90 + (2 * ancho - 10));
  358.         bar(120 + (3 * alto + 10), 40 + (2 * ancho + 10), 170 + (3 * alto - 10), 90 + (2 * ancho - 10));
  359.         bar(120 + (4 * alto + 10), 40 + (2 * ancho + 10), 170 + (4 * alto - 10), 90 + (2 * ancho - 10));
  360.         bar(120 + (1 * alto + 10), 40 + (3 * ancho + 10), 170 + (1 * alto - 10), 90 + (3 * ancho - 10));
  361.        
  362.         // Reina amarilla:
  363.         circle(110 + (2 * alto + 35), 50 + (4 * ancho), 10);
  364.         bar(120 + (2 * alto + 10), 40 + (4 * ancho + 10), 170 + (2 * alto - 10), 90 + (4 * ancho - 10));
  365.        
  366.         // Reina blanca:
  367.         setfillstyle(SOLID_FILL, WHITE);
  368.         circle(210 + (2 * alto + 35), 50 + (4 * ancho), 10);
  369.         bar(120 + (4 * alto + 10), 40 + (4 * ancho + 10), 170 + (4 * alto - 10), 90 + (4 * ancho - 10));
  370.        
  371.         // Peones blancos:
  372.         bar(120 + (0 * alto + 10), 40 + (6 * ancho + 10), 170 + (0 * alto - 10), 90 + (6 * ancho - 10));
  373.         bar(120 + (1 * alto + 10), 40 + (6 * ancho + 10), 170 + (1 * alto - 10), 90 + (6 * ancho - 10));
  374.         bar(120 + (2 * alto + 10), 40 + (6 * ancho + 10), 170 + (2 * alto - 10), 90 + (6 * ancho - 10));
  375.        
  376.         // Rey blanco:
  377.         setfillstyle(SOLID_FILL, WHITE);
  378.         setcolor(WHITE);
  379.         circle(135 + (2 * alto + 10), 53 + (7 * ancho + 10), 10);
  380.        
  381.         setfillstyle(SOLID_FILL, WHITE);
  382.         rectangle(120, 40, 120 + (50 * 8), 40 + (50 * 8));
  383.        
  384.         bar(280, 390, 285, 400);
  385.         bar(293, 390, 298, 400);
  386.         bar(305, 390, 310, 400);
  387.         bar(120 + (3 * alto + 10), 40 + (7 * ancho + 10), 170 + (3 * alto - 10), 90 + (7 * ancho - 10));
  388.        
  389.         y += 10;
  390.     }
  391.    
  392.     y = 0;
  393.    
  394.     delay(300);
  395.    
  396.     getch();
  397.     closegraph();
  398.     return 0;
  399. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement