* on retire moveTo vu que c'est gérer par le plateau, la pièce en tant que telle a pas vraiment conscience de sa position vu que tout est gérer par le plateau

* rajout de la sélection
This commit is contained in:
Mylloon 2023-12-29 01:33:35 +01:00
parent 891f56d88d
commit 7f59b11975
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
5 changed files with 46 additions and 17 deletions

View file

@ -3,8 +3,16 @@
#include <SFML/Graphics/Color.hpp>
#include <iostream>
struct Plateau;
class Piece {
friend std::ostream &operator<<(std::ostream &, const Piece &);
friend Plateau;
bool selected;
// Change l'état de la sélection
void changeSelection();
protected:
// Couleur de la pièce ou type d'animal pour Safari par ex
@ -21,9 +29,9 @@ public:
Piece(const std::string categorie); // constructor
virtual ~Piece(); // destructor
// Fonction de déplacement
bool moveTo(const int destX, const int destY);
// Renvoie la couleur de la pièce pour l'affichage
virtual sf::Color getScreenColor() const = 0;
// Renvoie si la pièce est selectionnée
bool isSelectionnee() const;
};

View file

@ -12,6 +12,9 @@ protected:
// Taille du plateau
int taille;
// Piece actuellement selectionnée
Piece *selection;
public:
Plateau(const int taille); // constructor
virtual ~Plateau(); // destructor
@ -25,14 +28,18 @@ public:
void afficherPlateau(std::ostream &, const bool debug = false) const;
// Fonction pour modifier le plateau
// Si piece = nullptr alors on retire la pièce du plateau
void modifierPlateau(const int x, const int y, Piece *piece) const;
// Renvoie une pièce à une position
// Renvoie une pièce à une position donnnée
Piece *getPiece(const int x, const int y) const;
// Prend des coordonnées écran et renvoie des coordonnées jeu
// Prend des coordonnées-écran et renvoie des coordonnées-jeu
std::pair<int, int> trouveCoordonnees(const int x, const int y) const;
// Renvoie la taille du plateau
int getTaille() const;
// Change la pièce selectionnée
void modifierSelection(const int x, const int y);
};

View file

@ -107,6 +107,7 @@ void Butin::event(const int x, const int y) {
}
case EnJeu: {
// TODO
plateau.modifierSelection(posCurseur.first, posCurseur.second);
break;
}
case Fini: {

View file

@ -1,6 +1,6 @@
#include "../includes/Piece.hpp"
Piece::Piece(const std::string cat) : categorie(cat) {
Piece::Piece(const std::string cat) : selected(false), categorie(cat) {
std::cout << "pièce - " << cat << "\n";
}
@ -11,15 +11,10 @@ std::ostream &operator<<(std::ostream &out, const Piece &data) {
return out;
}
bool Piece::moveTo(const int destX, const int destY) {
if (destX < 0 || destY < 0) {
return false;
void Piece::changeSelection() {
selected = !selected;
}
// 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;
return true;
bool Piece::isSelectionnee() const {
return selected;
}

View file

@ -9,6 +9,7 @@ Plateau::Plateau(const int t) : plateau(new Piece **[t]), taille(t) {
plateau[i][j] = nullptr;
}
}
selection = nullptr;
}
Plateau::~Plateau() {
@ -68,6 +69,9 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
// Dessine la pièce
Piece *p = plateau[i][j];
if (p != nullptr) {
if (p->isSelectionnee()) {
piece.setOutlineColor(sf::Color::Green);
}
piece.setFillColor(p->getScreenColor());
Ecran::window.draw(piece);
}
@ -111,3 +115,17 @@ std::pair<int, int> Plateau::trouveCoordonnees(const int x, const int y) const {
int Plateau::getTaille() const {
return taille;
}
void Plateau::modifierSelection(const int x, const int y) {
if (selection) {
// Déselectionne l'ancienne sélection
selection->changeSelection();
}
Piece *p = getPiece(x, y);
if (p != selection) {
// Si la sélection à changer alors changer l'état de la nouvelle pièce
p->changeSelection();
selection = p;
}
}