Juego de Ajedrez en Visual C++
Moviendo cada pieza de ajedrez
Movida del peón
- Obtenemos la diferencia entre las coordenadas de origen y destino.
- Si es una movida vertical
- Si se ha movido un casillero
- Si la dirección de la movida corresponde al turno, entonces es posible realizar la movida
- Si se ha movido dos casilleros
- Si la dirección de la movida corresponde al turno y la pieza del peon aun no se ha movido, entonces es posible realizar la movida
- Si hay vía libre para realizar la movida, entonces es posible realizar la movida.
- Si la dirección de la movida corresponde al turno y la pieza del peon aun no se ha movido, entonces es posible realizar la movida
- Si se ha movido un casillero
- Si es un movimiento diagonal y si la orientación de la movida es correcta con el turno y si la celda de destino no esta vacía y si la celda de destino corresponde a una pieza del oponente.
- Se puede realizar la movida.
Código fuente de la función MoverPeonHacia
- Code: Seleccionar todo
- bool CAjedrezView::MoverPeonHacia(int x, int y)
- {
- int dify = y - m_celdaSel.y;
- int difx = x - m_celdaSel.x;
- bool bMovidaPosible = false;
- if(difx == 0) //Movida Vertical
- {
- if(abs(dify) == 1)//Si mueve un casillero
- {
- if(dify == (EsPiezaBlanca(m_celdaSel.x ,m_celdaSel.y)?-1:1))
- {
- bMovidaPosible = true;
- }
- }
- else if(abs(dify) == 2) //Movida larga de peon
- {
- if(m_celdaSel.y == (EsPiezaBlanca(m_celdaSel.x ,m_celdaSel.y)?6:1))
- {
- if(EsViaLibre(x,y))
- bMovidaPosible = true;
- }
- }
- }
- else if((abs(difx) == 1) // Si esta intentando comer
- && (dify == (EsPiezaBlanca(m_celdaSel.x ,m_celdaSel.y)?-1:1))
- && !EsCeldaNula(x,y)
- && (m_pCeldas[m_celdaSel.y ][m_celdaSel.x] != m_pCeldas[y][x]))
- {
- bMovidaPosible = true;
- }
- return bMovidaPosible;
- }
Movida del alfil
- Obtenemos la diferencia entre las coordenadas de origen y destino.
- Si la diferencia de ambas coordenadas son iguales entonces es un movimiento diagonal.
- Si hay vía libre y la celda de destino esta vacía o corresponde al enemigo
- Devolver true, indicando que se puede realizar la movida.
- Si hay vía libre y la celda de destino esta vacía o corresponde al enemigo
- Sino, devolver falso.
Código fuente de la función
- Code: Seleccionar todo
- bool CAjedrezView::MoverAlfilHacia(int x, int y)
- {
- int dify = y - m_celdaSel.y;
- int difx = x - m_celdaSel.x;
- if(abs(difx) == abs(dify))
- {
- if(EsViaLibre(x,y) && m_pCeldas[m_celdaSel.y ][m_celdaSel.x] != m_pCeldas[y][x])
- {
- return true;
- }
- }
- return false;
- }
Movida de la torre
- Code: Seleccionar todo
- bool CAjedrezView::MoverTorreHacia(int x, int y)
- {
- int dify = y - m_celdaSel.y;
- int difx = x - m_celdaSel.x;
- if((difx == 0) || (dify == 0) )
- {
- if(EsViaLibre(x,y) && m_pCeldas[m_celdaSel.y ][m_celdaSel.x] != m_pCeldas[y][x])
- {
- return true;
- }
- }
- return false;
- }
Movida de la reina
- Code: Seleccionar todo
- bool CAjedrezView::MoverReinaHacia(int x, int y)
- {
- return MoverAlfilHacia(x,y) || MoverTorreHacia(x,y);
- }
Movida del rey
- Code: Seleccionar todo
- bool CAjedrezView::MoverReyHacia(int x, int y)
- {
- int dify = y - m_celdaSel.y;
- int difx = x - m_celdaSel.x;
- if((abs(difx) == 1) && (abs(dify) == 1) )
- {
- if(m_pCeldas[m_celdaSel.y ][m_celdaSel.x] != m_pCeldas[y][x])
- {
- return true;
- }
- }
- return false;
- }
Movida del caballo
- Obtenemos la diferencia entre las coordenadas de origen y destino.
- Si la diferencia entre las coordenadas debe ser 2 y 1 para cada caso
- Si la celda de destino es del oponente o esta en blanco
- Devolver true indicando que se puede realizar la movida
- Si la celda de destino es del oponente o esta en blanco
- Sino, retornar false.
- Code: Seleccionar todo
- bool CAjedrezView::MoverCaballoHacia(int x, int y)
- {
- int dify = y - m_celdaSel.y;
- int difx = x - m_celdaSel.x;
- if(((abs(difx) == 2) && (abs(dify) == 1))||((abs(difx) == 1) && (abs(dify) == 2)))
- {
- if(m_pCeldas[m_celdaSel.y ][m_celdaSel.x] != m_pCeldas[y][x])
- {
- return true;
- }
- }
- return false;
- }
Es todo!
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 un programa que escribí en Visual C++ en un curso de Investigación Operativa.Este artículo muestra como implementar hilos/hebras con la clase CWinThread en forma sencilla. El ejemplo pone a prueba la rapidez de tres métodos de ordenamiento ejecutandolos simultáneamente.Puedes usar este control en tus aplicaciones Visual C++ para visualizar imágenes dentro de un formulario MFC o también en entornos derivados de CWnd.¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:

foro de Visual C++ »

