2013-12-19 21:56:10 +00:00
|
|
|
/*
|
|
|
|
COURS GIT
|
|
|
|
Programme à compléter à plusieurs
|
|
|
|
|
|
|
|
Thibaut CHARLES
|
|
|
|
pour le Club Elec ISEN Brest
|
|
|
|
2013
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
|
|
|
|
int grille[20][20];
|
|
|
|
|
|
|
|
|
|
|
|
void RemplirGrille();
|
|
|
|
void AfficherGrille();
|
|
|
|
int CompterCellulesAdjascentes(int x, int y);
|
2013-12-28 21:00:42 +00:00
|
|
|
void GrilleSuivante();
|
2013-12-19 21:56:10 +00:00
|
|
|
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()
|
|
|
|
{
|
2014-04-23 20:27:40 +00:00
|
|
|
//Parcourir la grille de jeu
|
2013-12-19 21:56:10 +00:00
|
|
|
// 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)
|
|
|
|
{
|
2014-04-23 20:27:40 +00:00
|
|
|
//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
|
2013-12-19 21:56:10 +00:00
|
|
|
//
|
|
|
|
|
|
|
|
//COMPLETER ICI
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@brief Met à jour la grille
|
|
|
|
@return le nombre de cellules vivantes, logiquement entre 0 et 8
|
|
|
|
**/
|
2013-12-28 21:00:42 +00:00
|
|
|
void GrilleSuivante()
|
2013-12-19 21:56:10 +00:00
|
|
|
{
|
|
|
|
int nouvelleGrille[20][20];
|
|
|
|
|
2014-04-23 20:27:40 +00:00
|
|
|
//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
|
2013-12-19 21:56:10 +00:00
|
|
|
// 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)
|
|
|
|
{
|
2014-04-23 20:27:40 +00:00
|
|
|
//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.
|
2013-12-19 21:56:10 +00:00
|
|
|
//
|
|
|
|
|
|
|
|
//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();
|
2014-04-23 20:27:40 +00:00
|
|
|
GrilleSuivante();
|
2013-12-19 21:56:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|