U E D R , A S I H C RSS

김영록/연구중/지뢰찾기

지뢰찾기미완성

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

코드

~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좌표 방식 ㅡ,.ㅡ;;;
역시 힘들어 ㅠ

나에게 할말


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

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:49
Processing time 0.0116 sec