apple6316   3년 전

제가 지뢰 찾기 프로그램을 네이버에서 가져 왔는데. 무엇이 틀렸나요??


#inlcude <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> #include <time.h> #include <string.h>

#define DEBUG

int width = 25; int heigh = 20;

int table[22][27] = {0}; int ntable[22][27] = {0};

int minesum(int i, int j) {  int sum = 0;  sum += table[i-1][j-1];  sum += table[i-1][j];  sum += table[i-1][j+1];  sum += table[i][j-1];  sum += table[i][j+1];  sum += table[i+1][j-1];  sum += table[i+1][j];  sum += table[i+1][j+1];  return sum; }

void draw(int diff) {  int i = 0;  int j = 0;

#ifdef DEBUG  system("cls");  printf("/////////////////////지뢰수 : %03d개/////////////////////\n",diff); //56  printf("Y/X01020304050607080910111213141516171819202122232425///\n");  for(i=1;i<heigh+1;i+=1)  {   printf("%02d/",i);   for(j=1;j<width+1;j+=1)   {    if(ntable[i][j]==1)    {     printf("◎");    }    else    {     switch(table[i][j])     {     case 0:      printf("○");      break;     case 1:      printf("●");      break;     default:      printf("ER");     }    }   }   printf("/%02d\n",i);  }  printf("Y/X01020304050607080910111213141516171819202122232425///\n");  printf("////////////////////////////////////////////////////////\n"); //56

#else  system("cls");  printf("/////////////////////지뢰수 : %03d개/////////////////////\n",diff); //56  printf("Y/X01020304050607080910111213141516171819202122232425///\n");  for(i=1;i<heigh+1;i+=1)  {   printf("%02d/",i);   for(j=1;j<width+1;j+=1)   {    if(ntable[i][j]==0)    {     printf("▦");    }    else    {     switch(minesum(i,j))     {     case 0:      printf("○");      break;     case 1:      printf("①");      break;     case 2:      printf("②");      break;     case 3:      printf("③");      break;     case 4:      printf("④");      break;     case 5:      printf("⑤");      break;     case 6:      printf("⑥");      break;     case 7:      printf("⑦");      break;     case 8:      printf("⑧");      break;     default:      printf("ER");     }    }   }   printf("/%02d\n",i);  }  printf("Y/X01020304050607080910111213141516171819202122232425///\n");  printf("////////////////////////////////////////////////////////\n"); //56 #endif

 return; }

void reset(int diff) {  int i = 0;  int j = 0;  int H = 0;  int W = 0;  int minecount = 0;

 srand((unsigned)time(NULL));

 for(i=0;i<heigh+2;i+=1)  {   for(j=0;j<width+2;j+=1)   {    table[i][j]=0;   }  }  for(i=0;i<heigh+2;i+=1)  {   for(j=0;j<width+2;j+=1)   {    ntable[i][j]=0;   }  }  for(i=0;i<22;i+=1)  {   ntable[i][0] = 1;   ntable[i][26] = 1;  }  for(j=0;j<27;j+=1)  {   ntable[0][j] = 1;   ntable[21][j] = 1;  }

 while(minecount<diff)  {   H = 1+rand()%20;   W = 1+rand()%25;   if(table[H][W]==0)   {    table[H][W]=1;    minecount+=1;   }  }

 return; }

int menu() {  int check = 0;

 while(check == 0)  {   printf("찾을 지뢰의 수를 설정하세요.\n");   printf("1.20개(EASY)\n");   printf("2.50개(NORMAL)\n");   printf("3.110개(HARD)\n");   printf("4.230개(HELL)\n");   printf("5.사용자 설정(최대 500, 판 사이즈 변경 불가\n");   scanf("%d",&check);   switch(check)   {   case 1:    return 20;    break;   case 2:    return 50;    break;   case 3:    return 110;    break;   case 4:    return 230;    break;   case 5:    printf("지뢰 수는? ");    scanf("%d",&check);    return check;    break;   default:    check = 0;    printf("잘못된 선택입니다.\n");    _getch();    break;   }  }  return 1; }

int checkend(int diff) {  int i = 0;  int j = 0;  int sumend = 0;  for(i=1;i<heigh+1;i+=1)  {   for(j=1;j<width+1;j+=1)   {    sumend += ntable[i][j];   }  }  if((500-diff)==sumend)   return 1;  else return 0; }

void trigger(int h, int w) {  ntable[h][w] = 1;  if(minesum(h,w)==0)  {   if((ntable[h-1][w-1]==0) && (table[h-1][w-1]==0))    trigger(h-1,w-1);   if((ntable[h-1][w]==0) && (table[h-1][w]==0))    trigger(h-1,w);   if((ntable[h-1][w+1]==0) && (table[h-1][w+1]==0))    trigger(h-1,w+1);   if((ntable[h][w-1]==0) && (table[h][w-1]==0))    trigger(h,w-1);   if((ntable[h][w+1]==0) && (table[h][w+1]==0))    trigger(h,w+1);   if((ntable[h+1][w-1]==0) && (table[h+1][w-1]==0))    trigger(h+1,w-1);   if((ntable[h+1][w]==0) && (table[h+1][w]==0))    trigger(h+1,w);   if((ntable[h+1][w+1]==0) && (table[h+1][w+1]==0))    trigger(h+1,w+1);  }  return; }

int main () {  short h = 0;  short w = 0;  int diff = 0;

A:

 diff = menu();  reset(diff);  while(1)  {

  draw(diff);   printf("다음 X(가로)좌표? ");   scanf("%d",&w);   printf("  다음 Y(세로)좌표? ");   scanf("%d",&h);   if(table[h][w]==1)   {    printf("지뢰를 밟았습니다! T-T\n");    _getch();    break;   }   else   {    trigger(h,w);    printf("지뢰를 밟지 않았습니다! ^o^\n");    printf("1초 후 자동으로 갱신됩니다.");    Sleep(250);    printf(".");    Sleep(250);    printf(".");    Sleep(250);    printf(".");    Sleep(250);   }   if (checkend(diff)==1)   {    printf("축하합니다! 게임에서 이겼습니다!\n");    _getch();    break;   }  }

 diff=0;  while(diff==0)  {   system("cls");   printf("한번 더 하시려면 1. 아니면 2. ");   scanf("%d",&diff);   if(diff==1)    goto A;   else if(diff==2)   {    printf("종료합니다. ");    exit(1);   }   else   {    diff = 0;    printf("잘못된 선택입니다.\n");    _getch();   }  }  return 0; }

뭐죠????

wondy1128   3년 전

이렇게 써서 붙여두면 
누구라도 댓글을 달기 싫을 것 같네요..

예전에 지뢰찾기 소스 작성했던 적이 있어서 소스는 추가하긴 합니다...

wondy1128   3년 전

아 그리고 이 게시판은 백준온라인저지에 오역 오타 요청 게시판이네요 

게시판 형식에 부적절한 것 같습니다.

joonas   3년 전

어느 문제에 제출하셔서 틀렸다는 건지도, 코드를 어떻게 작성하셨다는 말도 없네요.

저희는 신도, 컴파일러도 아니에요

apple6316   3년 전

아니 그딴 소리 하지마요. 아르켜줄거면 아르켜주고 아니면 하지말든가요!!


댓글을 작성하려면 로그인해야 합니다.