modifs Dames

This commit is contained in:
Emma 2024-01-08 16:01:09 +01:00
parent ebf3a4fea6
commit 042f02ef81
4 changed files with 84 additions and 2 deletions

View file

@ -3,6 +3,8 @@
#include "../Jeu.hpp"
#include "PlateauDames.hpp"
struct PieceDames;
class Dames : private Jeu {
friend std::ostream &operator<<(std::ostream &, const Dames &);
@ -10,7 +12,27 @@ class Dames : private Jeu {
PlateauDames plateau;
// Joueurs
const Joueur &joueur2;
Joueur &joueur2;
// Etape du jeu, pour savoir où on en est
enum Etape {
ChoixJ1 = 0,
ChoixJ2,
EnJeu,
Fini,
};
// Où l'on se trouve dans le jeu, à quelle étape nous sommes
enum Etape etape;
// Permet de transformer une Piece en PieceDames
const PieceDames *getPiece(const int x, const int y) const;
// Message à chaque tour du joueur
const std::string msgTonTour() const;
// Change de joueur courant
void changerJoueurCourant();
public:
Dames(Joueur &joueur1, Joueur &joueur2); // constructor

View file

@ -6,6 +6,9 @@
class PlateauDames : public Plateau {
Joueur *j1, *j2;
// Vérifie que le déplacement est valide
bool deplacementValide(const int destX, const int destY) const;
public:
PlateauDames(Joueur &joueur1, Joueur &joueur2);
virtual ~PlateauDames();

View file

@ -24,11 +24,47 @@ std::ostream &operator<<(std::ostream &out, const Dames &data) {
return out;
}
const PieceDames *Dames::getPiece(const int x, const int y) const {
return dynamic_cast<const PieceDames *>(plateau.getPiece(x, y));
}
const std::string Dames::msgTonTour() const {
return "Joueur " + std::to_string(joueurCourant->getNum()) +
", c'est votre tour. ";
}
void Dames::play() {
plateau.afficherPlateau(std::cout);
}
void Dames::event(const int, const int) {}
void Dames::event(const int x, const int y) {
// Update position
posCurseur = plateau.trouveCoordonnees(x, y);
posCurseur = getPosition();
if (posCurseur.first == -1) {
// Mauvaise position
return;
}
// Texte de debug
std::cout << "Clic souris @ (" << x << ", " << y << ") aka ("
<< posCurseur.first << ", " << posCurseur.second << ")\n";
switch(etape){
case ChoixJ1: {
}
case ChoixJ2: {
}
case EnJeu: {
const Piece *p = getPiece(posCurseur.first, posCurseur.second);
}
case Fini: {
}
}
}
const Position Dames::getPosition() const {
if (posCurseur.second > plateau.getTaille() - 1) {
@ -39,11 +75,20 @@ const Position Dames::getPosition() const {
return posCurseur;
}
void Dames::changerJoueurCourant() {
if (joueurCourant->getNum() == joueur1.getNum()) {
joueurCourant = &joueur2;
} else {
joueurCourant = &joueur1;
}
}
// TODO: A continuer
// Pas très sûre de comment procéder pour cette fonction : il faudrait vérifier
// les cases en diagnonale des pièces observées mais est-ce qu'il y a besoin que
// les pièces aient des attributs pour leur position (comme proposé dans Piece)
// ?
// UPDATE : utiliser deplacementValide ?
bool Dames::prisePossible(Joueur &joueur) const {
const std::vector<Piece *> &pieces = joueur.getPieces();
int x = 1;

View file

@ -23,3 +23,15 @@ PlateauDames::PlateauDames(Joueur &joueur1, Joueur &joueur2)
}
PlateauDames::~PlateauDames() {}
// Peut-etre utiliser cette fonction pour prisePossible ?
bool PlateauDames::deplacementValide(const int x, const int y) const {
if (!selection) {
return false;
}
Position posInitiale = selection->getPos();
}