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

帶你實現(xiàn)初階掃雷小游戲—【C語言】

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

帶你實現(xiàn)初階掃雷小游戲—【C語言】

?目錄

1. 掃雷游戲?qū)崿F(xiàn)的思路

注意點1?

注意點2?

2. 函數(shù)實現(xiàn)掃雷功能

2.1 初始化棋盤

2.2 顯示棋盤

2.3 設(shè)置雷

2.4 排查雷

2.5 返回附近雷的個數(shù)

3.源碼

3.1 game.h

3.2 game.c?

3.3 test.c


1. 掃雷游戲?qū)崿F(xiàn)的思路


帶你實現(xiàn)初階掃雷小游戲—【C語言】


注意點1?

我們這里拿9*9的棋盤(其中包含10個雷)來實現(xiàn)(這里也可以自定義棋盤大小和雷的個數(shù)

》我們這里使用“ 0 ”表示不是雷,“ 1 ”表示雷《

?。?!——>這樣設(shè)置其實是有好處的,在 2.5 (返回雷的個數(shù)函數(shù)中體現(xiàn))


注意點1:我們在玩的時候,我們隨機(jī)點一個位子,就顯示出這個位置附近的8個位置有幾個是雷,如果這時那一個二維數(shù)組去實現(xiàn),這時就有以下問題:

1. 假如我們點的這個位置不是雷,附近8個位置又剛好只有一個位置是雷,那我們要表示這個位置附近就一個雷,我們就要把這個位置賦值成1

2. 但是這時就有這樣的問題,我們在顯示掃一次雷過后的棋盤時,由于這個位置賦值成1了,玩家這時不能判斷這個位置是雷呢還是雷的個數(shù)


這時我們用以下方法來解決? :使用兩個二維數(shù)組來實現(xiàn)

1個二維數(shù)組存放雷? ? ? ? ? ? ? ? ? ? ? ?另一個二維數(shù)組存放排查出來的信息


注意點2?

我們這里拿的9*9的二維數(shù)組去顯示數(shù)組,但是這時我們?nèi)绻挪槎S數(shù)組最邊緣的兩行和兩列位置時,我們?nèi)ピL問的時候就會出現(xiàn)數(shù)組下標(biāo)越界的情況


?> 這時我們就直接去定義11*11的二維數(shù)組就能很好的解決



2. 函數(shù)實現(xiàn)掃雷功能

2.1 初始化棋盤

注意:這里要初始化兩個數(shù)組

? ? ? ? ? ?》我們將mine數(shù)組——存放雷——全部初始化為 “0”

? ? ? ? ? ?》我們將show數(shù)組——存放排查出雷的信息——全部初始化為 “ ? ”,保持棋盤神秘? ? ? ? ? ? ? ? ? ?感

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)//這里的set可以自定義
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

2.2 顯示棋盤

優(yōu)化棋盤顯示:

將棋盤的上面一行—>打印出列序號

將棋盤的前面一行—>打印出行序號

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


2.3 設(shè)置雷

生成隨機(jī)二維數(shù)組下標(biāo),布置10個雷

這里我們又要使用生成隨機(jī)數(shù)的三個函數(shù)——rand、srand、time

void SetMine(char board[ROWS][COLS], int row, int col)
{
	//布置10個雷
	//生成隨機(jī)的坐標(biāo),布置雷
	int count = EASY_COUNT;
	while (count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;

		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count--;
		}
	}
}

2.4 排查雷

在排查雷的函數(shù)中,我們需要實現(xiàn)一個返回這個位置有幾個雷的函數(shù)GetMineCount

返回數(shù)值后,在排查雷后,把這個位置附近雷的個數(shù)顯示出來

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
			{
				//該位置不是雷,就統(tǒng)計這個坐標(biāo)周圍有幾個雷
				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");
		DisplayBoard(mine, ROW, COL);
	}
}

2.5 返回附近雷的個數(shù)

補(bǔ)充一個知識:字符在內(nèi)存中是以ASCII值存儲的


》“ 0 ” 、 “ 1 ” 、 “ 2 ”? 對應(yīng)的ASCII分別是 48 、49、 50《

這時有數(shù)字和字符之間的相互轉(zhuǎn)換

