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,
};
// Où l'on se trouve dans le jeu, à quelle étape nous sommes
enum Etape etape;
// Permet de transformer une Piece en PieceButin
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:
Butin(Joueur &joueur1, Joueur &joueur2); // constructor
virtual ~Butin(); // destructor

View file

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

View file

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

View file

@ -1,5 +1,6 @@
#pragma once
#include <SFML/Graphics/Color.hpp>
#include <iostream>
class Piece {
@ -20,4 +21,7 @@ public:
// Fonction de déplacement
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);
virtual ~PieceSafari();
// Couleur sur l'écran
sf::Color getScreenColor() const override;
private:
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));
}
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() {
plateau.initialiserPlateau();
// 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;
posCurseur = std::make_pair(-1, -1);
}
@ -31,13 +48,11 @@ void Butin::init() {
void Butin::play() {
plateau.afficherPlateau(std::cout);
if (etape <= Etape::ChoixJ1) {
// Condition du clic
return;
}
// Demander à J2 de retirer une pièce jaune
if (etape <= Etape::ChoixJ2) {
// Condition du clic
return;
}
}
@ -51,9 +66,13 @@ void Butin::event(const int x, const int y) {
return;
}
// Texte de debug
std::cout << "Clic souris @ (" << x << ", " << y << ") aka ("
<< posCurseur.first << ", " << posCurseur.second << ")\n";
switch (etape) {
// Clic du J1
case (Etape::ChoixJ1): {
// Clic du J1
// Vérifier que la pièce est jaune
if (getPiece(posCurseur.first, posCurseur.second)->points ==
PieceButin::Jaune) {
@ -63,16 +82,15 @@ void Butin::event(const int x, const int y) {
// On passe à l'étape suivante
etape = ChoixJ2;
Ecran::printMessage(
"Joueur 2, retirez une piece jaune en cliquant dessus.");
Ecran::printMessage(msgPieceJaune(2));
} else {
Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant "
"dessus. Mauvaise Pièce.");
Ecran::printMessage(msgPieceJaune(1, true));
}
break;
}
// Clic du J2
case ChoixJ2: {
// Clic du J2
// Vérifier que la pièce est jaune
if (getPiece(posCurseur.first, posCurseur.second)->points ==
PieceButin::Jaune) {
@ -81,6 +99,9 @@ void Butin::event(const int x, const int y) {
// On passe à l'étape suivante
etape = EnJeu;
Ecran::printMessage(msgTonTour(1));
} else {
Ecran::printMessage(msgPieceJaune(2, true));
}
break;
}
@ -94,14 +115,10 @@ void Butin::event(const int x, const int y) {
break;
}
}
// Texte de debug
std::cout << "Clic souris @ (" << x << ", " << y << ") aka ("
<< posCurseur.first << ", " << posCurseur.second << ")\n";
}
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";
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);
}
}
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);
}
}
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 {
const float tailleCellule = static_cast<float>(Ecran::largeur()) / taille;
const float decalagePiece = tailleCellule / 6;
// Cellule
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 j = 0; j < taille; j++) {
const float x = i * tailleCellule;
const float y = j * tailleCellule;
// Position de la cellule
// Position de la cellule et de la pièce
cell.setPosition(x, y);
piece.setPosition(x + decalagePiece, y + decalagePiece);
if (d) {
out << "(" << x << ", " << y;
}
@ -42,11 +50,13 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
// Alternation des couleurs
if ((i + j) % 2 == 0) {
cell.setFillColor(sf::Color::White);
piece.setOutlineColor(sf::Color::Black);
if (d) {
out << ", B), ";
}
} else {
cell.setFillColor(sf::Color::Black);
piece.setOutlineColor(sf::Color::White);
if (d) {
out << ", N), ";
}
@ -54,6 +64,13 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
// Dessine la cellule
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) {
out << "\n";

View file

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