/*
$Id$
Copyright (C) 2006-2007 by David Cotton
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package fr.free.jchecs.core;
/**
* Interface mise à disposition par les classes permettant de générer des mouvements.
*
* @author David Cotton
*/
public interface MoveGenerator extends Board
{
/**
* Renvoi une nouvelle instance, initialisée à partir d'un état quelconque.
*
* @param pEtat Etat de départ.
* @return Copie de l'état.
*/
MoveGenerator derive(final Board pEtat);
/**
* Renvoi une nouvelle instance décrivant l'état du jeu après application d'un mouvement.
*
* @param pMouvement Description de mouvement.
* @param pSuivant Drapeau positionné si l'on souhaite que le trait soit modifié.
* @return Instance dérivée.
*/
MoveGenerator derive(final Move pMouvement, final boolean pSuivant);
/**
* Renvoi toutes les cases cibles des mouvements possibles (y compris ceux mettant le roi en
* échec) pour la pièce contenue par une case.
*
* @param pOrigine Case à l'origine du mouvement.
* @return Liste des cases cibles (y compris celles conduisant à un échec).
*/
Square [] getAllTargets(final Square pOrigine);
/**
* Renvoi toutes les cases cibles possibles d'un mouvement de type "fou" d'une certaine couleur (y
* compris ceux mettant le roi en échec) à partir d'une case.
*
* @param pOrigine Case à l'origine du mouvement.
* @param pBlanc Positionné à vrai si la recherche concerne les blancs.
* @return Liste des cases cibles (y compris celles conduisant à un échec).
*/
Square [] getBishopTargets(final Square pOrigine, final boolean pBlanc);
/**
* Renvoi la case contenant le roi d'une couleur.
*
* @param pCouleur Mis à "true" si l'on recherche le roi blanc, à "false" sinon.
* @return Case contenant le roi.
*/
Square getKingSquare(final boolean pCouleur);
/**
* Renvoi la liste des cases pouvant être atteintes par un mouvement de type roi.
*
* @param pOrigine Case à l'origine du mouvement.
* @param pBlanc A vrai pour indiquer une recherche sur les blancs.
* @return Liste des cases cibles (y compris celles conduisant à un échec).
*/
Square [] getKingTargets(final Square pOrigine, final boolean pBlanc);
/**
* Renvoi la liste des cases pouvant être atteintes par un mouvement de type cavalier.
*
* @param pOrigine Case à l'origine du mouvement.
* @param pBlanc A vrai pour indiquer une recherche sur les blancs.
* @return Liste des cases cibles (y compris celles conduisant à un échec).
*/
Square [] getKnightTargets(final Square pOrigine, final boolean pBlanc);
/**
* Renvoi la liste des cases pouvant être atteintes par un mouvement de type pion.
*
* @param pOrigine Case à l'origine du mouvement.
* @param pBlanc A vrai pour indiquer une recherche sur les blancs.
* @return Liste des cases cibles (y compris celles conduisant à un échec).
*/
Square [] getPawnTargets(final Square pOrigine, final boolean pBlanc);
/**
* Renvoi toutes les cases cibles possibles d'un mouvement de type "dame" d'une certaine couleur
* (y compris ceux mettant le roi en échec) à partir d'une case.
*
* @param pOrigine Case à l'origine du mouvement.
* @param pBlanc Mis à vrai pour rechercher pour les blancs.
* @return Liste des cases cibles (y compris celles conduisant à un échec).
*/
Square [] getQueenTargets(final Square pOrigine, final boolean pBlanc);
/**
* Renvoi toutes les cases cibles possibles d'un mouvement de type "tour" d'une certaine couleur
* (y compris ceux mettant le roi en échec) à partir d'une case.
*
* @param pOrigine Case à l'origine du mouvement.
* @param pBlanc Mis à vrai pour rechercher pour les blancs.
* @return Liste des cases cibles (y compris celles conduisant à un échec).
*/
Square [] getRookTargets(final Square pOrigine, final boolean pBlanc);
/**
* Renvoi tous les mouvements valides pour une couleur.
*
* @param pTrait Positionné à "true" pour indiquer une recherche pour les blancs.
* @return Liste des mouvements valides.
*/
Move [] getValidMoves(final boolean pTrait);
/**
* Renvoi toutes les cases cibles des mouvements valides à partir d'une case.
*
* @param pOrigine Case à l'origine du mouvement.
* @return Liste des cases cibles.
*/
Square [] getValidTargets(final Square pOrigine);
/**
* Indique si une case est attaquée par une couleur.
*
* @param pCible Case cible.
* @param pCouleur Positionné à "true" pour tester l'attaque par les blancs.
* @return Vrai si la case est attaquée.
*/
boolean isAttacked(final Square pCible, final boolean pCouleur);
/**
* Indique si le roi d'une couleur a roqué.
*
* @param pBlanc Positionné à "true" pour obtenir l'état des blancs.
* @return A "vrai" si le roi correspondant à roqué.
*/
boolean isCastled(final boolean pBlanc);
/**
* Indique si le roi d'une couleur est en échec.
*
* @param pCouleur Positionné à "true" pour tester l'échec sur les blancs, à "false" sinon.
* @return Vrai si le roi est en échec.
*/
boolean isInCheck(final boolean pCouleur);
}