PROBLEME DE FREEZE // LE JEU DE LA VIE // C++ - SFML

Fermé
Adrenokrome Messages postés 4 Date d'inscription dimanche 13 juin 2021 Statut Membre Dernière intervention 13 juin 2021 - Modifié le 13 juin 2021 à 04:20
Adrenokrome Messages postés 4 Date d'inscription dimanche 13 juin 2021 Statut Membre Dernière intervention 13 juin 2021 - 13 juin 2021 à 18:53
Bonjour!

J'ai commencé à programmer en C++ il y a deux mois et je me suis lancé le défi de coder le jeu de la vie avec la bibliothèque graphique SFML.

Toutes les fonctions de mon programme fonctionnent:

- Création et initialisation d'un tableau de type Cellule (Objet de classe Cellule)
- Création et initialisation d'un tableau tampon de type Cellule (Objet de classe Cellule)
- Scanne des cellules périphériques à une cellule donnée pour calculer le nombre de cellules voisines vivantes
- Remplissage du tableau tampon en fonction des règles du jeu de la vie et de l'état des cellules du tableau
- Copie du tableau tampon dans le tableau

Dans la boucle principale du jeu j'ai inséré du code pour recevoir les coordonnées du pointeur de la souris sur la fenêtre du jeu (en prévision de créer une fonction qui permet à l'utilisateur de créer un modèle de départ: on clique sur les cellules d'une grille vierge et celles-ci changent d'état (dead -> alive ou alive-dead).

Lorsque je lance mon programme, l'exécution freeze aléatoirement si je ne touche à rien mais s'exécute normalement lorsque je bouge le pointeur de la souris sur la fenêtre du jeu...

L'un d'entre vous aurait-il un petit moment pour jeter un coup d'œil à mon code, et me filer un coup de pouce pour résoudre ce dernier problème :)?

Merci x1000 par avance!



A voir également:

5 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
13 juin 2021 à 10:15
Bonjour,

Pas facile de jeter un coup d'oeil sur une image !

merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

#include <iostream>

int main(){
    std::cout << "Hello World!";
    return 0;
}
0
Adrenokrome Messages postés 4 Date d'inscription dimanche 13 juin 2021 Statut Membre Dernière intervention 13 juin 2021
Modifié le 13 juin 2021 à 19:15
static sf::RenderWindow grille(sf::VideoMode(largeurGrille, hauteurGrille), "___Le jeu de la vie___");
 initialiser_rectangle_fond_grille(&fondGrille);

 //OUVERTURE DE LA FENETRE
 while (grille.isOpen()) {
  sf::Event evenement;
  while (grille.pollEvent(evenement)) {

   // Boucle du jeu
   if (evenement.type == sf::Event::Closed) {
    grille.close();
   }

   if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
    positionSouris = sf::Mouse::getPosition(grille);
    std::cout << "souris_x: " << positionSouris.x << " souris_y: " << positionSouris.y << std::endl;
   }

   // AFFICHE LE TABLEAU
   for (int i = 0; i < nombreColonnesTableau; i++) {
    for (int j = 0; j < nombreLignesTableau; j++) {
     grille.draw((*(ptr_tableauCellules+i*nombreColonnesTableau+j)).get_rectangleCellule());
    }
   }
   regles_jeu_de_la_vie(ptr_tableauCellules, ptr_tableauTamponCellules);

   copier_tableau_cellules(ptr_tableauCellules, ptr_tableauTamponCellules);

   sf::sleep(sf::milliseconds(10));
   /* grille.draw(fondGrille); */

   grille.display();
   grille.clear();
   // Fin de la boucle du jeu


  }
 }
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
13 juin 2021 à 12:15
Bonjour,

