MIP2 - Langage C avancé Fiche TP 1 Jeu de la vie
Transcription
MIP2 - Langage C avancé Fiche TP 1 Jeu de la vie
MIP2 - Langage C avancé Fiche TP 1 Jeu de la vie Sur une matrice n * n, une situation est composée de cases noires et de cases blanches. Les cases noires indiquent une situation de vie, et les cases blanches, une situation de mort. Pour une case m[i][j], on définit quatre voisins : m[i-1][j], m[i+1][j], m[i][j-1] et m[i][j+1]. A chaque tour de jeu, on réexamine la situation des cases de la grille selon les règles suivantes : 4 voisins noirs : "mort par étouffement". Si la case est blanche, elle reste blanche ; Si la case est noire, elle devient blanche. 3 voisins noirs : aucun changement. 2 voisins noirs : la case devient noire. Si la case est noire, elle reste noire ; Si la case est blanche, elle devient noire. 1 voisin noir : aucun changement. 0 voisin noir : "mort par isolement". Si la case est blanche, elle reste blanche ; Si la case est noire, elle devient blanche. Ecrire un programme qui, après avoir lu une configuration initiale au clavier, demande à l'utilisateur le nombre d'étapes qu'il veut visualiser,et les affiche une à une à l'écran. Le problème peut être simplifié en prenant une matrice (n+2) * (n+2) dont les contours sont toujours blancs. En effet, comme les cases blanches n'interviennent pas dans la décision de modification de l'état d'une case, cette bordure rajoutée artificiellement permettra de ne pas faire de traitement particulier pour les cases de bordure ou pour les cases d'angle de la matrice n * n, qui sans cela ne posséderaient que 3 ou2 voisins. Pour cela à l'aide de l'éditeur créer un fichier de texte de nom etape0.txt, contenant 49 caractères B (pour "blanc") ou N (pour "noir") et ne contenant ni caractère "espace" ni caractère "retour chariot" dans un ordre qui corresponde à la configuration du dessin ci dessus, lue ligne par ligne. On aura intérêt à utiliser les définitions suivantes: #define T 9 typedef char grille[T][T] Il est demandé de ne pas utiliser de variable globale On écrira les fonctions suivantes: • initialise : initialise la matrice, en mettant des cases blanches sur tout le contour, et en lisant la couleur initiale de chacune des cases non situées au bord dans le fichier etape0.txt (utiliser fopen, fscanf et fclose qui seront fournis par l'enseignant) • compte : retourne le nombre de voisins noirs d'une case Attention pour l'écriture de cette fonction il est absolument nécessaire de compter le nombre de voisins noirs de chaque case en se référant à la situation précédente et non à la situation courante • Change : calcule une nouvelle situation • affiche : affiche une situation par exemple sous la forme suivante: BBBBBBN BBBBBNN BBBBNNN BBBNNNN BBNNNNN BNNNNNN NNNNNNN