'지뢰찾기'에 해당되는 글 1건

  1. 2009.03.31 C언어 미뢰찾기 (미완성)
C/C++2009. 3. 31. 20:25

#include <turboc.h>
#define MAX 10


struct BOOM {
 int map;
 int block;
 int flag;
};


int Clear_Check(struct BOOM boom[MAX][MAX],int Boom_Check){
 int Count = 0;
 int i,j;
 for(i=0;i<MAX;i++){
  for(j=0;j<MAX;j++){

   if(boom[i][j].block == 1)
    Count++;   
  }
 }
 gotoxy(0,MAX+1);
 printf("Block_Count = %d \n",Count);

 if( ( Count == ((MAX-2)*(MAX-2) - MAX) ) && Boom_Check == MAX){
  return 1; // 참
 }else{
  return 0; // 거짓


 }
}

 

int  Check_Count(struct BOOM boom[MAX][MAX],int i,int j){
 int Count =0;
 int x,y;

 


 for(x=-1;x<=1;x++){
  for(y=-1;y<=1;y++){   
   if(boom[i+x][j+y].map == 10){
    Count++;


   }
  }
 }


 return Count;
}
void Print_MAP(struct BOOM boom[MAX][MAX]){
 int i,j;
 gotoxy(0,0);
 for(i=0;i<MAX;i++){
  for(j=0;j<MAX;j++){
   if(boom[i][j].block == 0){
    switch(boom[i][j].map){
    case 9:
     textcolor(15);
     printf("▧");
     break;
    default:
     textcolor(2);
     printf("□");
     break;


    }
   }else{
     switch(boom[i][j].map){
    case 0:
     printf("  ");
     break;
    case 1:
     textcolor(11);
     printf("①");
     break;
    case 2:
     textcolor(14);
     printf("②");
     break;
    case 3:
     textcolor(13);
     printf("③");
     break;
    case 4:
     textcolor(8);
     printf("④");
     break;
    case 5:
     textcolor(9);
     printf("⑤");
     break;
    case 9:
     textcolor(15);
     printf("▧");
     break;
    case 10:
     textcolor(RED);
     printf("※");
     break;


     }
    }
    if(boom[i][j].block == 0 && boom[i][j].flag == 1 ){
     textcolor(BLUE);
     printf("\b\b▶");
    }

 


   }


  


   printf("\n");
  }


}

 

 


int main(){


 struct BOOM boom[MAX][MAX];


 int i,j;
 int x,y;
 int X,Y;
 char ch;
 int Boom_Check=0;


 for(i=0;i<MAX;i++){
  for(j=0;j<MAX;j++){
   if(i==0||j==0|| i == MAX-1 || j == MAX-1){
    boom[i][j].map = 9;
   }else{
    boom[i][j].map = 0;
    boom[i][j].block = 0;
    boom[i][j].flag = 0;
   }
  }
 }

 


 //지뢰 심기
 for(i=0;i<MAX;i++){
  x = baserand(1,MAX-2);
  y = baserand(1,MAX-2);
  if(boom[x][y].map != 10){
   boom[x][y].map = 10;
  }else{
   i--;
   continue;
  }


 }
 //Count 세기

 


 for(i=1;i<MAX-1;i++){
  for(j=1;j<MAX-1;j++){
   if(boom[i][j].map != 10){
    boom[i][j].map = Check_Count(boom,i,j);


   }


  }
 }


 X = Y = 2;


 Print_MAP(boom);


 while(1){
  gotoxy(0,MAX+3);
  printf("  X = %2d , Y = %2d \n",X,Y);
  printf("  Count = %2d \n",boom[Y][X].map);
  printf("  Boom Check = %2d\n",Boom_Check);


  gotoxy(X*2,Y);
  ch = getch();


  switch(ch){
   case UP:
    if(Y!=1)Y--;
    break;
   case DOWN:
    if(Y!=MAX-2)Y++;
    break;
   case LEFT:
    if(X!=1)X--;
    break;
   case RIGHT:
    if(X!=MAX-2)X++;
    break;
   case 'f':


    if(boom[Y][X].block == 0){


     if(boom[Y][X].flag == 1){
     
      boom[Y][X].flag = 0;


      if(boom[Y][X].map == 10){
       Boom_Check--;
      }


     }else{
    
      boom[Y][X].flag = 1;


      if(boom[Y][X].map == 10){
       Boom_Check++;
      }


     }
    }
   

 

 


    break;


   case ' ':


    boom[Y][X].block = 1;
    if(boom[Y][X].map == 10){
     gotoxy(0,MAX+6);
     textcolor(WHITE);


     for(i=0;i<MAX;i++){
      for(j=0;j<MAX;j++){
       if(boom[i][j].map==10){
        boom[i][j].block = 1;
       }


      }


     }


     Print_MAP(boom);


     printf("지뢰를 밟았습니다 \n");     
     printf("게임을 끝내겠습니다...\n");
     return 0;
    }
    break;


  }

 


  Print_MAP(boom);


  if(Clear_Check(boom,Boom_Check/*클리어 조건*/) == 1 ){

 

 

   gotoxy(0,MAX+7);
   printf("게임을 클리어 하셨습니다 \n");
   printf("수고하셨습니다 ^^ \n");
   break;
  }


 }
  return 0;
 }


아직 구현할게 남았고...  

쌤 ver.이다  

어렵다....

Posted by 샤키