지뢰찾기 게임을 구현합니다~ 지뢰위치는 '*'로 나타내고 그렇지 않다면 주변 8 방향의 지뢰매설 개수를 표시합니다.
저는 배열이 좋은데.. 이번에는 동적으로 구현 해 보았어요. 이렇게 하면 평당 얼마의 메모리 비용으로 저렴하게 지뢰밭을 만들 수 있겠죠~ㅋ
내용은 for문에 따라 [동적배열생성]->[지뢰생성]->[표시]->[메모리해제] 순서입니다. 지뢰 찾으러 갑시당~♪
#include
#include
#include
#include
int main(void)
{
srand((unsigned int)time(NULL)); //랜덤seed설정
int N,M,counter;
int **mine_farm;
scanf("%d %d", &N, &M);
N+=2;M+=2; // 마스크로 인해 끝부분이 두칸씩 잘리게 되므로 처음부터 두칸 넓게 잡음
mine_farm=(int**)malloc(N*sizeof(int)); // 동적배열(행)
for(int i=0; i<N; i++)
{
*(mine_farm+i)=(int*)malloc(sizeof(int)*M); // 동적배력(열)
}
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
if(i==0 || j==0 || i==N-1 || j==M-1){continue;} //마스크는 패스
if(rand()%4){mine_farm[i][j]=NULL;}else mine_farm[i][j]=1; // 1/4확률의 지뢰생성
}
}
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
if(i==0 || j==0 || i==N-1 || j==M-1){continue;}
if(mine_farm[i][j]==1){printf("* ");continue;} // 지뢰를 "*"표시
counter=NULL;
for(int l=-1; l<2; l++)
{
for(int m=-1; m<2; m++)
{
if(mine_farm[i+l][j+m]==1){counter++;} //마스크내의 *은 카운터를 셈
}
}
if(i==0 || j==0 || i==N-1 || j==M-1){continue;}
printf("%d ",counter); // 나머지는 숫자표현
}
printf("\n");
}
for(int i=0; i<N; i++)
{
free(mine_farm[i]); // 메모리해제
}
free(mine_farm);
return 0;
}