Position
This commit is contained in:
parent
aca2abb55e
commit
0cf21f519a
15 changed files with 38 additions and 31 deletions
|
@ -35,16 +35,16 @@ class Butin : private Jeu {
|
||||||
const std::string msgTonTour() const;
|
const std::string msgTonTour() const;
|
||||||
|
|
||||||
// Message affichant le nombre de points
|
// Message affichant le nombre de points
|
||||||
const std::string msgPoints(const std::pair<int, int> points) const;
|
const std::string msgPoints(const Position points) const;
|
||||||
|
|
||||||
// Position curseur
|
// Position curseur
|
||||||
const std::pair<const int, const int> getPosition() const override;
|
const Position getPosition() const override;
|
||||||
|
|
||||||
// Change de joueur courant
|
// Change de joueur courant
|
||||||
void changerJoueurCourant();
|
void changerJoueurCourant();
|
||||||
|
|
||||||
// Renvoie le nombre de points des joueurs 1 et 2
|
// Renvoie le nombre de points des joueurs 1 et 2
|
||||||
std::pair<int, int> calculpoints(const bool finPartie = false) const;
|
Position calculpoints(const bool finPartie = false) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Butin(Joueur &joueur1, Joueur &joueur2); // constructor
|
Butin(Joueur &joueur1, Joueur &joueur2); // constructor
|
||||||
|
|
|
@ -23,7 +23,7 @@ public:
|
||||||
void event(const int x, const int y) override;
|
void event(const int x, const int y) override;
|
||||||
|
|
||||||
// Position curseur
|
// Position curseur
|
||||||
const std::pair<const int, const int> getPosition() const override;
|
const Position getPosition() const override;
|
||||||
|
|
||||||
// Vérifie si une prise est possible pour une pièce donnée
|
// Vérifie si une prise est possible pour une pièce donnée
|
||||||
bool prisePossible(Joueur &joueur) const;
|
bool prisePossible(Joueur &joueur) const;
|
||||||
|
|
|
@ -24,5 +24,5 @@ protected:
|
||||||
// Récupère la position du curseur
|
// Récupère la position du curseur
|
||||||
// Virtuelle car on aimerais vérifier que le curseur n'est pas en dehors du
|
// Virtuelle car on aimerais vérifier que le curseur n'est pas en dehors du
|
||||||
// plateau et on accès à aucun plateau ici
|
// plateau et on accès à aucun plateau ici
|
||||||
virtual const std::pair<const int, const int> getPosition() const = 0;
|
virtual const Position getPosition() const = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "types.hpp"
|
||||||
#include <SFML/Graphics/Color.hpp>
|
#include <SFML/Graphics/Color.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
@ -33,7 +34,7 @@ public:
|
||||||
virtual const sf::Color getScreenColor() const = 0;
|
virtual const sf::Color getScreenColor() const = 0;
|
||||||
|
|
||||||
// Renvoie la position de la pièce
|
// Renvoie la position de la pièce
|
||||||
const std::pair<const int, const int> getPos() const;
|
const Position getPos() const;
|
||||||
|
|
||||||
// Renvoie si la pièce est selectionnée
|
// Renvoie si la pièce est selectionnée
|
||||||
bool isSelectionnee() const;
|
bool isSelectionnee() const;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../includes/Piece.hpp"
|
#include "../includes/Piece.hpp"
|
||||||
|
#include "types.hpp"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class Plateau {
|
class Plateau {
|
||||||
|
@ -33,14 +34,13 @@ public:
|
||||||
|
|
||||||
// Fonction pour bouger une pièce, renvoie les anciennes coordonnées de la
|
// Fonction pour bouger une pièce, renvoie les anciennes coordonnées de la
|
||||||
// pièce bougée (TODO: est-ce utile de renvoyer les anciennes coordonnées ?)
|
// pièce bougée (TODO: est-ce utile de renvoyer les anciennes coordonnées ?)
|
||||||
const std::pair<const int, const int> moveSelection(const int x, const int y);
|
const Position moveSelection(const int x, const int y);
|
||||||
|
|
||||||
// Renvoie une pièce à une position donnnée
|
// Renvoie une pièce à une position donnnée
|
||||||
Piece *getPiece(const int x, const int y) const;
|
Piece *getPiece(const int x, const int y) const;
|
||||||
|
|
||||||
// Prend des coordonnées-écran et renvoie des coordonnées-jeu
|
// Prend des coordonnées-écran et renvoie des coordonnées-jeu
|
||||||
const std::pair<const int, const int> trouveCoordonnees(const int x,
|
const Position trouveCoordonnees(const int x, const int y) const;
|
||||||
const int y) const;
|
|
||||||
|
|
||||||
// Renvoie la taille du plateau
|
// Renvoie la taille du plateau
|
||||||
int getTaille() const;
|
int getTaille() const;
|
||||||
|
|
|
@ -8,6 +8,9 @@ class PlateauSafari : public Plateau {
|
||||||
// Barrières
|
// Barrières
|
||||||
std::vector<PieceSafari *> barrieres;
|
std::vector<PieceSafari *> barrieres;
|
||||||
|
|
||||||
|
std::pair<int, int> placementBarriere1;
|
||||||
|
std::pair<int, int> placementBarriere2;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PlateauSafari();
|
PlateauSafari();
|
||||||
virtual ~PlateauSafari();
|
virtual ~PlateauSafari();
|
||||||
|
|
|
@ -39,7 +39,7 @@ class Safari : private Jeu {
|
||||||
PieceSafari *getPiece(Piece *) const;
|
PieceSafari *getPiece(Piece *) const;
|
||||||
|
|
||||||
// Position curseur
|
// Position curseur
|
||||||
const std::pair<const int, const int> getPosition() const override;
|
const Position getPosition() const override;
|
||||||
|
|
||||||
// Change de joueur courant
|
// Change de joueur courant
|
||||||
void changerJoueurCourant();
|
void changerJoueurCourant();
|
||||||
|
|
5
includes/types.hpp
Normal file
5
includes/types.hpp
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
using Position = std::pair<const int, const int>;
|
|
@ -39,7 +39,7 @@ const std::string Butin::msgTonTour() const {
|
||||||
", c'est votre tour. " + msgPoints(calculpoints());
|
", c'est votre tour. " + msgPoints(calculpoints());
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string Butin::msgPoints(const std::pair<int, int> points) const {
|
const std::string Butin::msgPoints(Position points) const {
|
||||||
return "J1 : " + std::to_string(points.first) + " vs " +
|
return "J1 : " + std::to_string(points.first) + " vs " +
|
||||||
std::to_string(points.second) + " : J2";
|
std::to_string(points.second) + " : J2";
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,7 @@ void Butin::event(const int x, const int y) {
|
||||||
// Mange les pièces sur le chemin
|
// Mange les pièces sur le chemin
|
||||||
for (const Piece *it : chemin) {
|
for (const Piece *it : chemin) {
|
||||||
// Récupère la pièce
|
// Récupère la pièce
|
||||||
const std::pair<const int, const int> pos = it->getPos();
|
const Position pos = it->getPos();
|
||||||
Piece *gain = plateau.getPiece(pos.first, pos.second);
|
Piece *gain = plateau.getPiece(pos.first, pos.second);
|
||||||
|
|
||||||
// Retire la pièce
|
// Retire la pièce
|
||||||
|
@ -160,7 +160,7 @@ void Butin::event(const int x, const int y) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::pair<const int, const int> Butin::getPosition() const {
|
const Position Butin::getPosition() const {
|
||||||
if (posCurseur.second > 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);
|
||||||
|
@ -177,7 +177,7 @@ void Butin::changerJoueurCourant() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<int, int> Butin::calculpoints(const bool end) const {
|
Position Butin::calculpoints(const bool end) const {
|
||||||
// Nombre de points des joueurs
|
// Nombre de points des joueurs
|
||||||
int j1 = 0, j2 = 0;
|
int j1 = 0, j2 = 0;
|
||||||
for (const Piece *it : joueur1.getPieces()) {
|
for (const Piece *it : joueur1.getPieces()) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ void PlateauButin::initialiserPlateau() {
|
||||||
|
|
||||||
const std::vector<const Piece *>
|
const std::vector<const Piece *>
|
||||||
PlateauButin::cheminPieces(const int destX, const int destY) const {
|
PlateauButin::cheminPieces(const int destX, const int destY) const {
|
||||||
const std::pair<const int, const int> posSelection = selection->getPos();
|
const Position posSelection = selection->getPos();
|
||||||
return cheminPieces(posSelection.first, posSelection.second, destX, destY);
|
return cheminPieces(posSelection.first, posSelection.second, destX, destY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,10 +104,10 @@ bool PlateauButin::selectionJaune() const {
|
||||||
|
|
||||||
bool PlateauButin::coupsPossible() const {
|
bool PlateauButin::coupsPossible() const {
|
||||||
// Liste des cases vides
|
// Liste des cases vides
|
||||||
std::vector<std::pair<const int, const int>> casesVides;
|
std::vector<Position> casesVides;
|
||||||
|
|
||||||
// Liste des pièces jaunes
|
// Liste des pièces jaunes
|
||||||
std::vector<std::pair<const int, const int>> piecesJaunes;
|
std::vector<Position> piecesJaunes;
|
||||||
|
|
||||||
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) {
|
||||||
|
@ -124,9 +124,9 @@ bool PlateauButin::coupsPossible() const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (std::pair<const int, const int> p : piecesJaunes) {
|
for (Position p : piecesJaunes) {
|
||||||
// Parmis toutes les pièces jaunes
|
// Parmis toutes les pièces jaunes
|
||||||
for (std::pair<const int, const int> it : casesVides) {
|
for (Position it : casesVides) {
|
||||||
// Si le déplacement vers une case vide peut donner des points
|
// Si le déplacement vers une case vide peut donner des points
|
||||||
if (!cheminPieces(p.first, p.second, it.first, it.second).empty()) {
|
if (!cheminPieces(p.first, p.second, it.first, it.second).empty()) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -32,7 +32,7 @@ void Dames::play() {
|
||||||
|
|
||||||
void Dames::event(const int, const int) {}
|
void Dames::event(const int, const int) {}
|
||||||
|
|
||||||
const std::pair<const int, const int> Dames::getPosition() const {
|
const Position Dames::getPosition() const {
|
||||||
if (posCurseur.second > 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);
|
||||||
|
@ -52,7 +52,7 @@ bool Dames::prisePossible(Joueur &joueur) const {
|
||||||
int y = 1;
|
int y = 1;
|
||||||
for (uint i = 0; i < pieces.size(); i++) {
|
for (uint i = 0; i < pieces.size(); i++) {
|
||||||
const PieceDames *p = dynamic_cast<const PieceDames *>(pieces[i]);
|
const PieceDames *p = dynamic_cast<const PieceDames *>(pieces[i]);
|
||||||
const std::pair<const int, const int> pos = p->getPos();
|
const Position pos = p->getPos();
|
||||||
if (!p) {
|
if (!p) {
|
||||||
throw std::runtime_error("Cette pièce est.. étrange.");
|
throw std::runtime_error("Cette pièce est.. étrange.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,6 @@ bool Piece::isSelectionnee() const {
|
||||||
return selected;
|
return selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::pair<const int, const int> Piece::getPos() const {
|
const Position Piece::getPos() const {
|
||||||
return std::make_pair(x, y);
|
return std::make_pair(x, y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,8 +109,7 @@ Piece *Plateau::getPiece(const int x, const int y) const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::pair<const int, const int>
|
const Position Plateau::trouveCoordonnees(const int x, const int y) const {
|
||||||
Plateau::trouveCoordonnees(const int x, const int y) const {
|
|
||||||
const float tailleCelluleX = static_cast<float>(Ecran::largeur()) / taille;
|
const float tailleCelluleX = static_cast<float>(Ecran::largeur()) / taille;
|
||||||
const float tailleCelluleY = static_cast<float>(Ecran::hauteur()) / taille;
|
const float tailleCelluleY = static_cast<float>(Ecran::hauteur()) / taille;
|
||||||
|
|
||||||
|
@ -143,15 +142,14 @@ void Plateau::modifierSelection(const int x, const int y) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::pair<const int, const int> Plateau::moveSelection(const int x,
|
const Position Plateau::moveSelection(const int x, const int y) {
|
||||||
const int y) {
|
|
||||||
if (selection == nullptr) {
|
if (selection == nullptr) {
|
||||||
// Ne fais rien si on a rien a bouger
|
// Ne fais rien si on a rien a bouger
|
||||||
return std::make_pair(-1, -1);
|
return std::make_pair(-1, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Récupère les coordonnées
|
// Récupère les coordonnées
|
||||||
const std::pair<const int, const int> ancienneCoordonnees =
|
const Position ancienneCoordonnees =
|
||||||
std::make_pair(selection->x, selection->y);
|
std::make_pair(selection->x, selection->y);
|
||||||
|
|
||||||
// Retire la pièce de là où elle est pour le plateau
|
// Retire la pièce de là où elle est pour le plateau
|
||||||
|
|
|
@ -116,7 +116,7 @@ void PlateauSafari::afficherPlateau(std::ostream &out, const bool d) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlateauSafari::deplacementValide(const int x, const int y) const {
|
bool PlateauSafari::deplacementValide(const int x, const int y) const {
|
||||||
std::pair<const int, const int> posInitiale = selection->getPos();
|
Position posInitiale = selection->getPos();
|
||||||
|
|
||||||
return std::abs(x - posInitiale.first) == 0 ||
|
return std::abs(x - posInitiale.first) == 0 ||
|
||||||
std::abs(y - posInitiale.second) == 0;
|
std::abs(y - posInitiale.second) == 0;
|
||||||
|
|
|
@ -50,7 +50,7 @@ const std::string Safari::msgTonTour() const {
|
||||||
action =
|
action =
|
||||||
"déplacez un " + getPiece(joueurCourant->getPieces().at(0))->getName();
|
"déplacez un " + getPiece(joueurCourant->getPieces().at(0))->getName();
|
||||||
} else {
|
} else {
|
||||||
action = "placez une barrière";
|
action = "placez une barrière en cliquant sur 2 cases";
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Joueur " + std::to_string(joueurCourant->getNum()) + ", " + action +
|
return "Joueur " + std::to_string(joueurCourant->getNum()) + ", " + action +
|
||||||
|
@ -76,7 +76,7 @@ void Safari::play() {
|
||||||
// Pas de joueur 3
|
// Pas de joueur 3
|
||||||
// On retire le dernier choix d'animal
|
// On retire le dernier choix d'animal
|
||||||
const Piece *p = plateau.getPieces().at(0);
|
const Piece *p = plateau.getPieces().at(0);
|
||||||
std::pair<const int, const int> pos = p->getPos();
|
Position pos = p->getPos();
|
||||||
plateau.modifierPlateau(pos.first, pos.second, nullptr);
|
plateau.modifierPlateau(pos.first, pos.second, nullptr);
|
||||||
delete p;
|
delete p;
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ void Safari::event(const int x, const int y) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::pair<const int, const int> Safari::getPosition() const {
|
const Position Safari::getPosition() const {
|
||||||
if (posCurseur.second > 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);
|
||||||
|
|
Reference in a new issue