* 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:
parent
891f56d88d
commit
7f59b11975
5 changed files with 46 additions and 17 deletions
|
@ -3,8 +3,16 @@
|
||||||
#include <SFML/Graphics/Color.hpp>
|
#include <SFML/Graphics/Color.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
struct Plateau;
|
||||||
|
|
||||||
class Piece {
|
class Piece {
|
||||||
friend std::ostream &operator<<(std::ostream &, const Piece &);
|
friend std::ostream &operator<<(std::ostream &, const Piece &);
|
||||||
|
friend Plateau;
|
||||||
|
|
||||||
|
bool selected;
|
||||||
|
|
||||||
|
// Change l'état de la sélection
|
||||||
|
void changeSelection();
|
||||||
|
|
||||||
protected:
|
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
|
||||||
|
@ -21,9 +29,9 @@ public:
|
||||||
Piece(const std::string categorie); // constructor
|
Piece(const std::string categorie); // constructor
|
||||||
virtual ~Piece(); // destructor
|
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
|
// Renvoie la couleur de la pièce pour l'affichage
|
||||||
virtual sf::Color getScreenColor() const = 0;
|
virtual sf::Color getScreenColor() const = 0;
|
||||||
|
|
||||||
|
// Renvoie si la pièce est selectionnée
|
||||||
|
bool isSelectionnee() const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,9 @@ protected:
|
||||||
// Taille du plateau
|
// Taille du plateau
|
||||||
int taille;
|
int taille;
|
||||||
|
|
||||||
|
// Piece actuellement selectionnée
|
||||||
|
Piece *selection;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Plateau(const int taille); // constructor
|
Plateau(const int taille); // constructor
|
||||||
virtual ~Plateau(); // destructor
|
virtual ~Plateau(); // destructor
|
||||||
|
@ -25,14 +28,18 @@ public:
|
||||||
void afficherPlateau(std::ostream &, const bool debug = false) const;
|
void afficherPlateau(std::ostream &, const bool debug = false) const;
|
||||||
|
|
||||||
// Fonction pour modifier le plateau
|
// 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;
|
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;
|
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;
|
std::pair<int, int> trouveCoordonnees(const int x, const int y) const;
|
||||||
|
|
||||||
// Renvoie la taille du plateau
|
// Renvoie la taille du plateau
|
||||||
int getTaille() const;
|
int getTaille() const;
|
||||||
|
|
||||||
|
// Change la pièce selectionnée
|
||||||
|
void modifierSelection(const int x, const int y);
|
||||||
};
|
};
|
||||||
|
|
|
@ -107,6 +107,7 @@ void Butin::event(const int x, const int y) {
|
||||||
}
|
}
|
||||||
case EnJeu: {
|
case EnJeu: {
|
||||||
// TODO
|
// TODO
|
||||||
|
plateau.modifierSelection(posCurseur.first, posCurseur.second);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Fini: {
|
case Fini: {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "../includes/Piece.hpp"
|
#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";
|
std::cout << "pièce - " << cat << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,15 +11,10 @@ std::ostream &operator<<(std::ostream &out, const Piece &data) {
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Piece::moveTo(const int destX, const int destY) {
|
void Piece::changeSelection() {
|
||||||
if (destX < 0 || destY < 0) {
|
selected = !selected;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
bool Piece::isSelectionnee() const {
|
||||||
// Note: On vérifie pas si la pièce sort du plateau par rapport à la taille
|
return selected;
|
||||||
// du plateau (on a pas l'info ici?)
|
|
||||||
|
|
||||||
x = destX;
|
|
||||||
y = destY;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ Plateau::Plateau(const int t) : plateau(new Piece **[t]), taille(t) {
|
||||||
plateau[i][j] = nullptr;
|
plateau[i][j] = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
selection = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Plateau::~Plateau() {
|
Plateau::~Plateau() {
|
||||||
|
@ -68,6 +69,9 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
|
||||||
// Dessine la pièce
|
// Dessine la pièce
|
||||||
Piece *p = plateau[i][j];
|
Piece *p = plateau[i][j];
|
||||||
if (p != nullptr) {
|
if (p != nullptr) {
|
||||||
|
if (p->isSelectionnee()) {
|
||||||
|
piece.setOutlineColor(sf::Color::Green);
|
||||||
|
}
|
||||||
piece.setFillColor(p->getScreenColor());
|
piece.setFillColor(p->getScreenColor());
|
||||||
Ecran::window.draw(piece);
|
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 {
|
int Plateau::getTaille() const {
|
||||||
return taille;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue