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;
}
apple6316 6년 전
제가 지뢰 찾기 프로그램을 네이버에서 가져 왔는데. 무엇이 틀렸나요??
#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; }
뭐죠????