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:
parent
48bd1322cf
commit
cb6f21938b
9 changed files with 74 additions and 19 deletions
|
@ -12,8 +12,15 @@ class Butin : private Jeu {
|
|||
// Joueurs
|
||||
Joueur &joueur2;
|
||||
|
||||
bool j1PremierePiece = false;
|
||||
bool j2PremierePiece = false;
|
||||
// Etape du jeu, pour savoir où on en est
|
||||
enum Etape {
|
||||
ChoixJ1 = 0,
|
||||
ChoixJ2,
|
||||
EnJeu,
|
||||
Fini,
|
||||
};
|
||||
|
||||
enum Etape etape;
|
||||
|
||||
public:
|
||||
Butin(Joueur &joueur1, Joueur &joueur2); // constructor
|
||||
|
@ -27,4 +34,7 @@ public:
|
|||
|
||||
// Fonction d'évènement
|
||||
void event(const int x, const int y) override;
|
||||
|
||||
// Position curseur
|
||||
std::pair<int, int> getPosition() const override;
|
||||
};
|
||||
|
|
|
@ -25,6 +25,9 @@ public:
|
|||
// Fonction d'évènement
|
||||
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
|
||||
bool prisePossible(Joueur &joueur) const;
|
||||
};
|
||||
|
|
|
@ -2,15 +2,7 @@
|
|||
|
||||
#include "Joueur.hpp"
|
||||
|
||||
class Jeu {
|
||||
friend std::ostream &operator<<(std::ostream &, const Jeu &);
|
||||
|
||||
protected:
|
||||
// Joueurs, au moins un joueur
|
||||
Joueur &joueur1;
|
||||
Joueur &joueurCourant;
|
||||
|
||||
public:
|
||||
struct Jeu {
|
||||
Jeu(Joueur &j1); // constructor
|
||||
virtual ~Jeu(); // destructor
|
||||
|
||||
|
@ -22,4 +14,15 @@ public:
|
|||
|
||||
// Fonction qui fait quelque-chose lors d'un clic gauche
|
||||
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;
|
||||
};
|
||||
|
|
|
@ -29,4 +29,7 @@ public:
|
|||
|
||||
// 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;
|
||||
};
|
||||
|
|
|
@ -31,6 +31,9 @@ public:
|
|||
// Fonction d'évènement
|
||||
void event(const int x, const int y) override;
|
||||
|
||||
// Position curseur
|
||||
std::pair<int, int> getPosition() const override;
|
||||
|
||||
// Fonction d'initialisation du jeu
|
||||
void choixAnimal(const PieceSafari::Categorie animal) const;
|
||||
};
|
||||
|
|
|
@ -19,25 +19,36 @@ void Butin::init() {
|
|||
|
||||
// Demander à J1 de retirer une pièce jaune
|
||||
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
|
||||
return;
|
||||
}
|
||||
|
||||
// Demander à J2 de retirer une pièce jaune
|
||||
Ecran::printMessage("Joueur 2, retirez une piece jaune en cliquant dessus.");
|
||||
if (!j2PremierePiece) {
|
||||
if (etape <= Etape::ChoixJ2) {
|
||||
// Condition du clic
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void Butin::play() {
|
||||
plateau.afficherPlateau(std::cout);
|
||||
void Butin::event(const int x, const int y) {
|
||||
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) {
|
||||
auto pos = plateau.trouveCoordonnees(x, y);
|
||||
std::cout << "Clic souris @ (" << x << ", " << y << ") aka (" << pos.first
|
||||
<< ", " << pos.second << ")\n";
|
||||
std::pair<int, int> Butin::getPosition() const {
|
||||
if (posCurseur.first > plateau.getTaille() - 1) {
|
||||
std::cerr << "Position inconnu du plateau.\n";
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
return posCurseur;
|
||||
}
|
||||
|
|
|
@ -35,6 +35,15 @@ void Dames::play() {
|
|||
|
||||
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
|
||||
// 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
|
||||
|
|
|
@ -79,3 +79,7 @@ std::pair<int, int> Plateau::trouveCoordonnees(const int x, const int y) const {
|
|||
int yPlateau = static_cast<int>(y / tailleCellule);
|
||||
return std::make_pair(xPlateau, yPlateau);
|
||||
}
|
||||
|
||||
int Plateau::getTaille() const {
|
||||
return taille;
|
||||
}
|
||||
|
|
|
@ -33,6 +33,15 @@ void Safari::play() {
|
|||
|
||||
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 {
|
||||
if (animal == PieceSafari::Barriere) {
|
||||
throw std::invalid_argument("Animal non valide");
|
||||
|
|
Reference in a new issue