BOOKS i'm reading
 |
/*
* Module ID: lab2ches.h
* Titre : Module Secondaire du Lab 2 du cours ELE-440
*
* Auteur : Olivier Langlois <olivier@olivierlanglois.net>
* Date : 4 Fevrier 1998
*
*/
#ifndef _LAB2CHES_H_
#define _LAB2CHES_H_
#include "collect/colclass.h"
#include "chess.h"
class Lab2ChessCase : public ChessCase
{
public:
unsigned seq;
int originCounter;
/*
* Ce sont des copies de cases qui sont inserees dans la queue afin d'eviter
* une double liberation de memoire pour le meme objet a la destruction
* du ChessBoard.
*
* possibleNextMoves est un PQ<Lab2ChessCase> mais une declaration
* directe aurrait causee un probleme d'interdependance. C'est pourquoi
* 'Collection *' est plutot utilise.
*/
oliCollection *possibleNextMoves;
/*
* Le parametre allocatePQ est utilise pour indiquer au constructeur
* si il doit ou non initialiser possibleNextMoves.
* Il est necessaire de ne pas initialiser possibleNextMoves pour la
* construction de sentinel car l'initialisation de possibleNextMoves
* prend comme parametre sentinel.
*/
Lab2ChessCase(
int oc = 0,
unsigned s = 0
);
Lab2ChessCase( const Lab2ChessCase & );
~Lab2ChessCase() { delete possibleNextMoves; }
virtual void init( void );
// Operateurs necessaire pour le bon fonctionnement de PQ<Lab2ChessCase>
// Voir PQ.h pour plus de detail.
// Note : Plus originCounter est petit, plus la priorite est grande.
void operator =(const Lab2ChessCase&);
int operator==(const Lab2ChessCase&) const;
int operator!=(const Lab2ChessCase&) const;
int operator <(const Lab2ChessCase&) const;
int operator >(const Lab2ChessCase&) const;
int operator<=(const Lab2ChessCase&) const;
int operator>=(const Lab2ChessCase&) const;
virtual void print( ostream &os )
{ os << originCounter << " " << seq << "\t"; }
/******************************************************************************
*
* Nom : addCase
*
* Utilite : Ajoute la case a la position specifie dans la Priority Queue.
*
* Parametres:
* x,y (int) Position de la case a ajouter.
*
* Valeur de retour: Aucune.
*
****************************************************************************/
void addCase( int x, int y );
};
class Lab2Column : public Column
{
public:
Lab2Column();
};
class Lab2ChessBoard : public ChessBoard
{
public:
/*
* Il est important d'appeler initColumns() apres l'appel du constructeur
* Cela ne peut pas etre fait a l'interieur du constructeur car l'appel
* de fonctions virtuelles a l'interieur de constructeur est deconseille.
*/
Lab2ChessBoard();
~Lab2ChessBoard();
#ifdef __GNUG__
static Lab2ChessCase *sentinel;
#endif
};
/*
* Lab2Knight: Knight specialise pour resoudre le probleme P3
*/
class Lab2Knight : public Knight
{
public:
Lab2Knight( ChessCase *initialPos = NULL )
: Knight(initialPos) {}
/******************************************************************************
*
* Nom : visitBoard
*
* Utilite : Calcul le nombre d'origines possibles pour chaque case avec le
* chevalier.
*
* Parametres:
* board (ChessBoard &) Jeu a visite.
*
* Valeur de retour: Aucune.
*
****************************************************************************/
virtual void visitBoard( ChessBoard &board );
/******************************************************************************
*
* Nom : visitCase
*
* Utilite : Calcul les destinations possibles pour le
* chevalier.
*
* Parametres:
* c (ChessCase &) Case d'origine.
*
* Valeur de retour: Aucune.
*
****************************************************************************/
virtual void visitCase( ChessCase &c );
};
/******************************************************************************
*
* Nom : getNext
*
* Utilite : Retourne la prochaine case a essayer.
* (Sert aussi a decoupler PQ du module lab2)
*
* Parametres:
* ptrCase (Lab2ChessCase *) Case occupee.
*
* Valeur de retour: (Lab2ChessCase *) Case suivante.
*
****************************************************************************/
Lab2ChessCase *getNext( Lab2ChessCase *ptrCase );
#endif /* _LAB2CHES_H_ */
|