Juego de ajedrez en Visual C++

Dibujar las piezas

Buscando en la red pude encontrar una imagen con todas las piezas de ajedrez que vamos a necesitar. Si ustedes encuentran algún juego de imágenes mejorado pueden utilizarlo y seguir los mismos pasos.
Les recomiendo que utilicen la opción Imagen -> Configuración de cuadrícula, para que pueda aparecer una cuadricula de 60×60 que va a facilitarles la ubicación de cada imagen. Las imágenes las guardaremos en los recursos con el id IDB_PIEZAS, deben modificar las propiedades de la imagen para que pueda ser guardada con “color verdadero”.

Imagen 9: Imagen con las piezas de ajedrez

Si han podido notar, aun no creamos la matriz conde vamos a almacenar cada pieza de ajedrez, esta matriz no necesita ser muy compleja, solo necesitamos un arreglo de dos dimensiones de tipo entero.

int m_pCeldas[8][8];
CImageList m_imgPiezas;

Cada pieza de ajedrez será identificada según su posición en la imagen, por ejemplo las posiciones 0 ,1 y 2 corresponden a las piezas: reina negra, reina blanca, y rey negro respectivamente (Ver imagen 9), para facilitarnos las cosas definiremos los siguientes valores:

#define VACIO   -1
#define PEONB   11
#define PEONN   10
#define ALFILB   7
#define ALFILN   6
#define CABALLOB 9
#define CABALLON 8
#define REYB     1
#define REYN     0
#define REINAB   3
#define REINAN   2
#define TORREB   5
#define TORREN   4

La terminación de cada definición anterior corresponde a la primera letra del color al que corresponde.

Para inicializar todos los valores en el arreglo m_pCeldas debemos crear una función que llamaremos InicializarTablero.

// Situa todas las piezas en su lugar
void CAjedrezView::InicializarTablero(void)
{
    //Inicializacion de celdas
    for(int i = 0 ; i < 8 ;i++)
        for(int j = 0 ; j < 8 ; j++)
            m_pCeldas[i][j] = VACIO;
 
    m_pCeldas[0][0] = TORREN;
    m_pCeldas[0][1] = CABALLON;
    m_pCeldas[0][2] = ALFILN;
    m_pCeldas[0][3] = REINAN;
    m_pCeldas[0][4] = REYN;
    m_pCeldas[0][5] = ALFILN;
    m_pCeldas[0][6] = CABALLON;
    m_pCeldas[0][7] = TORREN;
 
    m_pCeldas[7][0] = TORREB;
    m_pCeldas[7][1] = CABALLOB;
    m_pCeldas[7][2] = ALFILB;
    m_pCeldas[7][3] = REINAB;
    m_pCeldas[7][4] = REYB;
    m_pCeldas[7][5] = ALFILB;
    m_pCeldas[7][6] = CABALLOB;
    m_pCeldas[7][7] = TORREB;
 
    m_pCeldas[1][0] = PEONN;
    m_pCeldas[1][1] = PEONN;
    m_pCeldas[1][2] = PEONN;
    m_pCeldas[1][3] = PEONN;
    m_pCeldas[1][4] = PEONN;
    m_pCeldas[1][5] = PEONN;
    m_pCeldas[1][6] = PEONN;
    m_pCeldas[1][7] = PEONN;
 

    m_pCeldas[6][0] = PEONB;
    m_pCeldas[6][1] = PEONB;
    m_pCeldas[6][2] = PEONB;
    m_pCeldas[6][3] = PEONB;
    m_pCeldas[6][4] = PEONB;
    m_pCeldas[6][5] = PEONB;
    m_pCeldas[6][6] = PEONB;
    m_pCeldas[6][7] = PEONB;
}

La variable m_imgPiezas es donde cargaremos las imágenes, utilizaremos las funciones de la clase CImageList para extraer imágenes individuales al momento de pintar. En el constructor de la clase CAjedrezView debemos inicializar las imágenes para tenerlas disponibles en todo momento.

CAjedrezView::CAjedrezView()
{
    m_imgPiezas.Create(IDB_PIEZAS,TAMCELDA,0,RGB(255,0,255));
 
    InicializarTablero();
}

Finalmente para que podamos ver cada pieza en el tablero tenemos que agregar las siguientes líneas a la función DibujarTablero:

void CAjedrezView::DibujarTablero(CDC* pDC)
{
    /*...*/
 
    for(int i = 0 ; i < CELDAS ; i++)
    {
        for(int j = 0 ; j < CELDAS ; j++)
        {
            /*...*/
 
            if(m_pCeldas[i][j] >= 0)
            {
                POINT p;
                p.x = rcCelda.left;
                p.y = rcCelda.top;
                SIZE s;
                s.cx = s.cy = 60;
 
                m_imgPiezas.DrawEx( pDC, m_pCeldas[i][j],
                    p,s,RGB(255,0,255),0,ILD_TRANSPARENT);
            }
 
            /*...*/
        }
    }
    /*...*/
}

Luego de seguir todos estos pasos, al compilar se podrá observar las piezas inicializadas en su lugar tal como se muestra en la imagen 10.

Imagen 10: Tablero de ajedrez con las piezas dibujadas

Ahora solo falta modificar las propiedades de la ventana para que pueda tener un tamaño fijo también debemos modificar algunas propiedades más para evitar que al usuario pueda cambiar el tamaño de la ventana.

Para ello debemos ir a la clase CMainFrame a las funciones PreCreateWindow y OnCreate, y agregar las líneas siguientes:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
 
    //Asignar las dimensiones
    MoveWindow(0,0,60*9,60*10,FALSE);
    CenterWindow();
   
    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("No se pudo crear la barra de estado ");
        return -1;
    }
 
    return 0;
}

Si no lo han notado aun, también he borrado las líneas que corresponden a la creación de la barra de herramientas que no vamos a necesitar en adelante.

Al compilar nuestro proyecto en este punto podremos el siguiente resultado:

Imagen 11: Tablero del juego de ajedrez dibujado con todas las piezas

Descargas

File Description File size
zip Ajedrez Código fuente
85 KB
3 Respuestas a “Juego de ajedrez en Visual C++”
  1. Luis De Anda 8 Ene 2018
    1 Reply

    Hola amigo como estas, oye estoy interesado en una plataforma de juegos, ajedrez, damas inglesas, bagkammon y dominó, me gustaría platicar contigo haber si estas interesado, que tengas un excelente día

Dejar una Respuesta