国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C】C語言實(shí)現(xiàn)掃雷小游戲

這篇具有很好參考價值的文章主要介紹了【C】C語言實(shí)現(xiàn)掃雷小游戲。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


相信大家一定都玩過掃雷小游戲,今天我就帶大家來用C語言實(shí)現(xiàn)一個簡易版的掃雷小游戲。
這里我們還是需要三個文件來封裝我們的寫的代碼:
  • test.c ----- 用于我們代碼的測試,以及游戲整體框架的實(shí)現(xiàn)。
  • game .c ------ 用來封裝實(shí)現(xiàn)我們游戲的相關(guān)函數(shù)。
  • game.h ------ 主要用來聲明游戲的相關(guān)的函數(shù)。

游戲整體框架的實(shí)現(xiàn)

整個框架和我們的三子棋非常的相似,我們玩家再玩完一局后,還可以再來一局,也可以退出游戲,所以i我們還是要使用do…while循環(huán)來實(shí)現(xiàn),當(dāng)然菜單也是不能少的,用來提醒用戶的輸入。我們還是先把整體的框架搭建起來:

#include"game.h"

void mnue()
{
	printf("*****************************\n");
	printf("******    1. play    ********\n");
	printf("******    0. exit    ********\n");
	printf("*****************************\n");
}

void game(){}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//用于設(shè)置隨機(jī)數(shù)的起點(diǎn),后面設(shè)置雷時要使用
	do
	{
		mnue();
		printf("請輸入你的選擇:>");
		scanf("%d", &input);
		switch (input)
		{
			case 1 :
				game();
				break;
			case 0:
				printf("退出游戲\n");
				break;
			default: 
				printf("選擇錯誤,請重新選擇?。n");
				break;
		}
	} while (input);
	return 0;
}

我們游戲的整體框架搭建好以后,現(xiàn)在就只剩下一個game函數(shù)的實(shí)現(xiàn)了,這時我們的代碼就可以跑起來了,只不過還不能玩游戲。接下來我?guī)Т蠹襾韺?shí)現(xiàn)游戲的相關(guān)邏輯。

游戲邏輯的實(shí)現(xiàn)

我們掃雷游戲假設(shè)我們用的是9*9的格子,我們需要一個棋盤存放雷的信息

字符 0 代表非雷
字符 1 代表雷

這里為什么要這樣設(shè)計,后面給大家講??!
所以我們就需要一個9×9的二維字符數(shù)組來存放雷的信息。大家都知道我們在排查一次雷以后那個位置不是雷的話,就會顯示那個位置周圍有多少雷,這時如果那個位置旁邊有1個雷的話,就會生成歧義,那個1代表的到底是雷,還是周圍雷的個數(shù),針對這種情況,我們干脆直接在來一 個9×9的二維數(shù)組,專門來存放周圍雷的個數(shù)。
我們在排查雷的時候,在排查邊界是,很容易出現(xiàn)越界的情況,所以我們直接將我們的數(shù)組擴(kuò)大一圈,但是在打印給玩家是還是中間的9×9的棋盤。
在這里我們不能直接把9寫死,應(yīng)該定義宏來表示棋盤的大小,這樣以后方便來擴(kuò)大棋盤!如下:

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

我可以定義兩個二維字符數(shù)組來表示布置雷的信息,以及排查雷的信息

char mine[ROWS][COLS]; // 雷的信息
char show[ROWS][COLS]; // 排查后的信息

初始化函數(shù)

有了兩個數(shù)組后我們需要一個函數(shù)來初始化兩個數(shù)組,但由于初始化的內(nèi)容不同,所以我們需要把初始化的內(nèi)容傳進(jìn)去,所以就多需要一個參數(shù)。

void InitBoard(char board[ROWS][COLS], int rows, int cols,char set);

void InitBoard(char board[ROWS][COLS], int rows, int cols, char  set)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

打印函數(shù)

初始化以后我們要能講棋盤給打印出來給我們玩家來看,當(dāng)然我們打印的是show數(shù)組,不能給玩家看雷的信息。所以就需要一個打印棋盤的函數(shù)(我們給用戶看的是9×9的):

void DisplayBoard(char board[ROWS][COLS], int row, int col);

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	printf("--------掃雷游戲----------\n");
	// 給每一列加上序號,方便用戶排雷
	for (int i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (int i = 1; i <= row; i++)
	{
		printf("%d ", i);  // 給每一行加上序號,方便用戶排雷
		for (int j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
}

布雷

我們有了打印函數(shù)以后就要布置雷的信息了,所以我們還需要一個布置雷的函數(shù):

void SetMine(char mine[ROWS][COLS], int rows, int cols);

void SetMine(char board[ROWS][COLS], int row, int col)
{
	int count = EASY_COUNT; // EASY_COUNT是自己定義的一個宏,來設(shè)置游戲難度的
	while (count)
	{
		
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (board[x][y] == '0')  //不能在重復(fù)的位置布雷
		{
			board[x][y] = '1';
			count--;
		}
	}
}

排雷

當(dāng)我們布置好雷以后就剩一個排雷的函數(shù)了,我們在排查完雷后,要將信息放如show數(shù)組中打印給玩家,所以這里需要將兩個數(shù)組都傳過來。

void FindMine(char mine[ROWS][ROWS], char show[ROWS][COLS], int rows,int cols);

void FindMine(char mine[ROWS][ROWS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	while (win<row*col-EASY_COUNT)
	{
		printf("請輸入你要排查的坐標(biāo):>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (mine[x][y] == '1')
			{
				printf("你被炸死了!\n");
				break;
			}
			else
			{
				int count = GetMineCount(mine, x, y);
				show[x][y] = count + '0';
				//每次排完后給用戶打印棋盤
				DisplayBoard(show, ROW, COL);
				win++;
			}
		}
		else
		{
			printf("坐標(biāo)非法,重新輸入?。n");
		}
	}
	if (win == row * col - EASY_COUNT)
	{
		printf("玩家贏!\n");
	}
}

這里的win是一個計數(shù)器,如過我們用戶講非雷位置都排查過了,那win 就會 等于row * col - EASY_COUNT,這是我們就可以判斷玩家贏了,如果踩到雷了就會跳出循環(huán),結(jié)束游戲。
這里我們就需要一個GetMineCount來獲得排查位置周圍雷的個數(shù)。

獲取周圍雷的個數(shù)

我們前面設(shè)置的雷為字符 1 ,非雷為字符 0,所以我們值需要將周圍的8個坐標(biāo)相加,再減去8個0字符,就可以獲取周圍雷的個數(shù)。

int GetMineCount(char mine[ROWS][COLS],int x, int y)
{
	return (mine[x + 1][y + 1] + mine[x + 1][y] + mine[x - 1][y] + mine[x][y + 1] +
		mine[x + 1][y - 1] + mine[x - 1][y + 1] + mine[x - 1][y - 1] + mine[x][y - 1] -8*'0');
}

game函數(shù)的實(shí)現(xiàn)

我們有了相關(guān)游戲的函數(shù)了以后,game就很容易實(shí)現(xiàn)了。

void game()
{
	char mine[ROWS][COLS]; // 雷的信息
	char show[ROWS][COLS];  // 排查后的信息
	InitBoard(mine, ROWS, COLS, '0');
	//初始化棋盤
	InitBoard(show, ROWS, COLS, '*');
	//初始化棋盤
	DisplayBoard(show, ROW, COL);
	// 布置雷
	SetMine(mine, ROW, COL);
	//掃雷
	FindMine(mine, show, ROW, COL);
}

這時我們整個邏輯就通了,就可以玩我們的簡易版掃雷了。

今天的分享就到這里了,想要完整代碼的私信我,感謝大家的關(guān)注和支持??!文章來源地址http://www.zghlxwxcb.cn/news/detail-512405.html

到了這里,關(guān)于【C】C語言實(shí)現(xiàn)掃雷小游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言掃雷小游戲

    C語言掃雷小游戲

    掃雷的玩法:在一個9×9(初級)、16×16(中級)、16×30(高級)或自定義大小的方塊矩陣中隨機(jī)布置一定量的地雷(初級為10個,中級為40個,高級為99個),再由玩家逐個翻開方塊,翻開的地方將顯示周圍八個雷的個數(shù)。以找出所有地雷為最終游戲目標(biāo)。如果玩家翻開的方塊

    2024年02月05日
    瀏覽(93)
  • 掃雷小游戲【C語言】

    掃雷小游戲【C語言】

    目錄 前言 一、基本實(shí)現(xiàn)邏輯 二、實(shí)現(xiàn)步驟 1. 我們希望在進(jìn)入游戲時有一個菜單讓我們選擇 2. 我們希望可以重復(fù)的玩(一把玩完了還可以接著玩) 3. 采用多文件形式編程 ?4.要掃雷先得有棋盤(創(chuàng)建棋盤R*N) 5.初始化棋盤? 6.打印棋盤 7.設(shè)置雷 8.排查雷 三、全部源碼: 上期

    2024年02月11日
    瀏覽(88)
  • C語言:掃雷小游戲

    C語言:掃雷小游戲

    文接上一篇博文C語言:三子棋小游戲。本篇博文是使用C語言來實(shí)現(xiàn)掃雷小游戲的。這里不對掃雷的規(guī)則進(jìn)行贅述。玩家通過鍵盤輸入坐標(biāo)來探雷。博主在實(shí)現(xiàn)掃雷之前從未看過掃雷實(shí)現(xiàn)的相關(guān)視頻,所以這里實(shí)現(xiàn)的掃雷完全是博主的原生思路,具有邏輯性。下面詳細(xì)介紹一

    2024年02月09日
    瀏覽(91)
  • C語言小游戲——掃雷

    C語言小游戲——掃雷

    ????????結(jié)合前邊我們所學(xué)的C語言知識,本期我們將使用C語言實(shí)現(xiàn)一個簡單的小游戲——掃雷 目錄 前言 總體框架設(shè)計 多文件分裝程序 各功能模塊化實(shí)現(xiàn) 初始化棋盤 ?棋盤打印 埋雷 ?判贏與排雷 游戲邏輯安排 總結(jié) ????????和三子棋相同,游戲開始時不需要任何判

    2024年02月06日
    瀏覽(92)
  • c語言小游戲之掃雷

    c語言小游戲之掃雷

    目錄 一:游戲設(shè)計理念及思路 二:初步規(guī)劃的游戲界面 三:開始掃雷游戲的實(shí)現(xiàn) 注:1.創(chuàng)建三個文件,test.c用來測試整個游戲的運(yùn)行,game.c用來實(shí)現(xiàn)掃雷游戲的主體,game.h用來函數(shù)聲明和包含頭文件 2.為方便定位坐標(biāo),在展示數(shù)組時添加行號和列號 四:謝謝觀看? 聽說看到

    2024年01月23日
    瀏覽(114)
  • C語言——掃雷小游戲(遞歸展開版)

    C語言——掃雷小游戲(遞歸展開版)

    哈嘍,大家好,上次我們已經(jīng)學(xué)習(xí)了三子棋小游戲,今天我們來學(xué)習(xí)掃雷小游戲了。 目錄 1.游戲介紹 2.函數(shù)部分 2.1菜單 2.2game()函數(shù) 2.3mian()函數(shù) 2.4初始化棋盤 2.5打印棋盤 2.6布置雷 2.7排查雷 2.8統(tǒng)計雷 2.9遞歸,展開一片區(qū)域 3.完整代碼展示? 想必大家都玩過掃雷這款小游戲吧

    2024年02月03日
    瀏覽(89)
  • 【C語言】掃雷小游戲(遞歸展開版)

    【C語言】掃雷小游戲(遞歸展開版)

    哈嘍,大家好,上次我們已經(jīng)學(xué)習(xí)了三子棋小游戲,今天我們來學(xué)習(xí)掃雷小游戲了。 目錄 1.游戲介紹 2.函數(shù)部分 2.1菜單 2.2game()函數(shù) 2.3mian()函數(shù) 2.4初始化棋盤 2.5打印棋盤 2.6布置雷 2.7排查雷 2.8統(tǒng)計雷 2.9遞歸,展開一片區(qū)域 3.完整代碼展示? 想必大家都玩過掃雷這款小游戲吧

    2024年02月12日
    瀏覽(94)
  • 【C語言】小游戲-掃雷(清屏+遞歸展開+標(biāo)記)

    【C語言】小游戲-掃雷(清屏+遞歸展開+標(biāo)記)

    大家好,我是深魚~ 目錄 一、游戲介紹 二、文件分裝 ?三、代碼實(shí)現(xiàn)步驟 1.制作簡易游戲菜單 ?2. 初始化棋盤(11*11) ?3.打印棋盤(9*9) 4.布置雷? ?5.計算(x,y)周圍8個坐標(biāo)的和? 6.排查雷? ?1清屏后打印棋盤 2遞歸展開 3標(biāo)記雷 四、完整代碼 game.h:相關(guān)函數(shù)的聲明,整個代碼要引用

    2024年02月12日
    瀏覽(98)
  • C語言經(jīng)典小游戲之掃雷(超詳解釋+源碼)

    C語言經(jīng)典小游戲之掃雷(超詳解釋+源碼)

    “少年氣,是歷盡千帆舉重若輕的沉淀,也是樂觀淡然笑對生活的豁達(dá)!” 今天我們學(xué)習(xí)一下掃雷游戲怎么用C語言來實(shí)現(xiàn)! 一個掃雷盤面由許多方格(cell)組成,方格中隨機(jī)分布著一定數(shù)量的雷(mine),一個格子中至多只有1雷。勝利條件是打開所有安全格(非雷格,saf

    2024年02月12日
    瀏覽(96)
  • python小游戲畢設(shè) 掃雷小游戲設(shè)計與實(shí)現(xiàn)

    python小游戲畢設(shè) 掃雷小游戲設(shè)計與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 掃雷小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 《掃雷》是一款大

    2024年02月04日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包