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

Codage jeu

Codage des mouvements et des fusions des nombres dans toutes les directions et ajout sur une case vide aléatoire du nombre 2
parent dad5730c
No related branches found
No related tags found
No related merge requests found
No preview for this file type
......@@ -6,19 +6,166 @@ GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector
}
void GameManager::moveLeft() {
// Implémentation du mouvement vers la gauche
for (int i = 0; i < 4; i++) {
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 temp = 0; // Variable pour mémoriser l'élément à fusionner
// Parcourir la ligne de gauche à droite
for (int j = 0; j <4; j++) {
if (grid[i][j] != 0) { // Si l'élément n'est pas nul
if (temp == 0) {
// Mémoriser l'élément actuel
temp = grid[i][j];
} else if (temp == grid[i][j]) {
// Si l'élément est identique au "temp", fusionner
newRow[newPos] = temp * 2; // Fusionner en doublant la valeur
temp = 0; // Réinitialiser temp après fusion
newPos++; // Déplacer la position pour l'élément suivant
} else {
// Si l'élément n'est pas identique à "temp", le placer dans la nouvelle ligne
newRow[newPos] = temp;
temp = grid[i][j]; // Mettre à jour temp avec le nouvel élément
newPos++; // Déplacer la position pour l'élément suivant
}
}
}
// Si l'élément restant dans "temp" n'a pas été placé, on le place
if (temp != 0) {
newRow[newPos] = temp;
}
// Mettre à jour la grille avec la nouvelle ligne
grid[i] = newRow;
}
emit addRandomElement();
emit gridChanged();
}
void GameManager::moveRight() {
// Implémentation du mouvement vers la droite
for (int i = 0; i < 4; i++) {
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 temp = 0; // Variable pour mémoriser l'élément à fusionner
// Parcourir la ligne de droite à gauche
for (int j = 3; j >= 0; j--) {
if (grid[i][j] != 0) { // Si l'élément n'est pas nul
if (temp == 0) {
// Mémoriser l'élément actuel
temp = grid[i][j];
} else if (temp == grid[i][j]) {
// Si l'élément est identique au "temp", fusionner
newRow[newPos] = temp * 2; // Fusionner en doublant la valeur
temp = 0; // Réinitialiser temp après fusion
newPos--; // Déplacer la position pour l'élément suivant
} else {
// Si l'élément n'est pas identique à "temp", le placer dans la nouvelle ligne
newRow[newPos] = temp;
temp = grid[i][j]; // Mettre à jour temp avec le nouvel élément
newPos--; // Déplacer la position pour l'élément suivant
}
}
}
// Si l'élément restant dans "temp" n'a pas été placé, on le place
if (temp != 0) {
newRow[newPos] = temp;
}
// Mettre à jour la grille avec la nouvelle ligne
grid[i] = newRow;
}
emit addRandomElement();
emit gridChanged();
}
void GameManager::moveUp() {
// Implémentation du mouvement vers le haut
for (int j = 0; j < 4; j++) {
std::vector<int> newCol(4, 0); // Créer une nouvelle ligne vide
int newPos = 0; // Position pour insérer un élément non nul (commence par la fin)
int temp = 0; // Variable pour mémoriser l'élément à fusionner
// Parcourir la ligne de droite à gauche
for (int i = 0; i <4; i++) {
if (grid[i][j] != 0) { // Si l'élément n'est pas nul
if (temp == 0) {
// Mémoriser l'élément actuel
temp = grid[i][j];
} else if (temp == grid[i][j]) {
// Si l'élément est identique au "temp", fusionner
newCol[newPos] = temp * 2; // Fusionner en doublant la valeur
temp = 0; // Réinitialiser temp après fusion
newPos++; // Déplacer la position pour l'élément suivant
} else {
// Si l'élément n'est pas identique à "temp", le placer dans la nouvelle ligne
newCol[newPos] = temp;
temp = grid[i][j]; // Mettre à jour temp avec le nouvel élément
newPos++; // Déplacer la position pour l'élément suivant
}
}
}
// Si l'élément restant dans "temp" n'a pas été placé, on le place
if (temp != 0) {
newCol[newPos] = temp;
}
// Mettre à jour la colonne dans la grille
for (int i=0;i<4;i++){
grid[i][j]=newCol[i];
}
}
emit addRandomElement();
emit gridChanged();
}
void GameManager::moveDown() {
// Implémentation du mouvement vers le bas
for (int j = 0; j < 4; j++) {
std::vector<int> newCol(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 temp = 0; // Variable pour mémoriser l'élément à fusionner
// Parcourir la ligne de droite à gauche
for (int i = 3; i>=0; i--) {
if (grid[i][j] != 0) { // Si l'élément n'est pas nul
if (temp == 0) {
// Mémoriser l'élément actuel
temp = grid[i][j];
} else if (temp == grid[i][j]) {
// Si l'élément est identique au "temp", fusionner
newCol[newPos] = temp * 2; // Fusionner en doublant la valeur
temp = 0; // Réinitialiser temp après fusion
newPos--; // Déplacer la position pour l'élément suivant
} else {
// Si l'élément n'est pas identique à "temp", le placer dans la nouvelle ligne
newCol[newPos] = temp;
temp = grid[i][j]; // Mettre à jour temp avec le nouvel élément
newPos--; // Déplacer la position pour l'élément suivant
}
}
}
// Si l'élément restant dans "temp" n'a pas été placé, on le place
if (temp != 0) {
newCol[newPos] = temp;
}
// Mettre à jour la colonne dans la grille
for (int i=0;i<4;i++){
grid[i][j]=newCol[i];
}
}
emit addRandomElement();
emit gridChanged();
}
void GameManager::restartGame() {
......@@ -43,14 +190,40 @@ void GameManager::restartGame() {
grid[rg1][col1]=2;
grid[rg2][col2]=2;
emit gridChanged();
}
void GameManager::addRandomElement() {
// Créer une liste pour stocker les indices des cases vides
std::vector<std::pair<int, int>> emptyCells;
// Parcourir la grille pour trouver toutes les cases vides
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (grid[i][j] == 0) { // Si la case est vide (valeur 0)
emptyCells.push_back({i, j}); // Ajouter l'indice de la case à la liste
}
}
}
// Si la liste des cases vides n'est pas vide, on ajoute un nouveau '2'
if (!emptyCells.empty()) {
// Choisir une case vide aléatoire
int randomIndex = rand() % emptyCells.size();
int row = emptyCells[randomIndex].first;
int col = emptyCells[randomIndex].second;
// Placer un '2' dans cette case
grid[row][col] = 2;
}
}
QVector<int> GameManager::getGridValues() const {
QVector<int> flattenedGrid;
for (const auto& row : grid) { // 🔹 Parcourt chaque ligne
for (int value : row) { // 🔹 Parcourt chaque colonne
for (const auto& row : grid) { // Parcourt chaque ligne
for (int value : row) { // Parcourt chaque colonne
flattenedGrid.append(value);
}
}
......
......@@ -22,6 +22,7 @@ public:
private:
std::vector<std::vector<int>> grid;
Q_INVOKABLE void addRandomElement();
signals:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment