affichage des pièces

This commit is contained in:
Mylloon 2023-12-28 22:05:00 +01:00
parent 59c232ac15
commit 86eee781d6
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
10 changed files with 95 additions and 15 deletions

View file

@ -22,10 +22,18 @@ class Butin : private Jeu {
Fini, Fini,
}; };
// Où l'on se trouve dans le jeu, à quelle étape nous sommes
enum Etape etape; enum Etape etape;
// Permet de transformer une Piece en PieceButin
PieceButin *getPiece(const int x, const int y) const; PieceButin *getPiece(const int x, const int y) const;
// Message quand les joueurs retirent les pièces au début du jeu
std::string msgPieceJaune(const int num, const bool erreur = false) const;
// Message à chaque tour du joueur
std::string msgTonTour(const int num) const;
public: public:
Butin(Joueur &joueur1, Joueur &joueur2); // constructor Butin(Joueur &joueur1, Joueur &joueur2); // constructor
virtual ~Butin(); // destructor virtual ~Butin(); // destructor

View file

@ -15,6 +15,9 @@ struct PieceButin : public Piece {
PieceButin(const enum Categorie); PieceButin(const enum Categorie);
virtual ~PieceButin(); virtual ~PieceButin();
// Couleur sur l'écran
sf::Color getScreenColor() const override;
private: private:
int points; int points;

View file

@ -11,6 +11,9 @@ struct PieceDames : public Piece {
PieceDames(const enum Categorie); PieceDames(const enum Categorie);
virtual ~PieceDames(); virtual ~PieceDames();
// Couleur sur l'écran
sf::Color getScreenColor() const override;
// Getter pour la piece (dame ou non) // Getter pour la piece (dame ou non)
bool getDame() const; bool getDame() const;

View file

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <SFML/Graphics/Color.hpp>
#include <iostream> #include <iostream>
class Piece { class Piece {
@ -20,4 +21,7 @@ public:
// Fonction de déplacement // Fonction de déplacement
bool moveTo(const int destX, const int destY); bool moveTo(const int destX, const int destY);
// Renvoie la couleur de la pièce pour l'affichage
virtual sf::Color getScreenColor() const = 0;
}; };

View file

@ -13,6 +13,9 @@ struct PieceSafari : public Piece {
PieceSafari(const enum Categorie); PieceSafari(const enum Categorie);
virtual ~PieceSafari(); virtual ~PieceSafari();
// Couleur sur l'écran
sf::Color getScreenColor() const override;
private: private:
std::string to_string(const enum Categorie) const; std::string to_string(const enum Categorie) const;
}; };

View file

@ -19,11 +19,28 @@ PieceButin *Butin::getPiece(const int x, const int y) const {
return dynamic_cast<PieceButin *>(plateau.getPiece(x, y)); return dynamic_cast<PieceButin *>(plateau.getPiece(x, y));
} }
std::string Butin::msgPieceJaune(const int num, const bool erreur) const {
std::string res = "Joueur " + std::to_string(num) +
", retirez une piece jaune en cliquant dessus.";
if (erreur) {
res = "Mauvaise piece. " + res;
}
return res;
}
std::string Butin::msgTonTour(const int num) const {
// TODO: peut-être c'est mieux si on récupère le num directement depuis
// joueurCourant ?
return "Joueur " + std::to_string(num) + ", c'est votre tour.";
}
void Butin::init() { void Butin::init() {
plateau.initialiserPlateau(); plateau.initialiserPlateau();
// 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(msgPieceJaune(1));
etape = ChoixJ1; etape = ChoixJ1;
posCurseur = std::make_pair(-1, -1); posCurseur = std::make_pair(-1, -1);
} }
@ -31,13 +48,11 @@ void Butin::init() {
void Butin::play() { void Butin::play() {
plateau.afficherPlateau(std::cout); plateau.afficherPlateau(std::cout);
if (etape <= Etape::ChoixJ1) { if (etape <= Etape::ChoixJ1) {
// Condition du clic
return; return;
} }
// Demander à J2 de retirer une pièce jaune // Demander à J2 de retirer une pièce jaune
if (etape <= Etape::ChoixJ2) { if (etape <= Etape::ChoixJ2) {
// Condition du clic
return; return;
} }
} }
@ -51,9 +66,13 @@ void Butin::event(const int x, const int y) {
return; return;
} }
// Texte de debug
std::cout << "Clic souris @ (" << x << ", " << y << ") aka ("
<< posCurseur.first << ", " << posCurseur.second << ")\n";
switch (etape) { switch (etape) {
// Clic du J1
case (Etape::ChoixJ1): { case (Etape::ChoixJ1): {
// Clic du J1
// Vérifier que la pièce est jaune // Vérifier que la pièce est jaune
if (getPiece(posCurseur.first, posCurseur.second)->points == if (getPiece(posCurseur.first, posCurseur.second)->points ==
PieceButin::Jaune) { PieceButin::Jaune) {
@ -63,16 +82,15 @@ void Butin::event(const int x, const int y) {
// On passe à l'étape suivante // On passe à l'étape suivante
etape = ChoixJ2; etape = ChoixJ2;
Ecran::printMessage( Ecran::printMessage(msgPieceJaune(2));
"Joueur 2, retirez une piece jaune en cliquant dessus.");
} else { } else {
Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant " Ecran::printMessage(msgPieceJaune(1, true));
"dessus. Mauvaise Pièce.");
} }
break; break;
} }
// Clic du J2
case ChoixJ2: { case ChoixJ2: {
// Clic du J2
// Vérifier que la pièce est jaune // Vérifier que la pièce est jaune
if (getPiece(posCurseur.first, posCurseur.second)->points == if (getPiece(posCurseur.first, posCurseur.second)->points ==
PieceButin::Jaune) { PieceButin::Jaune) {
@ -81,6 +99,9 @@ void Butin::event(const int x, const int y) {
// On passe à l'étape suivante // On passe à l'étape suivante
etape = EnJeu; etape = EnJeu;
Ecran::printMessage(msgTonTour(1));
} else {
Ecran::printMessage(msgPieceJaune(2, true));
} }
break; break;
} }
@ -94,14 +115,10 @@ void Butin::event(const int x, const int y) {
break; break;
} }
} }
// Texte de debug
std::cout << "Clic souris @ (" << x << ", " << y << ") aka ("
<< posCurseur.first << ", " << posCurseur.second << ")\n";
} }
std::pair<int, int> Butin::getPosition() const { std::pair<int, int> Butin::getPosition() const {
if (posCurseur.first > plateau.getTaille() - 1) { if (posCurseur.second > plateau.getTaille() - 1) {
std::cerr << "Position inconnu du plateau.\n"; std::cerr << "Position inconnu du plateau.\n";
return std::make_pair(-1, -1); return std::make_pair(-1, -1);
} }

View file

@ -22,3 +22,18 @@ std::string PieceButin::to_string(const enum Categorie cat) const {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
sf::Color PieceButin::getScreenColor() const {
switch (points) {
case Jaune:
return sf::Color::Yellow;
case Rouge:
return sf::Color::Red;
case Noire:
return sf::Color::Black;
default:
// Ne devrait pas arriver
return sf::Color::White;
}
}

View file

@ -27,3 +27,8 @@ std::string PieceDames::to_string(const enum Categorie cat) const {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
sf::Color PieceDames::getScreenColor() const {
// TODO
return sf::Color::White;
}

View file

@ -26,15 +26,23 @@ std::ostream &operator<<(std::ostream &out, const Plateau &data) {
void Plateau::afficherPlateau(std::ostream &out, const bool d) const { void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
const float tailleCellule = static_cast<float>(Ecran::largeur()) / taille; const float tailleCellule = static_cast<float>(Ecran::largeur()) / taille;
const float decalagePiece = tailleCellule / 6;
// Cellule // Cellule
sf::RectangleShape cell(sf::Vector2f(tailleCellule, tailleCellule)); sf::RectangleShape cell(sf::Vector2f(tailleCellule, tailleCellule));
// Pièce
sf::CircleShape piece(tailleCellule / 3);
piece.setOutlineThickness(2.);
for (int i = 0; i < taille; i++) { for (int i = 0; i < taille; i++) {
for (int j = 0; j < taille; j++) { for (int j = 0; j < taille; j++) {
const float x = i * tailleCellule; const float x = i * tailleCellule;
const float y = j * tailleCellule; const float y = j * tailleCellule;
// Position de la cellule // Position de la cellule et de la pièce
cell.setPosition(x, y); cell.setPosition(x, y);
piece.setPosition(x + decalagePiece, y + decalagePiece);
if (d) { if (d) {
out << "(" << x << ", " << y; out << "(" << x << ", " << y;
} }
@ -42,11 +50,13 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
// Alternation des couleurs // Alternation des couleurs
if ((i + j) % 2 == 0) { if ((i + j) % 2 == 0) {
cell.setFillColor(sf::Color::White); cell.setFillColor(sf::Color::White);
piece.setOutlineColor(sf::Color::Black);
if (d) { if (d) {
out << ", B), "; out << ", B), ";
} }
} else { } else {
cell.setFillColor(sf::Color::Black); cell.setFillColor(sf::Color::Black);
piece.setOutlineColor(sf::Color::White);
if (d) { if (d) {
out << ", N), "; out << ", N), ";
} }
@ -54,6 +64,13 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
// Dessine la cellule // Dessine la cellule
Ecran::window.draw(cell); Ecran::window.draw(cell);
// Dessine la pièce
Piece *p = plateau[i][j];
if (p != nullptr) {
piece.setFillColor(p->getScreenColor());
Ecran::window.draw(piece);
}
} }
if (d) { if (d) {
out << "\n"; out << "\n";

View file

@ -22,3 +22,8 @@ std::string PieceSafari::to_string(const enum Categorie cat) const {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
sf::Color PieceSafari::getScreenColor() const {
// TODO
return sf::Color::White;
}