지뢰찾기미완성

연구중....(대단한건아니지만 너무어렵네 ㅠㅠㅠ)

코드

~cpp 
#include <iostream.h>
#include <stdlib.h>
#include <time.h>

static int space[16][16];
static int gameover=1; //0일경우 메뉴 무한루프 끝

void mine_confirm(int X, int Y); //지뢰가 있는지 없는지 확인

void mine_update(int X, int Y); //지뢰가 없을경우 그근처에 지뢰수를 업뎃

void mine_newgame(); //지뢰 위치 초기화

void mine_show(); //지뢰 화면 보여주기

void mine_menu(); //메뉴
/////////////////////////////////////////////////////////

void main()
{
	mine_newgame();
	mine_show();
    
    while(gameover)
	{
		mine_menu();
		
	}


}


/////////////////////////////////////////////////////////
void mine_menu()   //메뉴 나타냄 
{
	int num_x,num_y;
	while(1){
		 num_x = 0;
		 num_y = 0;
          cout << "X 좌표는 ? (1~20): ";
		  cin >> num_x;
		  cout << "Y 좌표는 ? (1~20): ";
		  cin >> num_y;
		  if (1<=num_x<=20)
			  if (1<=num_y<=20)
			  break;
	      
         cout << "잘못된값을입력하셨습니다." << endl;
	}
  		  mine_confirm(num_x-1,num_y-1);

          

}


void mine_show()
{
    int a,b;
    cout << endl << endl<< endl<< endl<< endl<< endl<< endl;

	cout << "			======지뢰찾기 1.00======" << endl;
	for (a=0 ; a!=16 ; a++){
		cout << "			";
		for (b=0 ; b!=16 ; b++){
			switch(space[b][a]){
			case 10 : 
				cout << "■";
				break;
			case 9 :
				cout << "■";
				break;
			default :
				cout << space[b][a] << " " ;
			}
		}
	cout << endl;
	}



}

/////////////////////////////////////////////////////////


void mine_update(int X, int Y)
{
	int mine_count;
	mine_count = 0;
    if(X-1 >= 0 && Y-1 >= 0){
		if (space[X-1][Y-1] == 9){
			mine_count++;
		}
	}
	if(Y-1 >= 0){
		if (space[X][Y-1] == 9){
			mine_count++;
		}
	}
	if(X+1 <= 15 && Y-1 >= 0){
		if (space[X+1][Y-1] == 9){
			mine_count++;
		}
	}
	if(X-1 >= 0 ){
		if (space[X-1][Y] == 9){
			mine_count++;
		}
	}
	if(X+1 <= 15){
		if (space[X+1][Y] == 9){
			mine_count++;
		}
	}
	if(X-1 >= 0 && Y+1 <= 15){
		if (space[X-1][Y+1] == 9){
			mine_count++;
		}
	}
	if(Y+1 <= 15){
		if (space[X][Y+1] == 9){
			mine_count++;
		}
	}
	if(X+1 <=15 && Y+1 <= 15){
		if (space[X+1][Y+1] == 9){
			mine_count++;
		}
	}	


space[X][Y] = mine_count;

mine_show();

}

///////////////////////////////////////////////////////////


void mine_confirm(int X, int Y)
{
if (space[X][Y] ==9){
	gameover = 0;
	cout << endl<< endl<< endl<< endl;
	cout << endl << "			  ====YOU step MINE AND BOOM====";
	cout << endl << "			============GAME OVER=============" <<endl;
    int a,b;
	for (a=0 ; a!=16 ; a++){
		cout << "			";
		for (b=0 ; b!=16 ; b++){
			switch(space[b][a]){
			case 10 : 
				cout << "■";
				break;
			case 9 :
				cout << "⊙";
				break;
			default :
				cout << space[b][a] << " " ;
			}
		}
	cout << endl;
	}
	char c;
    cout << "다시하시겠습니까?(y/n) : ";
	cin >> c ;
    if (c == 'y'){
		gameover = 1;
		mine_newgame();
		mine_show();
    }
	}
else if(space[X][Y] ==10)
	mine_update(X,Y);

}


/////////////////////////////////////////////////////////


void mine_newgame()
{
int i;
int a,b;
  	for (a=0 ; a!=16 ; a++){
		for (b=0 ; b!=16 ; b++){
			space[b][a] = 10;
		}
	}  // 초기화 



srand(time(NULL));  // 난수 발생 시드값 결정

for (i=0;i!=40;i++){
	while(1) {
		int x,y;
		
		x=rand()%15+0;
		
		y=rand()%15+0;

		if (space[x][y] != 9){
			space[x][y] = 9;
			break;
			
			}
		}
	}	
}

/////////////////////////////////////////////////////////

스크린샷

mine1.JPG
mine2.JPG

후기


찾기 기능만 넣었는데 ㅡ,.ㅡ;;대략 200라인밖에;;
도저히 깃발꽃기랑 근처에 마인없으면 다 보이게 하는건 못하겟던데 ㅠ
비주얼적인 클릭같은게 없으니 단순히 X,Y좌표 방식 ㅡ,.ㅡ;;;
역시 힘들어 ㅠ

나에게 할말


뭐..뭐냐.ㅎㅎ 나는 지뢰 파인더 만들고 있는데.. 옆에서 지뢰찾기를 만들다닛..
네가 심으면 내가 찾는거냐? ㅎㅎㅎㅎ 둘이 붙여놓으면 되겠네..ㅎㅎㅎ
지뢰 파인더 알고리즘에 아무것도 없는 빈칸 주위를 찾는 알고리즘을 만들어 봐서 그런데..ㅎㅎ
마인없으면 찾는거.. 재귀호출 써먹으면 편하다우..ㅎㅎㅎ
ㅎㅎㅎ 그럼 수고하라구^^ - 조현태
┗음! 나중에 재개할때 꼭써먹을게! -김영록

Retrieved from http://wiki.zeropage.org/wiki.php/김영록/연구중/지뢰찾기
last modified 2021-02-07 05:28:49