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

Documents pareils