affichage des pièces
This commit is contained in:
parent
59c232ac15
commit
86eee781d6
10 changed files with 95 additions and 15 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Reference in a new issue