butin now done:
* calcul points butin * players CANT be const im crazy * plateau cant return list of pieces * joueurCourant is a pointer to a real player * always show score but final score take in account the malus
This commit is contained in:
parent
b628386382
commit
baef0fce5c
11 changed files with 103 additions and 31 deletions
|
@ -12,7 +12,7 @@ class Butin : private Jeu {
|
||||||
PlateauButin plateau;
|
PlateauButin plateau;
|
||||||
|
|
||||||
// Joueurs
|
// Joueurs
|
||||||
const Joueur &joueur2;
|
Joueur &joueur2;
|
||||||
|
|
||||||
// Etape du jeu, pour savoir où on en est
|
// Etape du jeu, pour savoir où on en est
|
||||||
enum Etape {
|
enum Etape {
|
||||||
|
@ -34,6 +34,9 @@ class Butin : private Jeu {
|
||||||
// Message à chaque tour du joueur
|
// Message à chaque tour du joueur
|
||||||
const std::string msgTonTour() const;
|
const std::string msgTonTour() const;
|
||||||
|
|
||||||
|
// Message affichant le nombre de points
|
||||||
|
const std::string msgPoints(const std::pair<int, int> points) const;
|
||||||
|
|
||||||
// Position curseur
|
// Position curseur
|
||||||
const std::pair<const int, const int> getPosition() const override;
|
const std::pair<const int, const int> getPosition() const override;
|
||||||
|
|
||||||
|
@ -41,7 +44,7 @@ class Butin : private Jeu {
|
||||||
void changerJoueurCourant();
|
void changerJoueurCourant();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Butin(const Joueur &joueur1, const Joueur &joueur2); // constructor
|
Butin(Joueur &joueur1, Joueur &joueur2); // constructor
|
||||||
virtual ~Butin(); // destructor
|
virtual ~Butin(); // destructor
|
||||||
|
|
||||||
// Fonction d'initialisation du jeu
|
// Fonction d'initialisation du jeu
|
||||||
|
@ -52,4 +55,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;
|
||||||
|
|
||||||
|
// Renvoie le nombre de points des joueurs 1 et 2
|
||||||
|
std::pair<int, int> calculpoints(const bool finPartie = false) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
struct Jeu {
|
struct Jeu {
|
||||||
// Le joueur 1 est toujours celui qui commence
|
// Le joueur 1 est toujours celui qui commence
|
||||||
Jeu(const Joueur &j1); // constructor
|
Jeu(Joueur &j1); // constructor
|
||||||
virtual ~Jeu(); // destructor
|
virtual ~Jeu(); // destructor
|
||||||
|
|
||||||
// Fonction d'initialisation d'un jeu
|
// Fonction d'initialisation d'un jeu
|
||||||
|
@ -18,8 +18,8 @@ struct Jeu {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Joueurs, au moins un joueur
|
// Joueurs, au moins un joueur
|
||||||
const Joueur &joueur1;
|
Joueur &joueur1;
|
||||||
Joueur joueurCourant;
|
Joueur *joueurCourant;
|
||||||
|
|
||||||
// Position du dernier clic du curseur sur l'écran
|
// Position du dernier clic du curseur sur l'écran
|
||||||
std::pair<int, int> posCurseur;
|
std::pair<int, int> posCurseur;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../includes/Piece.hpp"
|
#include "../includes/Piece.hpp"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class Plateau {
|
class Plateau {
|
||||||
friend std::ostream &operator<<(std::ostream &, const Plateau &);
|
friend std::ostream &operator<<(std::ostream &, const Plateau &);
|
||||||
|
@ -46,4 +47,7 @@ public:
|
||||||
|
|
||||||
// Change la pièce selectionnée
|
// Change la pièce selectionnée
|
||||||
void modifierSelection(const int x, const int y);
|
void modifierSelection(const int x, const int y);
|
||||||
|
|
||||||
|
// Renvoie la liste des pièces du plateau
|
||||||
|
std::vector<const Piece *> getPieces() const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,8 +18,8 @@ class Safari : private Jeu {
|
||||||
std::vector<PieceSafari *> barrieres;
|
std::vector<PieceSafari *> barrieres;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Safari(const Joueur &joueur1, const Joueur &joueur2,
|
Safari(Joueur &joueur1, Joueur &joueur2,
|
||||||
const Joueur *joueur3 = nullptr); // constructor
|
Joueur *joueur3 = nullptr); // constructor
|
||||||
virtual ~Safari(); // destructor
|
virtual ~Safari(); // destructor
|
||||||
|
|
||||||
// Fonction d'initialisation du jeu
|
// Fonction d'initialisation du jeu
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include "../../includes/Butin/PieceButin.hpp"
|
#include "../../includes/Butin/PieceButin.hpp"
|
||||||
#include "../../includes/Ecran.hpp"
|
#include "../../includes/Ecran.hpp"
|
||||||
|
|
||||||
Butin::Butin(const Joueur &j1, const Joueur &j2)
|
Butin::Butin(Joueur &j1, Joueur &j2)
|
||||||
: Jeu(j1), plateau(PlateauButin()), joueur2{j2} {
|
: Jeu(j1), plateau(PlateauButin()), joueur2{j2} {
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ const PieceButin *Butin::getPiece(const int x, const int y) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string Butin::msgPieceJaune(const bool erreur) const {
|
const std::string Butin::msgPieceJaune(const bool erreur) const {
|
||||||
std::string res = "Joueur " + std::to_string(joueurCourant.getNum()) +
|
std::string res = "Joueur " + std::to_string(joueurCourant->getNum()) +
|
||||||
", retirez une piece jaune en cliquant dessus.";
|
", retirez une piece jaune en cliquant dessus.";
|
||||||
|
|
||||||
if (erreur) {
|
if (erreur) {
|
||||||
|
@ -31,8 +31,13 @@ const std::string Butin::msgPieceJaune(const bool erreur) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string Butin::msgTonTour() const {
|
const std::string Butin::msgTonTour() const {
|
||||||
return "Joueur " + std::to_string(joueurCourant.getNum()) +
|
return "Joueur " + std::to_string(joueurCourant->getNum()) +
|
||||||
", c'est votre tour.";
|
", c'est votre tour. " + msgPoints(calculpoints());
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string Butin::msgPoints(const std::pair<int, int> points) const {
|
||||||
|
return "J1 : " + std::to_string(points.first) + " vs " +
|
||||||
|
std::to_string(points.second) + " : J2";
|
||||||
}
|
}
|
||||||
|
|
||||||
void Butin::init() {
|
void Butin::init() {
|
||||||
|
@ -131,15 +136,13 @@ void Butin::event(const int x, const int y) {
|
||||||
plateau.modifierPlateau(pos.first, pos.second, nullptr);
|
plateau.modifierPlateau(pos.first, pos.second, nullptr);
|
||||||
|
|
||||||
// Ajoute le point au joueur
|
// Ajoute le point au joueur
|
||||||
joueurCourant.ajoutPiece(gain);
|
joueurCourant->ajoutPiece(gain);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vérification partie terminé = si plus aucun coup n'est possible
|
// Vérification partie terminé = si plus aucun coup n'est possible
|
||||||
if (!plateau.coupsPossible()) {
|
if (!plateau.coupsPossible()) {
|
||||||
etape = Fini;
|
etape = Fini;
|
||||||
Ecran::printMessage("Partie fini ! Joueur " +
|
Ecran::printMessage("Partie fini ! " + msgPoints(calculpoints(true)));
|
||||||
std::to_string(joueurCourant.getNum()) +
|
|
||||||
" remporte la victoire !");
|
|
||||||
} else {
|
} else {
|
||||||
// On donne la main à l'adversaire
|
// On donne la main à l'adversaire
|
||||||
changerJoueurCourant();
|
changerJoueurCourant();
|
||||||
|
@ -171,9 +174,46 @@ const std::pair<const int, const int> Butin::getPosition() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Butin::changerJoueurCourant() {
|
void Butin::changerJoueurCourant() {
|
||||||
if (joueurCourant.getNum() == joueur1.getNum()) {
|
if (joueurCourant->getNum() == joueur1.getNum()) {
|
||||||
joueurCourant = joueur2;
|
joueurCourant = &joueur2;
|
||||||
} else {
|
} else {
|
||||||
joueurCourant = joueur1;
|
joueurCourant = &joueur1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::pair<int, int> Butin::calculpoints(const bool end) const {
|
||||||
|
// Nombre de points des joueurs
|
||||||
|
int j1 = 0, j2 = 0;
|
||||||
|
for (const Piece *it : joueur1.getPieces()) {
|
||||||
|
j1 += dynamic_cast<const PieceButin *>(it)->getPoints();
|
||||||
|
}
|
||||||
|
for (const Piece *it : joueur2.getPieces()) {
|
||||||
|
j2 += dynamic_cast<const PieceButin *>(it)->getPoints();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si c'est le calcul des points de la fin de partie
|
||||||
|
if (end) {
|
||||||
|
// Nombre de points sur le plateau restant
|
||||||
|
int malus = 0;
|
||||||
|
for (const Piece *it : plateau.getPieces()) {
|
||||||
|
malus += dynamic_cast<const PieceButin *>(it)->getPoints();
|
||||||
|
}
|
||||||
|
|
||||||
|
// C'est le joueur qui a joué le dernier coup qui reçoit le malus
|
||||||
|
if (joueurCourant->getNum() == joueur1.getNum()) {
|
||||||
|
// Joueur 1 reçoit le malus
|
||||||
|
j1 -= malus;
|
||||||
|
if (j1 < 0) {
|
||||||
|
j1 = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Joueur 2 reçoit le malus
|
||||||
|
j2 -= malus;
|
||||||
|
if (j2 < 0) {
|
||||||
|
j2 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::make_pair(j1, j2);
|
||||||
|
}
|
||||||
|
|
|
@ -6,11 +6,11 @@ Dames::Dames(Joueur &j1, Joueur &j2)
|
||||||
std::srand(static_cast<unsigned int>(time(0)));
|
std::srand(static_cast<unsigned int>(time(0)));
|
||||||
const int r = std::rand() % 2;
|
const int r = std::rand() % 2;
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
joueurCourant = j1;
|
joueurCourant = &j1;
|
||||||
} else {
|
} else {
|
||||||
joueurCourant = j2;
|
joueurCourant = &j2;
|
||||||
}
|
}
|
||||||
std::cout << "Joueur " << joueurCourant.getNum()
|
std::cout << "Joueur " << joueurCourant->getNum()
|
||||||
<< " jouera avec les pièces blanches et commencera la partie."
|
<< " jouera avec les pièces blanches et commencera la partie."
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "../includes/Jeu.hpp"
|
#include "../includes/Jeu.hpp"
|
||||||
|
|
||||||
Jeu::Jeu(const Joueur &j1) : joueur1(j1), joueurCourant(Joueur(j1)) {}
|
Jeu::Jeu(Joueur &j1) : joueur1(j1) {
|
||||||
|
joueurCourant = &j1;
|
||||||
|
}
|
||||||
|
|
||||||
Jeu::~Jeu() {}
|
Jeu::~Jeu() {}
|
||||||
|
|
|
@ -15,6 +15,13 @@ const Joueur &Joueur::operator=(const Joueur &src) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << "internally :\n";
|
||||||
|
std::cout << "id : " << id << "\n";
|
||||||
|
std::cout << "pieces(len) : " << pieces.size() << "\n";
|
||||||
|
std::cout << "\nwill be replaced by :\n";
|
||||||
|
std::cout << "id : " << src.id << "\n";
|
||||||
|
std::cout << "pieces(len) : " << src.pieces.size() << "\n";
|
||||||
|
|
||||||
id = src.id;
|
id = src.id;
|
||||||
pieces = src.pieces;
|
pieces = src.pieces;
|
||||||
|
|
||||||
|
|
|
@ -176,3 +176,16 @@ const std::pair<const int, const int> Plateau::moveSelection(const int x,
|
||||||
|
|
||||||
return ancienneCoordonnees;
|
return ancienneCoordonnees;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<const Piece *> Plateau::getPieces() const {
|
||||||
|
std::vector<const Piece *> pieces;
|
||||||
|
for (int i = 0; i < taille; i++) {
|
||||||
|
for (int j = 0; j < taille; j++) {
|
||||||
|
if (plateau[i][j]) {
|
||||||
|
pieces.push_back(plateau[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pieces;
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
/* Contrairement aux autres jeux ici on donne des pointeurs et pas des
|
/* Contrairement aux autres jeux ici on donne des pointeurs et pas des
|
||||||
* références vu que j3 peut ne pas exister (default to nullptr)
|
* références vu que j3 peut ne pas exister (default to nullptr)
|
||||||
* Je sais pas trop si c'est une bonne idée, à méditer */
|
* Je sais pas trop si c'est une bonne idée, à méditer */
|
||||||
Safari::Safari(const Joueur &j1, const Joueur &j2, const Joueur *j3)
|
Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3)
|
||||||
: Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3} {
|
: Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3} {
|
||||||
for (int i = 0; i < 50; i++) {
|
for (int i = 0; i < 50; i++) {
|
||||||
// TODO: Les pièces ont des positions invalides, il faut penser à les
|
// TODO: Les pièces ont des positions invalides, il faut penser à les
|
||||||
|
@ -49,10 +49,10 @@ void Safari::choixAnimal(const PieceSafari::Categorie animal) {
|
||||||
throw std::invalid_argument("Animal non valide");
|
throw std::invalid_argument("Animal non valide");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (joueurCourant.getPieces().empty()) {
|
if (joueurCourant->getPieces().empty()) {
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
// Position invalide en attendant d'être ajouté au plateau de jeu
|
// Position invalide en attendant d'être ajouté au plateau de jeu
|
||||||
joueurCourant.ajoutPiece(new PieceSafari(animal, -1, -1));
|
joueurCourant->ajoutPiece(new PieceSafari(animal, -1, -1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ int main(int argc, char const *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (arg.compare("butin") == 0) {
|
else if (arg.compare("butin") == 0) {
|
||||||
const Joueur j2(2);
|
Joueur j2(2);
|
||||||
|
|
||||||
Butin b(j1, j2);
|
Butin b(j1, j2);
|
||||||
b.init();
|
b.init();
|
||||||
|
@ -50,7 +50,7 @@ int main(int argc, char const *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (arg.compare("safari") == 0) {
|
else if (arg.compare("safari") == 0) {
|
||||||
const Joueur j2(2);
|
Joueur j2(2);
|
||||||
Joueur *j3 = nullptr;
|
Joueur *j3 = nullptr;
|
||||||
// TODO: demander à l'utilisateur un 3e joueur
|
// TODO: demander à l'utilisateur un 3e joueur
|
||||||
{}
|
{}
|
||||||
|
|
Reference in a new issue