1. >? 數(shù)字2 + “0” = 2+48=50——>“2”? ? ? ? ? ?數(shù)字轉(zhuǎn)字符

2. >? “2” - “0” =2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 字符轉(zhuǎn)數(shù)字

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


3.源碼

3.1 game.h

#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define EASY_COUNT 10

#define ROW 9
#define COL 9

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

//初始化棋盤
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 board[ROWS][COLS], int row, int col);

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

3.2 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;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

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

void SetMine(char board[ROWS][COLS], int row, int col)
{
	//布置10個雷
	//生成隨機(jī)的坐標(biāo),布置雷
	int count = EASY_COUNT;
	while (count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;

		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count--;
		}
	}
}

int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
	return (mine[x-1][y]+mine[x-1][y-1]+mine[x][y - 1]+mine[x+1][y-1]+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
			{
				//該位置不是雷,就統(tǒng)計這個坐標(biāo)周圍有幾個雷
				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");
		DisplayBoard(mine, ROW, COL);
	}
}

3.3 test.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()
{
	char mine[ROWS][COLS];//存放布置好的雷
	char show[ROWS][COLS];//存放排查出的雷的信息
	//初始化棋盤
	//1. mine數(shù)組最開始是全'0'
	//2. show數(shù)組最開始是全'*'
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印棋盤
	//DisplayBoard(mine, ROW, COL);
	DisplayBoard(show, ROW, COL);
	//1. 布置雷
	SetMine(mine, ROW, COL);
	//DisplayBoard(mine, ROW, COL);
	//2. 排查雷
	FindMine(mine, show, ROW, COL);
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	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;
}

小余這里實現(xiàn)的是簡易版的掃雷,沒有實現(xiàn)遞歸功能,等之后小余學(xué)習(xí)了后在來完善!

如果覺得文章不錯,期待你的一鍵三連哦,你個鼓勵是我創(chuàng)作的動力之源,讓我們一起加油,頂峰相見?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-447256.html

到了這里,關(guān)于帶你實現(xiàn)初階掃雷小游戲—【C語言】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • C語言之掃雷小游戲的實現(xiàn)【含遞歸展開】

    C語言之掃雷小游戲的實現(xiàn)【含遞歸展開】

    掃雷游戲是1992年發(fā)行的一款大眾類益智游戲,對于許多80后、90后來說都是童年的回憶。如今三十年過去了,這款游戲依舊受到很多網(wǎng)友的喜愛,今天我們一起來模擬實現(xiàn)一下掃雷游戲。 本文所用的編譯器是VS2022 這里我們使用模塊化設(shè)計,模塊化設(shè)計就是把各個模塊的代碼分

    2024年02月02日
    瀏覽(92)
  • 帶你用Python制作一個經(jīng)典小游戲:掃雷

    名字:阿玥的小東東 學(xué)習(xí):Python、C/C++ 主頁鏈接:阿玥的小東東的博客_CSDN博客-pythonc++高級知識,過年必備,C/C++知識講解領(lǐng)域博主 目錄 游戲界面尺寸 方塊尺寸 雷的數(shù)量

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

    C語言掃雷小游戲

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

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

    掃雷小游戲【C語言】

    目錄 前言 一、基本實現(xiàn)邏輯 二、實現(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語言來實現(xiàn)掃雷小游戲的。這里不對掃雷的規(guī)則進(jìn)行贅述。玩家通過鍵盤輸入坐標(biāo)來探雷。博主在實現(xiàn)掃雷之前從未看過掃雷實現(xiàn)的相關(guān)視頻,所以這里實現(xiàn)的掃雷完全是博主的原生思路,具有邏輯性。下面詳細(xì)介紹一

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

    C語言小游戲——掃雷

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

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

    c語言小游戲之掃雷

    目錄 一:游戲設(shè)計理念及思路 二:初步規(guī)劃的游戲界面 三:開始掃雷游戲的實現(xiàn) 注:1.創(chuàng)建三個文件,test.c用來測試整個游戲的運行,game.c用來實現(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)記)

    大家好,我是深魚~ 目錄 一、游戲介紹 二、文件分裝 ?三、代碼實現(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)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包