Juego de Ajedrez en Visual C++
Dibujar las piezas
Les recomiendo que utilicen la opción Imagen -> Configuración de cuadrícula, para que pueda aparecer una cuadricula de 60x60 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”.
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.
- Code: Seleccionar todo
- 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:
- Code: Seleccionar todo
- #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.
- Code: Seleccionar todo
- // 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.
- Code: Seleccionar todo
- 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:
- Code: Seleccionar todo
- 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.
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:
- Code: Seleccionar todo
- 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:
Archivos Adjuntos
- Ajedrez.zip 84,86 KiB

Código fuente Ajedréz Visual C++ 2005
Debe estar registrado para poder descargar archivos Desea registrarse?
Otros Artículos en esta sección
-
Este programa genera un grafico de una función matemática mediante OpenGL. Puede ser compilado con DEV C++ ó Visual C++.Ventana que se muestra al inicio de una aplicación mientras cargan todos elementos de nuestro programa, con esto podemos hacer nuestras aplicaciones Visual C++ mas presentables.Es un programa en C++ que implementa la factorización o descomposición LU (del inglés Lower-Upper).¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:

foro de Visual C++ »


