본문 바로가기
프로그래머의 길/C & C++

라이프 게임

by 제이콥케이 2007. 6. 28.
반응형

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

void print(int **size, int num);
void copybox(int **one, int **two, int num);

int main()
{
 int user_size;
 int **real_size, **copy_size;
 int i, j;
 int count;

 srand(time(NULL));

 printf("라이프 게임 판 크기 입력 : ");
 scanf("%d", &user_size);

 real_size = (int **)calloc(user_size+2, sizeof(int *));
 copy_size = (int **)calloc(user_size+2, sizeof(int *));

 for(i=0; i<user_size+2; i++)
 {
  real_size[i] = (int *)calloc(user_size+2, sizeof(int));
  copy_size[i] = (int *)calloc(user_size+2, sizeof(int));
 }

 for(i=1; i<=user_size; i++)
 {
  for(j=1; j<=user_size; j++)
  {
   real_size[i][j] = rand()%2;
  }
 }

 while(1)
 {
  print(real_size, user_size);
  printf("다음 단계로 가려면 아무키나 누르시오!\n");

  getch();
 
  for(i=1; i<=user_size; i++)
  {
   for(j=1; j<=user_size; j++)
   {
    count=0;
   
    if(real_size[i-1][j-1]==1) count++;
    if(real_size[i-1][j]==1) count++;
    if(real_size[i-1][j+1]==1) count++;
    if(real_size[i][j-1]==1) count++;
    if(real_size[i][j+1]==1) count++;
    if(real_size[i+1][j-1]==1) count++;
    if(real_size[i+1][j]==1) count++;
    if(real_size[i+1][j+1]==1) count++;
   
    if(count==3)      
    {
     copy_size[i][j]=1;
    }
    else
    {
     if(count==2)
      copy_size[i][j]=real_size[i][j];
     else 
      copy_size[i][j]=0;  
    }   
   }
  }
  copybox(real_size, copy_size, user_size);
 }

 return 0;
}

void copybox(int **one, int **two, int num)
{
 int i, j;

 for(i=1; i<=num; i++)
 {
  for(j=1; j<=num; j++)
  {
   one[i][j] = two[i][j];
   
  } 
 }  
}

void print(int **size, int num)
{
 int i, j;

 printf("\n");

 for(i=1; i<=num; i++)
 {
  for(j=1; j<=num; j++)
  {
   printf("%d    ", size[i][j]);
  }
  printf("\n");
 }  

 printf("\n");
}

반응형

'프로그래머의 길 > C & C++' 카테고리의 다른 글

assert()  (0) 2008.04.15
지뢰찾기  (0) 2007.06.28
마방진 소스  (0) 2007.06.28
오늘의 날짜를 리턴해 주는 함수 <time.h>  (0) 2007.04.12
디렉토리 관련 함수  (0) 2007.04.09