Juego de Ajedrez en Visual C++
Utilizar el Mouse para mover las piezas
- Code: Seleccionar todo
- class CAjedrezView : public CView
- {
- ...
- POINT m_celdaSel;
- POINT m_celdaCursor;
- bool m_bFichaSeleccionada;
- bool m_bTurnoBlancas;
- ...
- }
Algunas aclaraciones sobre las variables:
- La variable m_celdaSel es de tipo POINT y ahí guardaremos la celda seleccionada para ser movida en el siguiente clic.
- En la variable m_celdaCursor guardaremos las coordenadas de la celda sobre la cual esta el cursor del Mouse, para dibujar un borde amarillo en pantalla.
- La variable booleana m_FichaSeleccionada será un indicador que nos permitirá verificar si hay una ficha seleccionada para moverla, esto nos evitará varias líneas de código para verificar si ha habido una movida antes que la actual. Esta variable se inicializa en false por que al principio no hay fichas seleccionadas.
- La variable m_bTurnoBlancas decidirá el turno actual, esta variable se inicializará en verdadero (true) por que las reglas del ajedrez indican que primero empiezan las blancas. Si esta variable es false entonces obviamente le toca a equipo negro.
OnMouseMove
La función OnMouseMove, esta función nos ayudará a identificar la celda sobre la cual esta el puntero del Mouse. La secuencia del código fuentes es como sigue:
- Inicialmente crearemos las variables de las coordenadas inicializadas en -1 al principio.
- Luego transformaremos las coordenadas actuales de píxeles a posiciones de la matriz de piezas dividiendo las coordenadas entre 60.
- Luego verificamos si las coordenadas transformadas están dentro del margen permitido.
- Si están dentro del margen permitido y si han cambiado respecto a las coordenadas anteriores entonces cambiamos la celda de cursor a la posición actual.
- Caso contrario modificamos la celda de cursor a -1,-1 para evitar que se vea en pantalla.
Sin tantas complicaciones podemos escribir este codigo para el algoritmo anterior:
- Code: Seleccionar todo
- void CAjedrezView::OnMouseMove(UINT nFlags, CPoint point)
- {
- static int x = -1;
- static int y = -1;
- x = (point.x - MARGEN)/60;
- y = (point.y - MARGEN)/60;
- if(x >= 0 && y >= 0 && x<8 && y<8)
- {
- if(x != m_celdaCursor.x || y != m_celdaCursor.y )
- {
- m_celdaCursor.x = x;
- m_celdaCursor.y = y;
- Invalidate();
- }
- }
- else
- {
- x=-1;
- y=-1;
- if(x != m_celdaCursor.x || y != m_celdaCursor.y )
- {
- m_celdaCursor.x = -1;
- m_celdaCursor.y = -1;
- Invalidate();
- }
- }
- CView::OnMouseMove(nFlags, point);
- }
OnLButtonDown
- Code: Seleccionar todo
- void CAjedrezView::OnLButtonDown(UINT nFlags, CPoint point)
- {
- static int x = -1;
- static int y = -1;
- x = (point.x - MARGEN)/60;
- y = (point.y - MARGEN)/60;
- if(x >= 0 && y >= 0 && x<8 && y<8)
- {
- MoverFicha(x,y);
- }
- CView::OnLButtonDown(nFlags, point);
- }
Modificar la funcion 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_celdaSel.x == j && m_celdaSel.y == i)
- {
- CBrush *pFondoAnterior = pDC->SelectObject(&brSeleccion);
- pDC->Rectangle(&rcCelda);
- pDC->SelectObject(pFondoAnterior);
- }
- ...
- }
- }
- if(m_celdaCursor.x >= 0 && m_celdaCursor.y >= 0)
- {
- rcCelda.left = m_celdaCursor.x*TAMCELDA + MARGEN;
- rcCelda.top = m_celdaCursor.y*TAMCELDA + MARGEN;
- rcCelda.right = rcCelda.left + TAMCELDA;
- rcCelda.bottom = rcCelda.top + TAMCELDA;
- CPen *pAnterior = pDC->SelectObject(&penAmarillo);
- pDC->MoveTo(rcCelda.left,rcCelda.top);
- pDC->LineTo(rcCelda.right,rcCelda.top);
- pDC->LineTo(rcCelda.right,rcCelda.bottom);
- pDC->LineTo(rcCelda.left,rcCelda.bottom);
- pDC->LineTo(rcCelda.left,rcCelda.top);
- pDC->SelectObject(pAnterior);
- }
- pDC->SelectObject(penAnterior);
- }
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
-
Es un programa en C++ que implementa la factorización o descomposición LU (del inglés Lower-Upper).Una clase que permite obtener facilmente los parametros enviados desde la linea de comando en una aplicación C++.Hola a todos de nuevo fanáticos de la programación les presento un programa que genera un pupiletras o sopa de letras a partir de palabras al azar.¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:

foro de Visual C++ »


