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,
|
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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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) {
|
||||||
case (Etape::ChoixJ1): {
|
|
||||||
// Clic du J1
|
// Clic du J1
|
||||||
|
case (Etape::ChoixJ1): {
|
||||||
// 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;
|
||||||
}
|
}
|
||||||
case ChoixJ2: {
|
|
||||||
// Clic du J2
|
// Clic du J2
|
||||||
|
case ChoixJ2: {
|
||||||
// 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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
Reference in a new issue