ライフゲーム
碁盤の目の上に、いくつかの石(生命体)を適当に配置する。これらの生命体は、以下に述べる簡単なルールに従って生き続ける。
それを見て楽しむという単純なゲームである。
盤面では、どの場所も縦・横・斜めに8個の場所と隣り合っているが、もしある場所が空いていて、しかもその場所と隣り合うちょうど3個の場所に生命体が存在するならば、次の世代にはその空いた場所に新しい生命体が誕生する。
一方、すでに存在する生命体については、隣り合う場所に住む生命体が1個以下または4個以上になると、過疎または過密のため、次の世代には死んでしまう。
以下ソース
#include<stdio.h> #include<stdlib.h> #define N 22 /* 縦方向 */ #define M 78 /* 横方向 */ char a[N + 2][M + 2], b[N + 2][M + 2]; /* 盤 */ int main(void){ int i, j, g; a[N / 2][M / 2] = a[N / 2 - 1][M / 2] = a[N / 2 + 1][M / 2] = a[N / 2][M / 2 - 1] = a[N / 2 - 1][M / 2 + 1] = 1; /* 初期状態 */ for(g = 1; g <= 1000; g++){ printf("Generation %4d\n",g); /* 世代 */ for(i = 1; i <= N; i++){ for(j = 1; j <= M; j++){ if(a[i][j]){ printf("*"); b[i - 1][j - 1]++; b[i - 1][j]++; b[i - 1][j + 1]++; b[i ][j - 1]++; b[i ][j + 1]++; b[i + 1][j - 1]++; b[i + 1][j]++; b[i + 1][j + 1]++; }else{ printf("."); } } printf("\n"); } for(i = 0; i <= N + 1; i++){ for(j = 0; j <= M + 1; j++){ if(b[i][j] != 2){ a[i][j] = (b[i][j] == 3); } b[i][j] = 0; } } } return 0; }
実行はぜひ皆さんの方で試してみてほしい