diff --git a/includes/Piece.hpp b/includes/Piece.hpp index 2a14e38..097c6b3 100644 --- a/includes/Piece.hpp +++ b/includes/Piece.hpp @@ -21,16 +21,16 @@ protected: // Couleur de la pièce ou type d'animal pour Safari par ex std::string categorie; - // Indices où sont placés les pièces sur le plateau (quand elles le sont) - // (est-ce que c'est redondant ?) - // ---> Je crois que vu qu'on a un plateau qui est une liste 2D on en a pas - // besoin + // Indices où sont placés les pièces sur le plateau int x; int y; public: - Piece(const std::string categorie); // constructor - virtual ~Piece(); // destructor + Piece(const std::string categorie, const int x, const int y); // constructor + virtual ~Piece(); // destructor + + // Fonction de déplacement + void moveTo(const int destX, const int destY); // Renvoie la couleur de la pièce pour l'affichage virtual sf::Color getScreenColor() const = 0; diff --git a/includes/Plateau.hpp b/includes/Plateau.hpp index 68cf2e7..6b57d54 100644 --- a/includes/Plateau.hpp +++ b/includes/Plateau.hpp @@ -31,6 +31,9 @@ public: // Si piece = nullptr alors on retire la pièce du plateau void modifierPlateau(const int x, const int y, Piece *piece) const; + // Fonction pour bouger une pièce + void moveSelection(const int x, const int y); + // Renvoie une pièce à une position donnnée Piece *getPiece(const int x, const int y) const; diff --git a/src/Piece.cpp b/src/Piece.cpp index 7fd42c0..6e8655b 100644 --- a/src/Piece.cpp +++ b/src/Piece.cpp @@ -11,6 +11,18 @@ std::ostream &operator<<(std::ostream &out, const Piece &data) { return out; } +void Piece::moveTo(const int destX, const int destY) { + if (destX < 0 || destY < 0) { + return; + } + + // Note: On vérifie pas si la pièce sort du plateau par rapport à la taille + // du plateau (on a pas l'info ici?) + + x = destX; + y = destY; +} + void Piece::changeSelection() { selected = !selected; } diff --git a/src/Plateau.cpp b/src/Plateau.cpp index f649738..1363ba3 100644 --- a/src/Plateau.cpp +++ b/src/Plateau.cpp @@ -132,5 +132,27 @@ void Plateau::modifierSelection(const int x, const int y) { // Si la sélection à changer alors changer l'état de la nouvelle pièce p->changeSelection(); selection = p; + } else { + // Si c'était la même alors on ne sélectionne plus rien + selection = nullptr; } } + +void Plateau::moveSelection(const int x, const int y) { + if (selection == nullptr) { + // Ne fais rien si on a rien a bouger + return; + } + + // Retire la pièce de là où elle est pour le plateau + plateau[selection->x][selection->y] = nullptr; + + // Déplace la pièce sur le plateau + modifierPlateau(x, y, selection); + + // Met à jour les coordonnées de la pièce + selection->moveTo(x, y); + + // Déselectionne la pièce + modifierSelection(x, y); +}