ton code dis :
- s'il y a un événement quelconque, essayer de le traiter, puis dessiner la grille et la faire vivre.
- si pas d'événement alors ne rien faire et recommencer. Donc pas de nouvelle image.
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
13 juin 2021 à 18:01
tu n'as pas bien lu le tuto, ton code ne ressemble pas à l'exemple que je t'ai donné ...
0
Adrenokrome Messages postés 4 Date d'inscription dimanche 13 juin 2021 Statut Membre Dernière intervention 13 juin 2021
13 juin 2021 à 18:53
Je ne comprends pas, j'ai cette fois bien mis le code complet de mon main et pourtant, ça ne donne pas le résultat escompté. Pourtant, comme le C++ ne fait partie des valeurs du menu déroulant j'ai bien mis la balise <code>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Adrenokrome Messages postés 4 Date d'inscription dimanche 13 juin 2021 Statut Membre Dernière intervention 13 juin 2021
Modifié le 13 juin 2021 à 19:16
Phil_1857: Effectivement, je pensais que mon code était bien entre les balises < code> et qu'il n'y avait pas la coloration syntaxique car je n'y avais intégré qu'un bout de code et non la totalité du main. Je remets l'intégralité de mon main pour voir si ça marche :)!

Dalfab: Merci pour ton retour, surtout qu'il est suffisamment clair pour m'aider à trouver la solution sans pour autant me la servir sur un plateau: c'était exactement ce que je cherchais.

#include <iostream>
#include <string>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <cstdio>
#include "Cellule.h"
#include <vector>

// VARIABLES

int nombreColonnesTableau = 0;
int nombreLignesTableau = 0;
int largeurCellule = 0;
int hauteurCellule = 0;
int hauteurGrille = 0;
int largeurGrille = 0;
/* sf::RenderWindow grille; */
sf::RectangleShape fondGrille;
sf::Vector2i positionSouris;
int couleurCelluleDead[3] = {0};
int *ptr_ccd = &couleurCelluleDead[0];
int couleurCelluleAlive[3] = {0};
int *ptr_cca = &couleurCelluleAlive[0];

// COULEURS (R,G,B)

int noir[3] = { 0,0,0 };
int *ptr_noir = &noir[0];
int rouge[3] = { 255,0,0 };
int *ptr_rouge = &rouge[0];
int jaune[3] = { 255,255,0 };
int *ptr_jaune = &jaune[0];
int orange[3] = { 255,128,64 };
int *ptr_orange = &orange[0];
int rose[3] = { 255,0,255 };
int *ptr_rose = &rose[0];


// FONCTIONS

