/* COURS GIT Programme à compléter à plusieurs Thibaut CHARLES pour le Club Elec ISEN Brest 2013 */ #include #include int grille[20][20]; void RemplirGrille(); void AfficherGrille(); int CompterCellulesAdjascentes(int x, int y); void GrilleSuivante(); int NouvelEtatCellule(int etatCellule, int cellulesVivantesAutour); void RecopierGrille(int grilleOriginale[20][20], int grilleDestination[20][20]); /** @brief Remplis la grille en y mettant aléatoirement des cellules vivantes ou mortes **/ void RemplirGrille() { //Parcourir la grille de jeu // remplir chaque case avec la valeur de rand()%2 // Ne pas oublier d'appeler srand(time(NULL)); au début de la fonction // //COMPLETER ICI } #define CELL_VIVANTE "\e[42m \e[0m" #define CELL_MORTE "\e[40m \e[0m" /** @brief Affiche la grille dans la console **/ void AfficherGrille() { //Parcourir la grille // Afficher CELL_VIVANTE si la valeur vaut 1 // CELL_MORTE sinon // //Note: Ne pas oublier le \n à la fin de chaque ligne ;) // //COMPLETER ICI } /** @brief Compte le nombre de cellules vivantes autour de celle désignée par x et y @param x la position de la cellule au centre @param y la position de la cellule au centre @return le nombre de cellules vivantes, logiquement entre 0 et 8 **/ int CompterCellulesAdjascentes(int x, int y) { //Parcourir les 8 cellules adjacentes à la cellule indiquée par x et y // Attention à ne pas compter les cellules en dehors de la grille de jeu // Attention à ne pas compter la cellule indiquée // //COMPLETER ICI } /** @brief Met à jour la grille @return le nombre de cellules vivantes, logiquement entre 0 et 8 **/ void GrilleSuivante() { int nouvelleGrille[20][20]; //Parcourir de la grille de jeu (grille) afin de déterminer son prochain état // Le nouvel état de chaque cellule est calculé avec NouvelEtatCellule et CompterCellulesAdjascentes // Le nouvel état de chaque cellule doit être placé dans nouvelleGrille // //COMPLETER ICI RecopierGrille(nouvelleGrille, grille); } /** @brief Calcule le nouvel état (morte/vivante) de la cellule en fonction du nombre de cellules vivantes autour. @param etatCellule l'état actuel de la cellule @param etatCellule Le nombre de cellules vivantes autour @return Nouvel état de la cellule : 0 si morte, 1 si vivante **/ int NouvelEtatCellule(int etatCellule, int cellulesVivantesAutour) { //Déterminer le prochain état d'une cellule en fonction du nombre de cellules autour // Une cellule morte possédant exactement trois voisines vivantes devient vivante (elle naît). // Une cellule vivante possédant deux ou trois voisines vivantes le reste, sinon elle meurt. // //COMPLETER ICI } /** @brief Recopie les données de la grille originale vers la grille de destination **/ void RecopierGrille(int grilleOriginale[20][20], int grilleDestination[20][20]) { int i, j; for(i=0 ; i<20 ; i++) { for(j=0 ; j<20 ; j++) { grilleDestination[i][j] = grilleOriginale[i][j]; } } } int main() { RemplirGrille(); while(1) { AfficherGrille(); getchar(); GrilleSuivante(); } return 0; }