ajout des fonctions pour récuperer la taille du plateau, pour récupérer la position du curseur (on vérifie que on déborde pas)

jme dis que pour savoir ou on en est on peut avoir un enum d'étapes et on avance jusqua la fin du jeu dans les etapes du jeu
This commit is contained in:
Mylloon 2023-12-28 18:26:52 +01:00
parent 48bd1322cf
commit cb6f21938b
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
9 changed files with 74 additions and 19 deletions

View file

@ -12,8 +12,15 @@ class Butin : private Jeu {
// Joueurs // Joueurs
Joueur &joueur2; Joueur &joueur2;
bool j1PremierePiece = false; // Etape du jeu, pour savoir où on en est
bool j2PremierePiece = false; enum Etape {
ChoixJ1 = 0,
ChoixJ2,
EnJeu,
Fini,
};
enum Etape etape;
public: public:
Butin(Joueur &joueur1, Joueur &joueur2); // constructor Butin(Joueur &joueur1, Joueur &joueur2); // constructor
@ -27,4 +34,7 @@ public:
// Fonction d'évènement // Fonction d'évènement
void event(const int x, const int y) override; void event(const int x, const int y) override;
// Position curseur
std::pair<int, int> getPosition() const override;
}; };

View file

@ -25,6 +25,9 @@ public:
// Fonction d'évènement // Fonction d'évènement
void event(const int x, const int y) override; void event(const int x, const int y) override;
// Position curseur
std::pair<int, int> getPosition() const override;
// Vérifie si une prise est possible pour une pièce donnée // Vérifie si une prise est possible pour une pièce donnée
bool prisePossible(Joueur &joueur) const; bool prisePossible(Joueur &joueur) const;
}; };

View file

@ -2,15 +2,7 @@
#include "Joueur.hpp" #include "Joueur.hpp"
class Jeu { struct Jeu {
friend std::ostream &operator<<(std::ostream &, const Jeu &);
protected:
// Joueurs, au moins un joueur
Joueur &joueur1;
Joueur &joueurCourant;
public:
Jeu(Joueur &j1); // constructor Jeu(Joueur &j1); // constructor
virtual ~Jeu(); // destructor virtual ~Jeu(); // destructor
@ -22,4 +14,15 @@ public:
// Fonction qui fait quelque-chose lors d'un clic gauche // Fonction qui fait quelque-chose lors d'un clic gauche
virtual void event(const int xPos, const int yPos) = 0; virtual void event(const int xPos, const int yPos) = 0;
protected:
// Joueurs, au moins un joueur
Joueur &joueur1;
Joueur &joueurCourant;
// Position du dernier clic du curseur sur l'écran
std::pair<int, int> posCurseur;
// Récupère la position du curseur
virtual std::pair<int, int> getPosition() const = 0;
}; };

View file

@ -29,4 +29,7 @@ public:
// 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
int getTaille() const;
}; };

View file

@ -31,6 +31,9 @@ public:
// Fonction d'évènement // Fonction d'évènement
void event(const int x, const int y) override; void event(const int x, const int y) override;
// Position curseur
std::pair<int, int> getPosition() const override;
// Fonction d'initialisation du jeu // Fonction d'initialisation du jeu
void choixAnimal(const PieceSafari::Categorie animal) const; void choixAnimal(const PieceSafari::Categorie animal) const;
}; };

View file

@ -19,25 +19,36 @@ void Butin::init() {
// Demander à J1 de retirer une pièce jaune // Demander à J1 de retirer une pièce jaune
Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant dessus."); Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant dessus.");
if (!j1PremierePiece) { etape = ChoixJ1;
posCurseur = std::make_pair(-1, -1);
}
void Butin::play() {
plateau.afficherPlateau(std::cout);
if (etape <= Etape::ChoixJ1) {
// Condition du clic // Condition du clic
return; return;
} }
// Demander à J2 de retirer une pièce jaune // Demander à J2 de retirer une pièce jaune
Ecran::printMessage("Joueur 2, retirez une piece jaune en cliquant dessus."); Ecran::printMessage("Joueur 2, retirez une piece jaune en cliquant dessus.");
if (!j2PremierePiece) { if (etape <= Etape::ChoixJ2) {
// Condition du clic // Condition du clic
return; return;
} }
} }
void Butin::play() { void Butin::event(const int x, const int y) {
plateau.afficherPlateau(std::cout); posCurseur = plateau.trouveCoordonnees(x, y);
std::cout << "Clic souris @ (" << x << ", " << y << ") aka ("
<< posCurseur.first << ", " << posCurseur.second << ")\n";
} }
void Butin::event(const int x, const int y) { std::pair<int, int> Butin::getPosition() const {
auto pos = plateau.trouveCoordonnees(x, y); if (posCurseur.first > plateau.getTaille() - 1) {
std::cout << "Clic souris @ (" << x << ", " << y << ") aka (" << pos.first std::cerr << "Position inconnu du plateau.\n";
<< ", " << pos.second << ")\n"; exit(EXIT_FAILURE);
}
return posCurseur;
} }

View file

@ -35,6 +35,15 @@ void Dames::play() {
void Dames::event(const int, const int) {} void Dames::event(const int, const int) {}
std::pair<int, int> Dames::getPosition() const {
if (posCurseur.first > plateau.getTaille() - 1) {
std::cerr << "Position inconnu du plateau.\n";
exit(EXIT_FAILURE);
}
return posCurseur;
}
// TODO: A continuer // TODO: A continuer
// Pas très sûre de comment procéder pour cette fonction : il faudrait vérifier // 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 cases en diagnonale des pièces observées mais est-ce qu'il y a besoin que

View file

@ -79,3 +79,7 @@ std::pair<int, int> Plateau::trouveCoordonnees(const int x, const int y) const {
int yPlateau = static_cast<int>(y / tailleCellule); int yPlateau = static_cast<int>(y / tailleCellule);
return std::make_pair(xPlateau, yPlateau); return std::make_pair(xPlateau, yPlateau);
} }
int Plateau::getTaille() const {
return taille;
}

View file

@ -33,6 +33,15 @@ void Safari::play() {
void Safari::event(const int, const int) {} void Safari::event(const int, const int) {}
std::pair<int, int> Safari::getPosition() const {
if (posCurseur.first > plateau.getTaille() - 1) {
std::cerr << "Position inconnu du plateau.\n";
exit(EXIT_FAILURE);
}
return posCurseur;
}
void Safari::choixAnimal(const PieceSafari::Categorie animal) const { void Safari::choixAnimal(const PieceSafari::Categorie animal) const {
if (animal == PieceSafari::Barriere) { if (animal == PieceSafari::Barriere) {
throw std::invalid_argument("Animal non valide"); throw std::invalid_argument("Animal non valide");