/* life.c
 Function: ライフゲーム ver0.1
 Author: Ken
 Date: 03/08/25
 URL: http://blue.ribbon.to/~kenweb/
 mail: kenweb@s8.xrea.com
*/

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define N 20
#define MAX 300

int bord1[N][N];
int bord2[N][N];
    
int x=1;

void print_bord();
int search1();
int search2(int p,int q);
void sonyu();

int main()
{
    int p,q;
    
    sonyu();
    print_bord();
    
    for(x=2;x<MAX+1;x++){
        search1();
        for(p=0;p<N;p++){
            for(q=0;q<N;q++)
                bord1[p][q]=bord2[p][q];
        }
        getchar();
        print_bord();
    }
}


void print_bord()
{
    int p,q,people=0;
    system("cls");
    printf("%d世代目\n",x);
    for(p=0;p<N;p++){
        printf("\t");
        for(q=0;q<N;q++){
            if(bord1[p][q]==1)
            {
                printf("●");
                people++;
            }
            else printf("−");
        }
        printf("\n");
    }
    printf("個体数: %d\n",people);
}

int search1()
{
    int s,t,kazu;
    for(s=0;s<N;s++){
        for(t=0;t<N;t++){
            kazu=search2(s,t);
            if((bord1[s][t]==0)&&(kazu==3)) bord2[s][t]=1;
                
            else if (bord1[s][t]==1){
                if((kazu==2)||(kazu==3))    bord2[s][t]=1;
                else bord2[s][t]=0;
            }
        }
    }

}

int search2(int p,int q)
{
    int a,s,t,k=0;
    for(s=p-1;s<p+2;s++){
        for(t=q-1;t<q+2;t++){
            if(((0<=s)&&(s<=N))&&((0<=t)&&(t<=N))){
                if((p!=s)||(q!=t)){
                    a = bord1[s][t];
                    if(a==1)    k++;
                }
            }
        }
    }
    return(k);
    
}

void sonyu()
{
    int m,n,a;
    srand((unsigned)time(NULL));
    for(m=0;m<N;m++){
        for(n=0;n<N;n++){
            a=rand()%2;
            bord1[m][n]=a;
            bord2[m][n]=0;
        }
    }
}

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル