C言語ゲーム - マインスイーパが完了しています

C言語 - マインスイーパ

この資料では、このゲームは、このコードの一般的な概要は、vs2017を使用してソフトウェアを書くことが、初心者に適しているでしょう。

コードは、以下の機能を実現することができます。

1.ユーザーは3つの難易度を選択することができる、鉱山の異なる数が配置されています。

2.乱数は、鉱山の位置を設定します。

(私は0で表され、約1膨張しない)鉱山の座標を入力します。

雷のための座標を入力します、彼はゲーム終了を殺されました。

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、"モードCONのCOLS =%D行=% D」、B); 
	//システム(stcmd); 
	CHAR鉱山[ROWS] [COLS]; //店舗情報レイ
	チャーショー[ROWS] [COLS] ; // 調査情報格納されている鉱山
	Initboard(ショー、ROWS、COLS、 '*'); // '*' 
	int型、A = 35。
	// displayboard(鉱山、ROW、COL)。
	setmine(鉱山、ROW、COL、カウント数)。
	// displayboard(鉱山、ROW、COL)。
	displayboard(ショー、ROW、COL)。
	findmine(鉱山、ショー、ROW、COL、カウント数)。
} 
ボイド試験()
{ 
	にsrand((unsigned int型)時間(NULL))。
	INT入力= 0。	
	やる
	{ 
	メニューを(); 
	printf( "\ nは请选择ます:\ n"); 
	scanf関数( "%dの"と入力)。
		スイッチ(入力){ 
		ケース1:ゲーム(); ブレーク; 
		ケース0:のprintf( "退出游戏\ n"); ブレーク; 
		デフォルト:のprintf( "输入有误、请重新输入\ N"); ブレーク; 
		} 
	}一方(入力)。

} 

int型のmain()
{ 
	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モード%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 ++; I <行I = 0)するための
	{ 
		ため(J = 0; J <COLS; J ++)
		{ 
			ボード[I] [J] =セット。
		} 

	} 
} 

ボイドdisplayboard(CHARショー[ROWS] [COLS]、INT列、int型COL)
{ 
	
	int型I = 0。
	int型J = 0; 
	printf( "\ n"は); 
	以下のために(私は= 0; I <=行; I ++)
	{ 
		のprintf( "%dの"、I)。	
	} 
	のprintf( "\ n"); 
	printf( "=========================== \ N"); 
	以下のための式(I = 1; I <=行。 
	{
		printf( "%のD ||"、I)。
		用(J = 1; J <= COL; J ++)
		{ 
			のprintf( "%のC"、ショー[I] [J])。
		} 
		のprintf( "||")。
		printf( "\ n"は); 
	} 
	のprintf( "============================ \ n"); 

} 
ボイドsetmine(チャー鉱山[ROWS] [COLS]、INT行、INT COL、INTカウント)
{ 
	
	システム( "CLS")。
	一方、(カウント)
	{ 
		int型のx =ランド()%行+ 1。
		INT Y =ランド()%COL + 1。
		IF(鉱山[X] [Y] == '0')
		{ 
			鉱山[X] [Y] = '0' + 1。
			カウント - ; 
		} 
		
	} 

} 
静的INT judgemine(CHAR鉱山[ROWS] [COLS]、int型のx、int型Y、
INT * COUNT1) { 
	(* 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、int型Y、INT * COUNT1)
{ 
	int型RES = judgemine(鉱山、X、Y、COUNT1)。
	IF(RES == 0 &&ショー[X] [Y] == '*')
	{ 
		ショー[X] [Y] = '0'; 
		int型ARR [8] [2] = {{-1、-1}、{ - 1,0}、{ - 1,1}、{0、-1}、{0,1}、{1、-1 }、{1,0}、{1,1}}。
		以下のために(INT I = 0; I <8; ++ I)
		{ 
			IF(X + ARR [i]が[0]> = 1 && X + ARR [i]が[0] <= ROW && Y + ARR [I] [1]> = 1 && Y +のARR [I] [1] <= COL 
				&&
		} 
	} 
	そうでなければ
		表示[X] [Y] = RES + '0'; 
} 

ボイドfindmine(CHARマイン[ROWS] [COLS]、CHARショー[ROWS] [COLS]、INT行、INT COL、INT COUNT)
{ 
	int型X = 0; 
	int型Y = 0; 
	int型COUNT1がある= ROW * COL-COUNT; 
	;開始、終了のtime_t 
	スタート=時間(NULL); 
	しばらく(COUNT1がある)
	{ 
		
		のprintf( "座標のトラブルシューティングを入力してください:\ nは"); 
		scanf関数( "%D%D"、&X&Y); 
		システム( "CLS"); 
		IF(!ショー[X] [Y] = '*')
		{ 
			のprintf(「この、あまりにも捜査を持って再入力してくださいコーディネート! \ N- "); 
			displayBoard(表示、ROW、COL); 
			続行;  
		}
		IF(X> = 1 && X <=行&& Y> = 1 && Y <。= COL) 
		{ 
			IF(鉱山[X] [Y] == '0' + 1)
			{
				printf( "ごめんなさい、あなたが\ N-を殺している"); 
				displayBoard(鉱山、ROW、COL); 
				BREAK; 
			} 
			{ 
				再帰(鉱山、ショー、X、Y、&COUNT1); 
				// displayBoard(鉱山、ROW 、COL); 
				displayBoard(ショー、ROW、COL); 
				
			} 
		} 
		{ 
			のprintf( "入力エラーが、\ N-再入力してください"); 

		}エンド=時間(NULL); 

} 
	
	
	(difftime(エンド、スタートIF)< 60 COUNT1が&& =)== 0である
	{ 
		のprintf( "!あなたの成功鉱山おめでとうございます\ N-"); 
		
		のprintf( "使用時:%d秒\ N-"、(int型)difftime(エンド、スタート)); 
	} 
}

 この目的のために、より多くの地雷を完了するための簡単なゲームよりも、紙はありがとう完結します!

おすすめ

転載: www.cnblogs.com/lienguang/p/12324428.html