Skip to content
Snippets Groups Projects
Commit e22daca7 authored by Delplanque Sara's avatar Delplanque Sara
Browse files

ajout affichage score

parent 74fe3b26
No related branches found
No related tags found
No related merge requests found
...@@ -112,7 +112,7 @@ FocusScope { // Permet de capter le focus pour les raccourcis clavier ...@@ -112,7 +112,7 @@ FocusScope { // Permet de capter le focus pour les raccourcis clavier
Text{ Text{
id: score id: score
text:"0" text:gameManager.score
color:"white" color:"white"
font.bold: true font.bold: true
font.pixelSize: 25 font.pixelSize: 25
......
...@@ -4,11 +4,14 @@ ...@@ -4,11 +4,14 @@
#include <QDebug> #include <QDebug>
GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector<int>(4, 0)) { GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector<int>(4, 0)),m_score(0), m_gameOver(false) {
} }
void GameManager::moveLeft() { void GameManager::moveLeft() {
if (m_gameOver) { // Si la partie est terminée, ne fais rien
return;
}
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
std::vector<int> newRow(4, 0); // Créer une nouvelle ligne vide std::vector<int> newRow(4, 0); // Créer une nouvelle ligne vide
int newPos = 0; // Position pour insérer un élément non nul (commence par le début) int newPos = 0; // Position pour insérer un élément non nul (commence par le début)
...@@ -43,7 +46,7 @@ void GameManager::moveLeft() { ...@@ -43,7 +46,7 @@ void GameManager::moveLeft() {
grid[i] = newRow; grid[i] = newRow;
} }
emit addRandomElement(); emit addRandomElement();
m_gameOver = isGameOver();
//Mettre a jour l'état et l'enregistrer //Mettre a jour l'état et l'enregistrer
historyArray.append(gridToJsonArray()); historyArray.append(gridToJsonArray());
emit gridChanged(); emit gridChanged();
...@@ -51,6 +54,9 @@ void GameManager::moveLeft() { ...@@ -51,6 +54,9 @@ void GameManager::moveLeft() {
} }
void GameManager::moveRight() { void GameManager::moveRight() {
if (m_gameOver) { // Si la partie est terminée, ne fais rien
return;
}
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
std::vector<int> newRow(4, 0); // Créer une nouvelle ligne vide std::vector<int> newRow(4, 0); // Créer une nouvelle ligne vide
int newPos = 3; // Position pour insérer un élément non nul (commence par la fin) int newPos = 3; // Position pour insérer un élément non nul (commence par la fin)
...@@ -85,6 +91,7 @@ void GameManager::moveRight() { ...@@ -85,6 +91,7 @@ void GameManager::moveRight() {
grid[i] = newRow; grid[i] = newRow;
} }
emit addRandomElement(); emit addRandomElement();
m_gameOver = isGameOver();
//Mettre a jour l'état et l'enregistrer //Mettre a jour l'état et l'enregistrer
historyArray.append(gridToJsonArray()); historyArray.append(gridToJsonArray());
...@@ -96,6 +103,9 @@ void GameManager::moveRight() { ...@@ -96,6 +103,9 @@ void GameManager::moveRight() {
void GameManager::moveUp() { void GameManager::moveUp() {
if (m_gameOver) { // Si la partie est terminée, ne fais rien
return;
}
// Implémentation du mouvement vers le haut // Implémentation du mouvement vers le haut
for (int j = 0; j < 4; j++) { for (int j = 0; j < 4; j++) {
std::vector<int> newCol(4, 0); // Créer une nouvelle ligne vide std::vector<int> newCol(4, 0); // Créer une nouvelle ligne vide
...@@ -134,6 +144,7 @@ void GameManager::moveUp() { ...@@ -134,6 +144,7 @@ void GameManager::moveUp() {
} }
emit addRandomElement(); emit addRandomElement();
m_gameOver = isGameOver();
//Mettre a jour l'état et l'enregistrer //Mettre a jour l'état et l'enregistrer
historyArray.append(gridToJsonArray()); historyArray.append(gridToJsonArray());
...@@ -142,6 +153,9 @@ void GameManager::moveUp() { ...@@ -142,6 +153,9 @@ void GameManager::moveUp() {
} }
void GameManager::moveDown() { void GameManager::moveDown() {
if (m_gameOver) { // Si la partie est terminée, ne fais rien
return;
}
// Implémentation du mouvement vers le bas // Implémentation du mouvement vers le bas
for (int j = 0; j < 4; j++) { for (int j = 0; j < 4; j++) {
std::vector<int> newCol(4, 0); // Créer une nouvelle ligne vide std::vector<int> newCol(4, 0); // Créer une nouvelle ligne vide
...@@ -180,6 +194,7 @@ void GameManager::moveDown() { ...@@ -180,6 +194,7 @@ void GameManager::moveDown() {
} }
emit addRandomElement(); emit addRandomElement();
m_gameOver = isGameOver();
//Mettre a jour l'état et l'enregistrer //Mettre a jour l'état et l'enregistrer
historyArray.append(gridToJsonArray()); historyArray.append(gridToJsonArray());
...@@ -193,6 +208,7 @@ void GameManager::restartGame() { ...@@ -193,6 +208,7 @@ void GameManager::restartGame() {
//demander pour sauvergarder la partie précédente //demander pour sauvergarder la partie précédente
enregistrerPartie("partie1"); enregistrerPartie("partie1");
m_gameOver = false;
// Réinitialisation des variables // Réinitialisation des variables
...@@ -388,15 +404,37 @@ void GameManager::chargerPartie(QString partieName){ ...@@ -388,15 +404,37 @@ void GameManager::chargerPartie(QString partieName){
file.close(); file.close();
} }
int GameManager::score() const {
return m_score; // Retourne le score actuel
}
void GameManager::calculscore(){ void GameManager::calculscore(){
if (m_gameOver) { // Si la partie est terminée, ne calcule pas le score
return;
}
m_score = 0;
// Parcourir la grille pour additionner toute les cases // Parcourir la grille pour additionner toute les cases
int score=0;
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) { for (int j = 0; j < 4; j++) {
score=grid[i][j]+score; m_score+=grid[i][j];
} }
} }
emit scoreChanged();
} }
bool GameManager::isGameOver() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (grid[i][j] == 0) { // Une case vide est trouvée, donc le jeu n'est pas fini
return false;
}
// Vérifier les possibilités de fusion (horizontale et verticale)
if ((i < 3 && grid[i][j] == grid[i + 1][j]) || (j < 3 && grid[i][j] == grid[i][j + 1])) {
return false;
}
}
}
return true; // Si la grille est pleine et aucune fusion n'est possible, la partie est terminée
}
...@@ -16,6 +16,7 @@ class GameManager : public QObject ...@@ -16,6 +16,7 @@ class GameManager : public QObject
Q_PROPERTY(QVector<int> gridValues READ getGridValues NOTIFY gridChanged) Q_PROPERTY(QVector<int> gridValues READ getGridValues NOTIFY gridChanged)
Q_PROPERTY(QStringList partieHistorique READ getPartieHistorique NOTIFY historiqueChanged) Q_PROPERTY(QStringList partieHistorique READ getPartieHistorique NOTIFY historiqueChanged)
Q_PROPERTY(int score READ score NOTIFY scoreChanged)
public: public:
explicit GameManager(QObject *parent = nullptr); explicit GameManager(QObject *parent = nullptr);
...@@ -26,13 +27,16 @@ public: ...@@ -26,13 +27,16 @@ public:
Q_INVOKABLE void restartGame(); Q_INVOKABLE void restartGame();
Q_INVOKABLE void undo(); Q_INVOKABLE void undo();
Q_INVOKABLE void chargerPartie(QString partieName); Q_INVOKABLE void chargerPartie(QString partieName);
bool isGameOver();
QVector<int> getGridValues() const; QVector<int> getGridValues() const;
QStringList getPartieHistorique(); QStringList getPartieHistorique();
int score() const;
private: private:
std::vector<std::vector<int>> grid; std::vector<std::vector<int>> grid;
QJsonArray historyArray; QJsonArray historyArray;
int m_score;
Q_INVOKABLE void addRandomElement(); Q_INVOKABLE void addRandomElement();
Q_INVOKABLE void enregistrerPartie(QString partieName); Q_INVOKABLE void enregistrerPartie(QString partieName);
...@@ -40,11 +44,14 @@ private: ...@@ -40,11 +44,14 @@ private:
QJsonArray gridToJsonArray(); QJsonArray gridToJsonArray();
bool m_gameOver;
signals: signals:
void gridChanged(); void gridChanged();
void historiqueChanged(); void historiqueChanged();
void scoreChanged();
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment