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

C初階必寫的C語言小游戲—掃雷,一看就會,看完就能寫

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

一.前言

人盡皆知的掃雷小游戲,原理簡單,寫法也簡單,我會通過C語言分各個部分將這個小游戲進(jìn)行剖析,一看就會!

二.資源環(huán)境的配置

我們需要新建一個頭文件game.h,兩個源文件game.c和text.c,一共三個文件
他們的關(guān)系是這樣的:
C初階必寫的C語言小游戲—掃雷,一看就會,看完就能寫

test.c是主體,是游戲的測試邏輯
game.c是游戲的實(shí)現(xiàn)邏輯
game.h是實(shí)現(xiàn)游戲函數(shù)的聲明

也就是說,main函數(shù)在test.c內(nèi),游戲所需要實(shí)現(xiàn)的各項(xiàng)功能寫在game.c內(nèi),我們需要在text.c內(nèi)使用,必須要引用他們,game.h則是各個函數(shù)的聲明。將一整個游戲分為這三個部分來寫,不僅可以很好的區(qū)分內(nèi)容,而且不會讓我們的代碼看起來雜亂無序,便于后期的修改。

三.游戲整體構(gòu)思

最基本的掃雷游戲需要以下幾個功能

1.游戲打開首先需要有菜單,它要有讓我們實(shí)現(xiàn)自由進(jìn)入游戲和退出游戲的功能
2.需要兩個二維數(shù)組存放布置雷和排查雷的信息
3.初始化棋盤
4.布置雷
5.打印棋盤
6.排查雷

1.游戲的開始與結(jié)束(菜單)

為了有利于分析,我會把各個部分的功能分解,主體在text.c內(nèi)實(shí)現(xiàn)
別忘了我們函數(shù)的聲明全部在game.h內(nèi),使用時必須包含頭文件(include “game.h”)

text.c
菜單

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

游戲的開始與退出

int main()
{	
	int input = 0;	
	do 
	{
		menu();
		printf("請輸入:>");
        scanf("%d",&input);
		switch (input)
		{
		  case 1:
			  game();
			  break;
		  case 0:
			  printf("退出游戲\n");
			  break;
		  default:
			  printf("選擇錯誤,請重新選擇\n");
			  break;
		}
		
	} while (input);


	return 0;

}

2.創(chuàng)建二維數(shù)組用來布置雷和排查雷的信息

本來我們存放棋盤數(shù)據(jù)只需要兩個9 * 9的二維數(shù)組
但是我們掃雷,需要排查一個坐標(biāo)周圍八個坐標(biāo)是否有雷,如果那個坐標(biāo)在邊界,我們定義的數(shù)組只是9 * 9的,那么這個時候數(shù)組則會越界,所以我們要將數(shù)組創(chuàng)建為11*11的,這樣數(shù)組就不會越界了
棋盤內(nèi)數(shù)據(jù)為字符,數(shù)組定義為char類型即可

為了便于區(qū)分,先在game.h內(nèi)定義ROW(行)和COL(列)為9,ROWS和COLS就是ROW和COL分別加2.

在 text.c的game()內(nèi)創(chuàng)建

char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };

3.初始化棋盤

未開始掃雷時,我們要讓棋盤上顯示*,因?yàn)檫€沒安放雷,所以我們排查的坐標(biāo)點(diǎn)開為‘0’
text.c內(nèi)

InitBoard(mine, ROWS, COLS, '0');
InitBoard(show, ROWS, COLS, '*');

game.h內(nèi)

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

game.c內(nèi)

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

}

4.打印棋盤

雖然我們的棋盤大小是11*11的,但是我們需要的只是9 * 9,所以只接收9 * 9的就可以了,下面的布置雷和排查雷也同理

text.c

DisplayBoard(show, ROW, COL);

game.h

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

game.c

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("******* 掃雷 *******\n");
	for (j = 0; j <= row; j++)
	{
		printf("%d ",j);
	}
	    printf("\n");
	for (i = 1; i <= row; i++)
	{		
          printf("%d ",i);
			
		for (j = 1; j <= col; j++)
		{
			printf("%c ",board[i][j]);
		}
		printf("\n");
	}

}

5.布置雷

在布置雷的代碼中,我們會用上隨機(jī)數(shù)rand()函數(shù)和時間戳,所以我們要在game.h中包含它們頭文件#include<stdlib.h>和#include<time.h>。同時在主函數(shù)內(nèi)要補(bǔ)上這行代碼

srand((unsigned int)time(NULL));

text.c

SetMine(mine, ROW, COL);

game.h

void SetMine(char mine[ROWS][COLS], int row, int col);

game.c

void SetMine(char mine[ROWS][COLS], int row, int col)
{
	
	
	int count = Easy_Count;
	while(count)
	{   int x = rand() % row + 1;
	    int y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
		    count--;
		}		
	}
}

6.排查雷

在排查雷的過程中,如果我們剛好排到了雷,那么我們就被炸死,不用排查周圍的雷.
但是如果沒有排到雷,就要排查非雷坐標(biāo)周圍的雷,所以我們還需要一個函數(shù)來排查非雷坐標(biāo)周圍的雷。
game.h
排查非雷坐標(biāo)周圍的雷

int GetMineCount(char mine[ROWS][COLS], int row, int col);

game.c
原理:因?yàn)槲覀兎抢罪@示的是0,有雷則顯示1,所以我們把非雷坐標(biāo)周圍八個坐標(biāo)加起來,然后減去8*‘0’就知道周圍有幾個雷了,別忘記了‘0’加上1就是‘1’哦!

int GetMineCount(char mine[ROWS][COLS], int x, int y)
{

	return (mine[x - 1][y + 1] + mine[x][y + 1]
		+ mine[x + 1][y + 1] + mine[x - 1][y]
		+ mine[x + 1][y]+ mine[x - 1][y - 1]
	+ mine[x][y - 1] + mine[x + 1][y - 1] - 8 * '0');
		  
}

text.c

FindMine(mine, show, ROW, COL);

game.h

void FindMine(char ming[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c
游戲?yàn)楹唵坞y度,在game.h內(nèi)定義Easy_Count為10,代表9*9=81個地方共有十個雷
創(chuàng)建一個整形變量win,如果排查到非雷,則win++,當(dāng)win<ROW * COL-Easy_Count則掃雷成功

void FindMine(char mine[ROWS][COLS], 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");
				DisplayBoard(mine, ROW, COL);
				break;
			}
			else
			{
			    //該坐標(biāo)不是雷,則排查其周圍有沒有雷
				int count = GetMineCount(mine, x, y);
				show[x][y] = count + '0';
				DisplayBoard(show, ROW, COL);
				win++;
						
			}
		}
		else
		{
			printf("坐標(biāo)非法,請重新輸入\n");
		}

	}
		
}

四.所有代碼及效果展示

text.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"

void menu()
{
	printf("***************************\n");
	printf("********* 1.play **********\n");
	printf("********* 0.exit **********\n");
	printf("***************************\n");
}
void game()
{   //mine 數(shù)組用來存放布置雷的信息
	char mine[ROWS][COLS] = { 0 };
	//show 數(shù)組用來存放排查雷的信息
	char show[ROWS][COLS] = { 0 };
	//初始化棋盤
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印棋盤
	DisplayBoard(show, ROW, COL);
	//布置雷
	SetMine(mine, ROW, COL);
	/*DisplayBoard(mine, ROW, COL);*/
	//排查雷
	FindMine(mine, show, ROW, COL);


}

int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;	
	do 
	{
		menu();
		printf("請輸入:>");
        scanf("%d",&input);
		switch (input)
		{
		  case 1:
			  game();
			  break;
		  case 0:
			  printf("退出游戲\n");
			  break;
		  default:
			  printf("選擇錯誤,請重新選擇\n");
			  break;

		}
		
	} while (input);


	return 0;

}

game.h

#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define Easy_Count 10

//初始化棋盤
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印棋盤
void DisplayBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char ming[ROWS][COLS], char show[ROWS][COLS], int row, int col);
//排查非雷坐標(biāo)周圍的雷
int GetMineCount(char mine[ROWS][COLS], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"


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

}
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("******* 掃雷 *******\n");
	for (j = 0; j <= row; j++)
	{
		printf("%d ",j);
	}
	    printf("\n");
	for (i = 1; i <= row; i++)
	{		
          printf("%d ",i);
			
		for (j = 1; j <= col; j++)
		{
			printf("%c ",board[i][j]);
		}
		printf("\n");
	}

}
void SetMine(char mine[ROWS][COLS], int row, int col)
{
	
	
	int count = Easy_Count;
	while(count)
	{   int x = rand() % row + 1;
	    int y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
		    count--;
		}
		
	}

}
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{

	return (mine[x - 1][y + 1] + mine[x][y + 1]
		+ mine[x + 1][y + 1] + mine[x - 1][y]
		+ mine[x + 1][y]+ mine[x - 1][y - 1]
	+ mine[x][y - 1] + mine[x + 1][y - 1] - 8 * '0');
		  
}
void FindMine(char mine[ROWS][COLS], 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");
				DisplayBoard(mine, ROW, COL);
				break;
			}
			else
			{
			    //該坐標(biāo)不是雷,則排查其周圍有沒有雷
				int count = GetMineCount(mine, x, y);
				show[x][y] = count + '0';
				DisplayBoard(show, ROW, COL);
				win++;
				
			}
		}
		else
		{
			printf("坐標(biāo)非法,請重新輸入\n");
		}

	}
		
}

C初階必寫的C語言小游戲—掃雷,一看就會,看完就能寫
C初階必寫的C語言小游戲—掃雷,一看就會,看完就能寫

C初階必寫的C語言小游戲—掃雷,一看就會,看完就能寫
本文到此結(jié)束,關(guān)注我,帶你解鎖進(jìn)階掃雷,下次更精彩!文章來源地址http://www.zghlxwxcb.cn/news/detail-451519.html

到了這里,關(guān)于C初階必寫的C語言小游戲—掃雷,一看就會,看完就能寫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(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語言小游戲——掃雷

    ????????結(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語言)

    ????????小編開了一個關(guān)于游戲的專欄,主要是運(yùn)用easyx圖形庫進(jìn)行的。 ? ? ? ?第一章:人生中寫的第一個小游戲——貪吃蛇(C語言) ????????這個游戲的代碼我在gitee上發(fā)布了,大家如果不嫌棄,可以進(jìn)入這個網(wǎng)址進(jìn)行查看和復(fù)制:https://gitee.com/rising-sun-1。 ? ? ?

    2024年02月09日
    瀏覽(32)
  • C語言:輕松實(shí)現(xiàn)掃雷小游戲

    C語言:輕松實(shí)現(xiàn)掃雷小游戲

    目錄 一、前言 二、掃雷步驟 1.創(chuàng)建項(xiàng)目 2.設(shè)計整體框架 1.定義數(shù)組長度和雷的個數(shù) 2.game函數(shù)功能 三、頭文件game.h代碼實(shí)現(xiàn)? 四、測試文件test.c代碼實(shí)現(xiàn) 五、game函數(shù)功能實(shí)現(xiàn) 1.初始化棋盤 2.打印棋盤 ?3.布置雷 4. 獲得雷的個數(shù) ?5.排查雷 6.game函數(shù)實(shí)現(xiàn)代碼 六、總結(jié) 大家好

    2024年02月03日
    瀏覽(90)
  • 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語言實(shí)現(xiàn)掃雷小游戲

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

    2024年02月11日
    瀏覽(646)
  • 【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日
    瀏覽(97)
  • 【C語言實(shí)現(xiàn)掃雷小游戲——可展開一片】

    【C語言實(shí)現(xiàn)掃雷小游戲——可展開一片】

    學(xué)習(xí)完了函數(shù)和數(shù)組,讓我們做個掃雷小游戲鞏固一下所學(xué)的知識把! 使用控制臺操作 通過菜單實(shí)現(xiàn)選擇 棋盤為9×9 默認(rèn)隨機(jī)布置10個雷 排查雷 如果排查的位置不是雷,就顯示周圍有幾個雷 排查位置是雷,游戲結(jié)束,玩家失敗 把10個雷全部排除,游戲結(jié)束,玩家成功 掃雷

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

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

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

    2024年02月12日
    瀏覽(96)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包