C 언어 게임 - 지뢰 찾기는 완료

C 언어 - 지뢰 찾기

이 문서에서는 vs2017를 사용하여 쓰기 소프트웨어로,이 코드의 일반적인 개요 초보자에 적합하다이 게임을 만들 것입니다.

코드는 다음과 같은 기능을 달성 할 수있다 :

1. 사용자는 세 난이도를 선택할 수 있고, 내 다른 개수 배치된다.

2. 난수 내 위치를 설정.

(광산은 0으로 표시되고, 주변에 하나의 확장하지 않습니다) 광산의 좌표를 입력합니다.

번개의 좌표를 입력합니다, 그는 게임의 끝을 살해했다.

5. 모든 광산을 제외, 게임 경과 시간을 표시 끝났습니다.

다음 프로그램 소스 코드 :

헤더 game.h

그는 후속 변경을 용이하게하기 위해 몇 가지 필요한 헤더 파일, 매크로를 정의 아니라 내 한 행과 열의 수를 인용한다.

1  #DEFINE _CRT_SECURE_NO_WARNINGS 1
 2  
3 #INCLUDE <STDIO.H>
 4 #INCLUDE <stdlib.h>
 5 #INCLUDE <time.h>
 6 #INCLUDE <WINDOWS.H>
 7  #DEFINE ROW 9
 8  #DEFINE의 COL 9
 9  
10  #DEFINE의 로우 ROW + 2
 11  #DEFINE COLS COL + 2
 12  
13  #DEFINE의 EASY_COUNT 10
 14  
15  공극 Initboard (  보드 [ROWS] COLS, INT의INT COLS,  세트 );
(16) 보이드 displayboard (  보드 [ROWS] COLS, INT의INT COL);
(17)  보이드 setmine (  내 [ROWS] COLS, INT의INT COL, INT 카운트);
(18)  보이드 findmine (  내 [ROWS] COLS,  보기 [ROWS] COLS, INT의INT COL, INT 카운트);

테스트 모듈 text.c

이 모듈은 색상과 콘솔 창 크기 및 통화 기능을 주로합니다. 

_CRT_SECURE_NO_WARNINGS. 1 #DEFINE의 

사용법 #include "game.h" 
무효 MENU () 
{ 

	의 printf ( "******************************* **** \ N- 형 ") 
	의 printf ("*************** 1.play ************** \ N- 형 ") 
	의 printf ( "*************** 0.exit ************** \ N- 형"); 
	printf와 ( "******** *************************** \ N- "); 

} 
무효 게임 () 
{ 
	INT의 INPUT = 0; 
	의 printf ("어려움을 선택하십시오 : . \ N1 간단한 \ N2 어려운 \ N3의 연옥 \ n - "), ... 
	는 scanf ("%의 D ", INPUT) 
	INT COUNT = INPUT * EASY_COUNT; 
	// sprintf와 (stcmd"MODE 콘 COLS = %의 D 라인 = % D ', A, B) 
	// 시스템 (stcmd) 
	숯 내 [ROWS] COLS]; // 정보를 저장 레이 
	문자 표시 [ROWS] COLS] ; // 조사하고 정보 저장 광산
	Initboard (쇼, ROWS, COLS, '*'); // '*' 
	// displayboard (광산, ROW, COL); 
	setmine (광산 ROW, COL, 카운트); 
	// displayboard (광산, ROW, COL); 
	displayboard (쇼 ROW, COL); 
	findmine (광산 쇼 ROW, COL, 카운트); 
} 
공극 시험 () 
{ 
	부터 srand ((부호 INT) 시간 (NULL)); 
	INT 입력 = 0;	
	{ 
	) (메뉴; 
	의 printf ( "\ n请选择: \ n"); 
	scanf와 ( "%의 D", 입력); 
		스위치 (입력) { 
		케이스 (1) : 게임 (); 단절; 
		경우 0의 printf ( "退出游戏\ n"); 단절; 
		기본값 : printf와 ( "输入有误,请重新输入\ n"); 단절; 
		} 
	} 동안 (입력); 

} 

INT의 main () 
{ 
	INT의 A = 35; 
	CHAR stCmd [128]; 
	시스템 ( "컬러 4A");
	시스템 ( "모드의 CON : 라인 COLS = 30 = 12") 
	의 printf ( "\ N- 형 그 \ n \ N- 형 ------ 지뢰 환영 ----- \ N- 형 \ 상기 N- \ N- ') 
	(의 printf" 기다려주십시오 ---------- ---------- \ N- \ N- \ N- "); 
	수면 (1000), 
	시스템 ("CLS "); 
	시스템 (". 색상 1A " ) 
	의 sprintf (stcmd "COLS = CON MODE %의 D (%) = D 선"A, B), 
	시스템 (stcmd) 
	시험 (); 
	반환 0; 
}

  게임 모듈 game.c

이 모듈은 다양한 기능을 구현합니다.

#DEFINE _CRT_SECURE_NO_WARNINGS 1 

사용법 #include "game.h" 

무효 Initboard (숯 보드 [ROWS] COLS, INT 행, INT COLS, 문자 집합) 
{ 
	
	INT는 I = 0; 
	INT J = 0; 
	경우 (나는 <행; I = 0 난 ++) 
	{ 
		대한 (j = 0; j를 <COLS, J ++) 
		{ 
			보드 [I] [J] = 세트; 
		} 

	} 
} 

공극 displayboard (문자 표시 [ROWS] COLS, INT 행의 INT COL) 
{ 
	
	INT 난 = 0; 
	INT J = 0; 
	의 printf ( "\ n"); 
	대 (; I <= 로우; 나는 0 = I ++) 
	{ 
		printf와 ( "%의 D", I);	
	} 
	의 printf ( "\ n"); 
	의 printf ( "=========================== \ n"); 
	대 (ⅰ = 1; I <= 로우; 
	{
		의 printf ( "%의 D ||", I); 
INT * COUNT1) { 
	(* COUNT1) -; 
		반환
		에 대한 (j = 1; J <= COL; J ++) 
		{ 
			printf와 ( "%의 C"보기 [I] [J]); 
		} 
		의 printf ( "||"); 
		의 printf ( "\ n"); 
	} 
	의 printf ( "============================ \ n"); 

} 
공극 setmine (숯 내 [ROWS] COLS, INT 행 INT COL, INT 카운트) 
{ 
	
	시스템 ( "CLS"); 
	반면 (COUNT) 
	{ 
		INT (X) = 랜드 () % 행 + 1; 
		Y = INT 랜드 () + 1 % (COL); 
		경우 (광산 [X] [Y] == '0') 
		{ 
			내 [X] [Y] = 0 + 1; 
			카운트--; 
		} 
		
	} 

} 
정적 INT judgemine (CHAR 내 [ROWS] COLS, INT (X), INT (Y), INT * COUNT1) 
			((광산 [X - 1] [Y] + 광산 [X - 1] [(Y) - 1] +
				광산 [X] [Y - 1] + 광산 [X + 1] [(Y) - 1] + 
				광산 [X + 1] [Y] + 광산 [X + 1] [Y + 1] + 
				광산 [X] [Y + 1] + 광산 [X - 1] [Y + 1]) - 8 * '0'); 
		

} 
공극 재귀 (숯 내 [ROWS] COLS, 문자 표시 [ROWS] COLS, INT (X), Y INT, INT * COUNT1) 
{ 
	INT 입술 = judgemine (광산, X, Y, COUNT1); 
	경우 (입술 == 0 && 표시 [X] [Y] == '*') 
	{ 
		표시 [X] [Y] = 0; 
		INT의 도착 [8] [2] = {{-1, -1}, {- 1,0}, {- 1,1}, {0, -1}, {0,1}, {1, -1 }, {1,0}, {1,1}}; 
		위한 (INT 난 = 0; I <8; ++ I) 
		{ 
			경우 (X + 도착 [I] [0]> = 1 && X + 도착 [I] [0] <= ROW && Y + 도착 [I] [1]> = 1 && + Y의 도착 [I] [1] <= COL 
				&& 표시 [X + 도착 [I] [0] [Y + 도착 [I] [1]] == '*'
		} 
	} 
	다른 
		표시 [X] [Y] = RES + '0'; 
} 

공극 findmine (CHAR 광산 [ROWS] COLS, 문자 표시 [ROWS] COLS, INT 행 INT COL, INT COUNT) 
{ 
	INT X = 0; 
	INT Y = 0; 
	INT COUNT1는 = 행 * COL-COUNT, 
	, 시작, 종료 time_t 
	시작 = 시간 (NULL) 
	그동안 (COUNT1가) 
	{ 
		
		의 printf ( "좌표를 해결 입력하십시오 : \ n"); 
		scanf와 ( "% D % D ', X, Y) 
		시스템 ("CLS ") 
		IF (!보기 [X] [Y] ='* ') 
		{ 
			의 printf ("이 너무 조사를 가지고 다시 입력하세요 좌표! \ N- "); 
			displayBoard (쇼, ROW, COL) 
			계속; 
		}
		IF (=. 1 && X <= Y 행 &&>.가 = Y <= COL은 && 1> X) 
		{ 
			IF (광산 [X]는 [Y] == '0'+. 1) 
			{ 
				의 printf ( "죄송 폭격 죽은 \ N- "); 
				displayBoard (광산, 행, COL) 
				BREAK; 
			} 
			다른 
			{ 
				재귀 (광산, 쇼, X, Y, COUNT1)입니다; 
				// displayBoard (광산, 행, COL) 
				displayBoard (쇼, ROW , COL); 
				
			} 
		} 
		다른 
		{ 
			의 printf () "입력 오류, \ N- 재 입력하십시오"; 

		} 종료 = 시간 (NULL); 

} 
	
	
	(difftime (끝, 시작 경우) <= 60 && COUNT1가 == 0) 
	{ 
		의 printf ( "당신의 성공 광산 축하 \ N- 형!"); 
		
		printf와 ( "사용 : % d 초를 \ n", (int)를 difftime (끝 시작));
	} 
}

 이를 위해 더 간단한 게임보다 지뢰를 완료, 용지가 결론 감사합니다!

추천

출처www.cnblogs.com/lienguang/p/12324428.html