// SAISIE DES DIMENSIONS INITIALES + COULEURS INITIALES
void saisir_les_valeurs_initiales(int *ptr_nct, int *ptr_nlt, int *ptr_lc, int *ptr_hc, int *ptr_lg, int *ptr_hg, int *ptr_cd, int *ptr_ca) {

 int choix_couleur = 0;

 std::cout << "Veuillez saisir le nombre de colonnes de votre tableau (largeur): ";
 std::cin >> *ptr_nct;
 std::cout << "Veuillez saisir le nombre de lignes de votre tableau (hauteur): ";
 std::cin >> *ptr_nlt;
 std::cout << "Veuillez saisir la largeur des cellules (en pixels): ";
 std::cin >> *ptr_lc;
 std::cout << "Veuillez saisir la hauteur des cellules (en pixels): ";
 std::cin >> *ptr_hc;
 std::cout << "\n" << std::endl;


*ptr_lg = *ptr_lc * *ptr_nct; *ptr_hg = *ptr_hc * *ptr_nlt; std::cout << "Veuillez saisir la couleur d'une cellule morte:\n-1 noir\n-2 rouge\n-3 jaune\n-4 orange\n-5 rose\n"; std::cin >> choix_couleur; std::cout << "choix couleur - couleur dead: " << choix_couleur << std::endl; switch (choix_couleur) { case 1:  for (int i = 0; i < 3; i++) { *(ptr_ccd + i) = *(ptr_noir + i);} break; case 2:  for (int i = 0; i < 3; i++) { *(ptr_ccd + i) = *(ptr_rouge + i);} break; case 3:  for (int i = 0; i < 3; i++) { *(ptr_ccd + i) = *(ptr_jaune + i);} break; case 4:  for (int i = 0; i < 3; i++) { *(ptr_ccd + i) = *(ptr_orange + i);} break; case 5:  for (int i = 0; i < 3; i++) { *(ptr_ccd + i) = *(ptr_rose + i);} break; default:  for (int i = 0; i < 3; i++) { *(ptr_ccd + i) = *(ptr_noir + i); }  std::cout << "votre choix ne correspond a aucune couleur. La cellule a ete initialise a NOIR\n" << std::endl;  break; } std::cout << "Veuillez saisir la couleur d'une cellule vivante:\n-1 noir\n-2 rouge\n-3 jaune\n-4 orange\n-5 rose\n"; std::cin >> choix_couleur; std::cout << "choix couleur - couleur alive: " << choix_couleur << std::endl; switch (choix_couleur) { case 1:  for (int i = 0; i < 3; i++) { *(ptr_cca + i) = *(ptr_noir + i); } break; case 2:  for (int i = 0; i < 3; i++) { *(ptr_cca + i) = *(ptr_rouge + i); } break; case 3:  for (int i = 0; i < 3; i++) { *(ptr_cca + i) = *(ptr_jaune + i); } break; case 4:  for (int i = 0; i < 3; i++) { *(ptr_cca + i) = *(ptr_orange + i); } break; case 5:  for (int i = 0; i < 3; i++) { *(ptr_cca + i) = *(ptr_rose + i); } break; default:  for (int i = 0; i < 3; i++) { *(ptr_cca + i) = *(ptr_rouge + i); }  std::cout << "votre choix ne correspond a aucune couleur. La cellule a ete initialise a NOIR\n" << std::endl;  break; }}// ____________FT - AFFICHAGE DES DIMENSIONS INITIALESvoid afficher_les_valeurs_initiales(int *ptr_nct, int *ptr_nlt, int *ptr_lc, int *ptr_hc, int *ptr_lg, int *ptr_hg) { std::cout << "Largeur du tableaux: " << *ptr_nct << " cellules" << std::endl; std::cout << "Hauteur du tableaux: " << *ptr_nlt << " cellules" << std::endl; std::cout << "Largeur de la cellule: " << *ptr_lc << " pixels" << std::endl; std::cout << "Hauteur de la cellule: " << *ptr_hc << " pixels" << std::endl; std::cout << "Largeur de la grille: " << *ptr_lg << " pixels" << std::endl; std::cout << "Hauteur de la grille: " << *ptr_hg << " pixels" << std::endl; std::cout << std::endl;}// ____________FT - INITIALISE LE RECTANGLE POUR LE FOND DE LA GRILLEvoid initialiser_rectangle_fond_grille(sf::RectangleShape *fg) { (*fg).setFillColor(sf::Color(255, 128, 64)); (*fg).setPosition(0, 0); (*fg).setSize(sf::Vector2f((float)largeurGrille, (float)hauteurGrille));}// INITIALISER LES VALEURS DES ATTRIBUTS D'UNE CELLULE - A DEADvoid initialiser_cellule(Cellule *ptr_cel, int pc_X, int pc_Y) { (*(ptr_cel)).set_largeurCellule(largeurCellule); (*(ptr_cel)).set_hauteurCellule(hauteurCellule); (*(ptr_cel)).set_etatCellule(dead); (*(ptr_cel)).set_positionCellule_X(pc_X * largeurCellule); (*(ptr_cel)).set_positionCellule_Y(pc_Y * hauteurCellule); (*(ptr_cel)).set_couleur_dead(ptr_ccd); (*(ptr_cel)).set_couleur_alive(ptr_cca); (*(ptr_cel)).set_nombreVoisinsCellule(0); (*(ptr_cel)).initialiser_rectangle((*(ptr_cel)).get_etatCellule());}// SWITCHER L'ETAT D'UNE CELLULEvoid switcher_cellule(Cellule *ptr_cel) { if ((*ptr_cel).get_etatCellule() == dead) {  (*ptr_cel).set_couleur_alive(ptr_cca);  (*ptr_cel).set_etatCellule(alive);  (*ptr_cel).initialiser_rectangle((*ptr_cel).get_etatCellule()); } else if ((*ptr_cel).get_etatCellule() == alive) {  (*ptr_cel).set_couleur_alive(ptr_ccd);  (*ptr_cel).set_etatCellule(dead);  (*ptr_cel).initialiser_rectangle((*ptr_cel).get_etatCellule()); }}// SWITCHER L'ETAT DE TOUTES LES CELLULES D'UN TABLEAUvoid switcher_tableau_cellules(Cellule *ptr_tabCel) { for (int i = 0; i < nombreColonnesTableau; i++) {  for (int j = 0; j < nombreLignesTableau; j++) {   switcher_cellule(&(*(ptr_tabCel + i * nombreColonnesTableau + j)));  } }}// INITIALISER LES VALEURS DES ATTRIBUTS DE CHAQUE CELLULE D'UN TABLEAU DE CELLULESvoid initialiser_tableau_cellules(Cellule *ptr_tabCel, int nct, int nlt) { for (int i = 0; i < nct; i++) {  for (int j = 0; j < nlt; j++) {   initialiser_cellule( &(*(ptr_tabCel + i * nct + j)) ,i,j);  } }}// REMPLIR ALEATOIREMENT L'ETAT D'UNE CELLULEvoid remplir_aleatoirement_cellule(Cellule *ptr_cel) { int etatAleatoire = (int)(rand()%10); if (etatAleatoire%2 == alive) {  (*ptr_cel).set_couleur_alive(ptr_cca);  (*ptr_cel).set_etatCellule(alive);  (*ptr_cel).initialiser_rectangle((*ptr_cel).get_etatCellule()); } else if (etatAleatoire % 2 == dead) {  (*ptr_cel).set_couleur_alive(ptr_ccd);  (*ptr_cel).set_etatCellule(dead);  (*ptr_cel).initialiser_rectangle((*ptr_cel).get_etatCellule()); }}// REMPLIR ALEATOIREMENT UN TABLEAU DE CELLULEvoid remplir_aleatoirement_tableau(Cellule *ptr_tabCel) { for (int i = 0; i < nombreColonnesTableau; i++) {  for (int j = 0; j < nombreLignesTableau; j++) {   remplir_aleatoirement_cellule(&(*(ptr_tabCel + i * nombreColonnesTableau + j)));  } }}// SCANNE LE NOMBRE DE VOISINS VIVANTS D'UNE CELLULE DONNEE DANS UN TABLEAU DONNEint scanne_tableau_cellules(Cellule *ptr_tabCel, int xCel, int yCel) { int compteur_alive = 0; // CAS 0,0 if (xCel == 0 && yCel == 0) {  //std::cout << " CAS 0,0 " << std::endl;  for (int i = xCel; i <= xCel + 1; i++) {   for (int j = yCel; j <= yCel + 1; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }    //std::cout << "i: " << i << " / j: " << j << " / Compteur_alive: " << compteur_alive << std::endl;   }  } } // CAS 1,0 else if (xCel == nombreColonnesTableau - 1 && yCel == 0) {  //std::cout << " CAS 1,0 " << std::endl;  for (int i = xCel - 1; i <= xCel + 1; i++) {   for (int j = yCel; j <= yCel + 1; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } // CAS 0,1 else if (xCel == 0 && yCel == nombreLignesTableau - 1) {  //std::cout << " CAS 0,1 " << std::endl;  for (int i = xCel; i <= xCel + 1; i++) {   for (int j = yCel - 1; j <= yCel; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } // CAS 1,1 else if (xCel == nombreColonnesTableau - 1 && yCel == nombreLignesTableau - 1) {  //std::cout << " CAS 1,1 " << std::endl;  for (int i = xCel - 1; i <= xCel; i++) {   for (int j = yCel - 1; j <= yCel; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } // CAS LIGNE GAUCHE else if (xCel == 0 && yCel >= 1 && yCel <= nombreLignesTableau - 2) {  //std::cout << " CAS LIGNE GAUCHE " << std::endl;  for (int i = xCel; i <= xCel + 1; i++) {   for (int j = yCel - 1; j <= yCel + 1; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } // CAS LIGNE DROITE else if (xCel == nombreColonnesTableau - 1 && yCel >= 1 && yCel <= nombreLignesTableau - 2) {  //std::cout << " CAS LIGNE DROITE " << std::endl;  for (int i = xCel - 1; i <= xCel; i++) {   for (int j = yCel - 1; j <= yCel + 1; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } // CAS LIGNE DESSUS else if (yCel == 0 && xCel >= 1 && xCel <= nombreColonnesTableau - 2) {  //std::cout << " CAS LIGNE DESSUS " << std::endl;  for (int i = xCel - 1; i <= xCel + 1; i++) {   for (int j = yCel; j <= yCel + 1; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } // CAS LIGNE DESSOUS else if (yCel == nombreLignesTableau - 1 && xCel >= 1 && xCel <= nombreColonnesTableau - 2) {  //std::cout << " CAS LIGNE DESSOUS " << std::endl;  for (int i = xCel - 1; i <= xCel + 1; i++) {   for (int j = yCel - 1; j <= yCel; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } // CAS GENERAL else if (xCel >= 1 && xCel <= nombreColonnesTableau - 2 && yCel >= 1 && yCel <= nombreLignesTableau - 2) {  //std::cout << " CAS GENERAL " << std::endl;  for (int i = xCel - 1; i <= xCel + 1; i++) {   for (int j = yCel - 1; j <= yCel + 1; j++) {    if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive) {     compteur_alive++;    }   }  } } //RETOUR DU NOMBRE DE VOISINS if ((*(ptr_tabCel + xCel * nombreColonnesTableau + yCel)).get_etatCellule() == alive) {  return (compteur_alive - 1); } else {  return compteur_alive; }}// INITIALISE LE NOMBRE DE VOISINS DANS LE TABLEAUvoid initialiser_nombre_voisins_tableau(Cellule *ptr_tabCel) { for (int i = 0; i < nombreColonnesTableau; i++) {  for (int j = 0; j < nombreLignesTableau; j++) {   int nv = scanne_tableau_cellules(ptr_tabCel, i, j);   (*(ptr_tabCel + i * nombreColonnesTableau + j)).set_nombreVoisinsCellule(nv);  } }}// COPIE UN TABLEAU DE CELLULE DANS UN AUTREvoid copier_tableau_cellules(Cellule *ptr_tabCel_1, Cellule *ptr_tabCel_2) { for (int i = 0; i < nombreColonnesTableau; i++) {  for (int j = 0; j < nombreLignesTableau; j++) {   *(ptr_tabCel_1 + i * nombreColonnesTableau + j) = *(ptr_tabCel_2 + i * nombreColonnesTableau + j);  } }}// SCANNE LE NOMBRE DE VOISINS DU TABLEAU ET REMPLIT LE TAMPON EN FONCTIONvoid regles_jeu_de_la_vie(Cellule *ptr_tabCel, Cellule *ptr_tabTamCel) { for (int i = 0; i < nombreColonnesTableau; i++) {  for (int j = 0; j < nombreLignesTableau; j++) {   if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == alive && (*(ptr_tabCel + i * nombreColonnesTableau + j)).get_nombreVoisinsCellule() != 2 && (*(ptr_tabCel + i * nombreColonnesTableau + j)).get_nombreVoisinsCellule() != 3) {    (*(ptr_tabTamCel + i * nombreColonnesTableau + j)).set_etatCellule(dead);    (*(ptr_tabTamCel + i * nombreColonnesTableau + j)).initialiser_rectangle(dead);   }   else if ((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule() == dead && (*(ptr_tabCel + i * nombreColonnesTableau + j)).get_nombreVoisinsCellule() == 3) {    (*(ptr_tabTamCel + i * nombreColonnesTableau + j)).set_etatCellule(alive);    (*(ptr_tabTamCel + i * nombreColonnesTableau + j)).initialiser_rectangle(alive);   }   else { *(ptr_tabTamCel + i * nombreColonnesTableau + j) = *(ptr_tabCel + i * nombreColonnesTableau + j); }   } } initialiser_nombre_voisins_tableau(ptr_tabTamCel);}// INITIALISE LES RECTANGLES DES CELLULES D'UN TABLEAUvoid initialise_rectangles_tableau(Cellule *ptr_tabCel) { for (int i = 0; i < nombreColonnesTableau; i++) {  for (int j = 0; j < nombreLignesTableau; j++) {   (*(ptr_tabCel + i * nombreColonnesTableau + j)).initialiser_rectangle((*(ptr_tabCel + i * nombreColonnesTableau + j)).get_etatCellule());  } }}// REMPLISSAGE TABLEAU - MODELE CANONvoid modele_1(Cellule *ptr_modele) { for (int i = 0; i < nombreColonnesTableau; i++) {  for (int j = 0; j < nombreLignesTableau; j++) {   (*(ptr_modele + 24 * nombreColonnesTableau + 0)).set_etatCellule(alive);   (*(ptr_modele + 24 * nombreColonnesTableau + 0)).initialiser_rectangle(alive);   (*(ptr_modele + 22 * nombreColonnesTableau + 1)).set_etatCellule(alive);   (*(ptr_modele + 22 * nombreColonnesTableau + 1)).initialiser_rectangle(alive);   (*(ptr_modele + 24 * nombreColonnesTableau + 1)).set_etatCellule(alive);   (*(ptr_modele + 24 * nombreColonnesTableau + 1)).initialiser_rectangle(alive);   (*(ptr_modele + 12 * nombreColonnesTableau + 2)).set_etatCellule(alive);   (*(ptr_modele + 12 * nombreColonnesTableau + 2)).initialiser_rectangle(alive);   (*(ptr_modele + 13 * nombreColonnesTableau + 2)).set_etatCellule(alive);   (*(ptr_modele + 13 * nombreColonnesTableau + 2)).initialiser_rectangle(alive);   (*(ptr_modele + 20 * nombreColonnesTableau + 2)).set_etatCellule(alive);   (*(ptr_modele + 20 * nombreColonnesTableau + 2)).initialiser_rectangle(alive);   (*(ptr_modele + 21 * nombreColonnesTableau + 2)).set_etatCellule(alive);   (*(ptr_modele + 21 * nombreColonnesTableau + 2)).initialiser_rectangle(alive);   (*(ptr_modele + 34 * nombreColonnesTableau + 2)).set_etatCellule(alive);   (*(ptr_modele + 34 * nombreColonnesTableau + 2)).initialiser_rectangle(alive);   (*(ptr_modele + 35 * nombreColonnesTableau + 2)).set_etatCellule(alive);   (*(ptr_modele + 35 * nombreColonnesTableau + 2)).initialiser_rectangle(alive);   (*(ptr_modele + 11 * nombreColonnesTableau + 3)).set_etatCellule(alive);   (*(ptr_modele + 11 * nombreColonnesTableau + 3)).initialiser_rectangle(alive);   (*(ptr_modele + 15 * nombreColonnesTableau + 3)).set_etatCellule(alive);   (*(ptr_modele + 15 * nombreColonnesTableau + 3)).initialiser_rectangle(alive);   (*(ptr_modele + 21 * nombreColonnesTableau + 3)).set_etatCellule(alive);   (*(ptr_modele + 21 * nombreColonnesTableau + 3)).initialiser_rectangle(alive);   (*(ptr_modele + 20 * nombreColonnesTableau + 3)).set_etatCellule(alive);   (*(ptr_modele + 20 * nombreColonnesTableau + 3)).initialiser_rectangle(alive);   (*(ptr_modele + 34 * nombreColonnesTableau + 3)).set_etatCellule(alive);   (*(ptr_modele + 34 * nombreColonnesTableau + 3)).initialiser_rectangle(alive);   (*(ptr_modele + 35 * nombreColonnesTableau + 3)).set_etatCellule(alive);   (*(ptr_modele + 35 * nombreColonnesTableau + 3)).initialiser_rectangle(alive);   (*(ptr_modele + 0 * nombreColonnesTableau + 4)).set_etatCellule(alive);   (*(ptr_modele + 0 * nombreColonnesTableau + 4)).initialiser_rectangle(alive);   (*(ptr_modele + 1 * nombreColonnesTableau + 4)).set_etatCellule(alive);   (*(ptr_modele + 1 * nombreColonnesTableau + 4)).initialiser_rectangle(alive);   (*(ptr_modele + 10 * nombreColonnesTableau + 4)).set_etatCellule(alive);   (*(ptr_modele + 10 * nombreColonnesTableau + 4)).initialiser_rectangle(alive);   (*(ptr_modele + 16 * nombreColonnesTableau + 4)).set_etatCellule(alive);   (*(ptr_modele + 16 * nombreColonnesTableau + 4)).initialiser_rectangle(alive);   (*(ptr_modele + 20 * nombreColonnesTableau + 4)).set_etatCellule(alive);   (*(ptr_modele + 20 * nombreColonnesTableau + 4)).initialiser_rectangle(alive);   (*(ptr_modele + 21 * nombreColonnesTableau + 4)).set_etatCellule(alive);   (*(ptr_modele + 21 * nombreColonnesTableau + 4)).initialiser_rectangle(alive);   (*(ptr_modele + 0 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 0 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 1 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 1 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 10 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 10 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 14 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 14 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 16 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 16 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 17 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 17 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 22 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 22 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 24 * nombreColonnesTableau + 5)).set_etatCellule(alive);   (*(ptr_modele + 24 * nombreColonnesTableau + 5)).initialiser_rectangle(alive);   (*(ptr_modele + 10 * nombreColonnesTableau + 6)).set_etatCellule(alive);   (*(ptr_modele + 10 * nombreColonnesTableau + 6)).initialiser_rectangle(alive);   (*(ptr_modele + 16 * nombreColonnesTableau + 6)).set_etatCellule(alive);   (*(ptr_modele + 16 * nombreColonnesTableau + 6)).initialiser_rectangle(alive);   (*(ptr_modele + 24 * nombreColonnesTableau + 6)).set_etatCellule(alive);   (*(ptr_modele + 24 * nombreColonnesTableau + 6)).initialiser_rectangle(alive);   (*(ptr_modele + 11 * nombreColonnesTableau + 7)).set_etatCellule(alive);   (*(ptr_modele + 11 * nombreColonnesTableau + 7)).initialiser_rectangle(alive);   (*(ptr_modele + 15 * nombreColonnesTableau + 7)).set_etatCellule(alive);   (*(ptr_modele + 15 * nombreColonnesTableau + 7)).initialiser_rectangle(alive);   (*(ptr_modele + 12 * nombreColonnesTableau + 8)).set_etatCellule(alive);   (*(ptr_modele + 12 * nombreColonnesTableau + 8)).initialiser_rectangle(alive);   (*(ptr_modele + 13 * nombreColonnesTableau + 8)).set_etatCellule(alive);   (*(ptr_modele + 13 * nombreColonnesTableau + 8)).initialiser_rectangle(alive);  } }}// ____________FT - INITIALISER LES VALEURS DES ATTRIBUTS D'UNE CELLULEvoid test_initialiser_cellule(Cellule *ptr_tabCel) { int xCel = 0; int yCel = 0; std::cout << "Saisir la valeur en X de la cellule: "; // !!! FAIRE UN TEST DE DEPASSEMENT DE TABLEAU std::cin >> xCel; std::cout << "Saisir la valeur en X de la cellule: "; std::cin >> yCel; std::cout << "Cellule [" << xCel << "][" << yCel << "]\n" << std::endl; std::cout << "\n ATTRIBUTS DE LA CELLULE AVANT INITIALISATION:" << std::endl; (*(ptr_tabCel + xCel * nombreColonnesTableau + yCel)).afficher_attributs_cellule(); initialiser_cellule(&(*(ptr_tabCel + xCel * nombreColonnesTableau + yCel)), xCel, yCel); std::cout << "\n ATTRIBUTS DE LA CELLULE APRES INITIALISATION:" << std::endl; (*(ptr_tabCel + xCel * nombreColonnesTableau + yCel)).afficher_attributs_cellule();}// ____________FT - INITIALISER LE NOMBRE DE VOISINS VIVANTS D'UNE CELLULEvoid test_initialiser_nombre_voisins_vivants(Cellule *ptr_tabCel) { int xCel = 0; int yCel = 0; std::cout << "Saisir la valeur en X de la cellule: "; // !!! FAIRE UN TEST DE DEPASSEMENT DE TABLEAU std::cin >> xCel; std::cout << "Saisir la valeur en X de la cellule: "; std::cin >> yCel; std::cout << "Cellule [" << xCel << "][" << yCel << "]\n" << std::endl; std::cout << "\n ATTRIBUTS DE LA CELLULE AVANT CALCUL DU NOMBRE DE VOISINS VIVANTS:" << std::endl; (*(ptr_tabCel + xCel * nombreColonnesTableau + yCel)).afficher_attributs_cellule(); int nv = scanne_tableau_cellules(ptr_tabCel, xCel, yCel); (*(ptr_tabCel + xCel * nombreColonnesTableau + yCel)).set_nombreVoisinsCellule(nv); std::cout << "\n ATTRIBUTS DE LA CELLULE APRES CALCUL DU NOMBRE DE VOISINS VIVANTS:" << std::endl; (*(ptr_tabCel + xCel * nombreColonnesTableau + yCel)).afficher_attributs_cellule();}// FONCTION PRINCIPALEint main(){ srand(time(NULL)); saisir_les_valeurs_initiales(&nombreColonnesTableau, &nombreLignesTableau, &largeurCellule, &hauteurCellule, &largeurGrille, &hauteurGrille, ptr_ccd, ptr_cca); afficher_les_valeurs_initiales(&nombreColonnesTableau, &nombreLignesTableau, &largeurCellule, &hauteurCellule, &largeurGrille, &hauteurGrille); std::vector<Cellule> tableauCellules(nombreColonnesTableau * nombreLignesTableau); Cellule *ptr_tableauCellules = &tableauCellules[0]; std::vector<Cellule> tableauTamponCellules(nombreColonnesTableau * nombreLignesTableau); Cellule *ptr_tableauTamponCellules = &tableauTamponCellules[0]; //test_initialiser_cellule(ptr_tableauCellules);//  initialiser_tableau_cellules(ptr_tableauCellules, nombreColonnesTableau, nombreLignesTableau); initialiser_tableau_cellules(ptr_tableauTamponCellules, nombreColonnesTableau, nombreLignesTableau); //switcher_tableau_cellules(ptr_tableauCellules);// //remplir_aleatoirement_tableau(ptr_tableauCellules); modele_1(ptr_tableauCellules); //test_initialiser_nombre_voisins_vivants(ptr_tableauCellules);// initialiser_nombre_voisins_tableau(ptr_tableauCellules); //regles_jeu_de_la_vie(ptr_tableauCellules, ptr_tableauTamponCellules); //copier_tableau_cellules(ptr_tableauCellules, ptr_tableauTamponCellules); //initialise_rectangles_tableau(ptr_tableauCellules); //initialiser_nombre_voisins_tableau(ptr_tableauCellules); static sf::RenderWindow grille(sf::VideoMode(largeurGrille, hauteurGrille), "___Le jeu de la vie___"); initialiser_rectangle_fond_grille(&fondGrille); //OUVERTURE DE LA FENETRE while (grille.isOpen()) {  sf::Event evenement;  while (grille.pollEvent(evenement)) {   // Boucle du jeu   if (evenement.type == sf::Event::Closed) {    grille.close();   }   if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {    positionSouris = sf::Mouse::getPosition(grille);    std::cout << "souris_x: " << positionSouris.x << " souris_y: " << positionSouris.y << std::endl;   }   // AFFICHE LE TABLEAU   for (int i = 0; i < nombreColonnesTableau; i++) {    for (int j = 0; j < nombreLignesTableau; j++) {     grille.draw((*(ptr_tableauCellules+i*nombreColonnesTableau+j)).get_rectangleCellule());    }   }   regles_jeu_de_la_vie(ptr_tableauCellules, ptr_tableauTamponCellules);   copier_tableau_cellules(ptr_tableauCellules, ptr_tableauTamponCellules);   sf::sleep(sf::milliseconds(10));   /* grille.draw(fondGrille); */   grille.display();   grille.clear();   // Fin de la boucle du jeu  } } // FIN MAIN return 0;} 
0