(ré-)ajout de la fonction de déplacement et fix d'un ptit bug lors de la sélectionnn

This commit is contained in:
Mylloon 2023-12-29 02:09:01 +01:00
parent fea574195e
commit db5d3c2762
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
4 changed files with 43 additions and 6 deletions

View file

@ -21,16 +21,16 @@ protected:
// Couleur de la pièce ou type d'animal pour Safari par ex // Couleur de la pièce ou type d'animal pour Safari par ex
std::string categorie; std::string categorie;
// Indices où sont placés les pièces sur le plateau (quand elles le sont) // Indices où sont placés les pièces sur le plateau
// (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
int x; int x;
int y; int y;
public: public:
Piece(const std::string categorie); // constructor Piece(const std::string categorie, const int x, const int y); // constructor
virtual ~Piece(); // destructor 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 // Renvoie la couleur de la pièce pour l'affichage
virtual sf::Color getScreenColor() const = 0; virtual sf::Color getScreenColor() const = 0;

View file

@ -31,6 +31,9 @@ public:
// Si piece = nullptr alors on retire la pièce du plateau // Si piece = nullptr alors on retire la pièce du plateau
void modifierPlateau(const int x, const int y, Piece *piece) const; 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 // Renvoie une pièce à une position donnnée
Piece *getPiece(const int x, const int y) const; Piece *getPiece(const int x, const int y) const;

View file

@ -11,6 +11,18 @@ std::ostream &operator<<(std::ostream &out, const Piece &data) {
return out; 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() { void Piece::changeSelection() {
selected = !selected; selected = !selected;
} }

View file

@ -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 // Si la sélection à changer alors changer l'état de la nouvelle pièce
p->changeSelection(); p->changeSelection();
selection = p; 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);
}