ajout fonction chemin des pièces

This commit is contained in:
Mylloon 2023-12-31 03:36:51 +01:00
parent 19e27ce560
commit 35e5c5908e
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 50 additions and 0 deletions

View file

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "../Plateau.hpp" #include "../Plateau.hpp"
#include <vector>
class PlateauButin : public Plateau { class PlateauButin : public Plateau {
public: public:
@ -9,4 +10,7 @@ public:
// Initialise le plateau du Butin // Initialise le plateau du Butin
void initialiserPlateau() override; void initialiserPlateau() override;
// Renvoie la liste des pièces entre la pièce sélectionné et une position
std::vector<Piece *> cheminPieces(const int destX, const int destY) const;
}; };

View file

@ -45,3 +45,49 @@ void PlateauButin::initialiserPlateau() {
} }
} }
} }
std::vector<Piece *> PlateauButin::cheminPieces(const int destX,
const int destY) const {
// Position départ
std::pair<int, int> posSelection = selection->getPos();
const int depX = posSelection.first;
const int depY = posSelection.second;
// Distances
const int deltaX = destX - depX;
const int deltaY = destY - depY;
// Direction à prendre
const int stepX = (deltaX > 0) ? 1 : -1;
const int stepY = (deltaY > 0) ? 1 : -1;
std::vector<Piece *> chemin;
// Déplacement vertical
if (deltaX == 0) {
for (int dy = depY + stepY; dy != destY; dy += stepY) {
chemin.push_back(plateau[depX][dy]);
}
}
// Déplacement horizontal
else if (deltaY == 0) {
for (int dx = depX + stepX; dx != destX; dx += stepX) {
chemin.push_back(plateau[dx][depY]);
}
}
// Déplacement en diagonale
else if (abs(deltaX) == abs(deltaY)) {
for (int dx = depX + stepX, dy = depY + stepY; dx != destX;
dx += stepX, dy += stepY) {
chemin.push_back(plateau[dx][dy]);
}
}
// Retire les cases vides
chemin.erase(std::remove(chemin.begin(), chemin.end(), nullptr),
chemin.end());
return chemin;
}