最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)簡易版掃雷游戲

 更新時間:2022年01月14日 08:40:35   作者:風(fēng)影66666  
大家好,本篇文章主要講的是C++實現(xiàn)簡易版掃雷游戲,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

一、菜單欄

1.先用printf函數(shù)制作一個簡易版的菜單,并附上選項提示,玩游戲或者退出游戲

2.為了使玩家能選擇玩或者不玩游戲,則采用do while循環(huán)比較合適,同時,借助switch case語句來進行選擇

 3.玩游戲的那個選項,只需調(diào)用game()函數(shù)即可

二、創(chuàng)建棋盤數(shù)組

為了便于修改棋盤大小,所以采用宏定義的方式定義其行與列

由于有三個信息:放置雷的的信息,周圍雷的信息,以及沒有雷的信息,所以采用兩個棋盤比較合適

又因為每排查一次雷,都得打印該排查坐標周圍八個坐標有幾個雷的信息,所以為了防止數(shù)組越界,從而采用比該棋盤大一圈的棋盤,但是最外面一圈不放置雷

三、初始化棋盤

因為顯示棋盤和放置雷的棋盤都需要初始化,為了使兩個棋盤調(diào)用同一個初始化函數(shù),所以采取多傳一個參數(shù)的方法

四、打印棋盤

為了排查雷時,能夠使棋盤間分割,從而更加清晰,所以最上面和最下面都各打印一個分割行

為了便于游戲玩家找到想要排查的坐標,所以將其行與列的提示打印

 

打印棋盤時,最外邊一圈不需要打印,所以數(shù)組下標從1開始即可

五、布置雷

因為想讓雷的個數(shù)便于更改,所以采用宏定義的方式更好

由于布置雷的個數(shù)不止一個,所以必然得采用循環(huán)的方式來進行

同時,為了使布置的雷具有隨機性,那么就需要采用隨機函數(shù)和時間戳來進行,time和rand函數(shù),另外使用rand函數(shù)的同時,需要調(diào)用srand函數(shù)

隨機數(shù)具有不確定性,所以需要將其%上棋盤(不包括最外層)的行與列,再+1,才能限制其范圍為布置雷的范圍或排查雷的范圍

 

六、排查雷

排查的坐標是有范圍限制的,所以輸入錯誤時,需要給予提示

排雷涉及多次排查,所以得采用循環(huán)

如果排查雷時踩到雷,則這局游戲也就結(jié)束了,就該跳出循環(huán),并給予提示,同時打印棋盤,讓玩家輸?shù)拿靼c兒

如果此次排查雷成功,那就需打印此坐標周圍八個坐標有雷的個數(shù)

由于雷的個數(shù)采用整數(shù),而'1' - '0' = 1,所以每個坐標的數(shù)都要-‘0’,如下圖

 然后,把此數(shù)返回給show棋盤數(shù)組,同時打印show棋盤數(shù)組

同時,show棋盤數(shù)組是浮點型,所以需該整數(shù)+‘0’再賦值給show棋盤數(shù)組

 當排查的坐標只有有雷的坐標沒有打印時,就表示玩家贏了,即定義一個變量,每排查一個雷就+1,當其等于棋盤(不包括最外層)的坐標個數(shù)-雷的個數(shù)時,玩家就贏了

七、全部代碼

//測試文件
#include"game.h"
void menu()
{
	printf("**************************\n");
	printf("****    1.play    ********\n");
	printf("****    0.exit    ********\n");
	printf("**************************\n");
}
//玩游戲
void game()
{
	//創(chuàng)建棋盤
	//放置雷的棋盤
	char mine[ROWS][COLS];
	//顯示排查后的棋盤
	char show[ROWS][COLS];
	//初始化棋盤
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印棋盤
	//DisplayBoard(mine, ROW, COL);
	DisplayBoard(show, ROW, COL);
	//布置雷
	SetMineBoard(mine, ROW, COL);
	//排查雷
	FindBoard(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;
}
//聲明文件
#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
//放置雷的個數(shù)
#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 SetMineBoard(char board[ROWS][COLS], int row, int col);
//排查雷
void FindBoard(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
//定義文件
#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 <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		int j = 0;
		//列提示
		printf("%d ",i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("--------------------------------\n");
}
 
//布置雷
void SetMineBoard(char board[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = 0;//已經(jīng)布置雷的個數(shù)
	while (count < EASY_COUNT)
	{
		x = rand() % row + 1;
		y = rand() % col + 1;
		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count++;
		}
	}
}
 
int GetMineBoard(char board[ROWS][COLS], int x, int y)
{
	return (board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1]
		+ board[x][y - 1] + board[x][y + 1]
		+ board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0');
}
//排查雷
void FindBoard(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;//已經(jīng)排查雷的個數(shù)
	while (win < row * col - EASY_COUNT)
	{
		printf("請輸入要排查的坐標:");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= col && y >= 1 && y <= col)
		{
			if (mine[x][y] == '1')
			{
				printf("很遺憾,你被炸死了\n");
				DisplayBoard(mine, ROW, COL);
				break;
			}
			else
			{
				show[x][y] = GetMineBoard(mine, x, y) + '0';
				DisplayBoard(show, ROW, COL);
				win++;
			}
		}
		else
		{
			printf("坐標非法,請重新輸入\n");
		}
	}
	if (win == row * col - EASY_COUNT)
	{
		printf("恭喜您,排雷成功!\n");
		DisplayBoard(mine, ROW, COL);
	}
}

總結(jié)

到此這篇關(guān)于C++實現(xiàn)簡易版掃雷游戲的文章就介紹到這了,更多相關(guān)C++掃雷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中md5 算法實現(xiàn)代碼

    C++中md5 算法實現(xiàn)代碼

    在網(wǎng)上找了份c++ MD5的代碼,就簡單保存一下,需要的朋友可以參考下
    2017-07-07
  • CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟

    CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟

    本文主要介紹了CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C++移除序列中連續(xù)重復(fù)的特定值示例代碼

    C++移除序列中連續(xù)重復(fù)的特定值示例代碼

    這篇文章主要給大家介紹了關(guān)于在C++中如何移除序列中連續(xù)重復(fù)的特定值,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • C++實現(xiàn)單鏈表按k值重新排序的方法

    C++實現(xiàn)單鏈表按k值重新排序的方法

    這篇文章主要介紹了C++實現(xiàn)單鏈表按k值重新排序的方法,結(jié)合實例形式分析了C++單鏈表中按照給定值進行判斷與排序的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • C++精要分析decltype的作用及用法

    C++精要分析decltype的作用及用法

    decltype是C++11新增的一個關(guān)鍵字,和auto的功能一樣,用來在編譯時期進行自動類型推導(dǎo)。引入decltype是因為auto并不適用于所有的自動類型推導(dǎo)場景,在某些特殊情況下auto用起來很不方便,甚至壓根無法使用
    2022-05-05
  • 基于C++實現(xiàn)柏林噪聲算法(Perlin?Noise)

    基于C++實現(xiàn)柏林噪聲算法(Perlin?Noise)

    Perlin噪聲(Perlin?noise,又稱為柏林噪聲)指由Ken?Perlin發(fā)明的自然噪聲生成算法,具有在函數(shù)上的連續(xù)性,并可在多次調(diào)用時給出一致的數(shù)值。本文將用C++實現(xiàn)柏林噪聲算法,感興趣的可以了解一下
    2023-03-03
  • 使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    Visual?Studio?2022?引入了用于?Linux?C++?開發(fā)的本機?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下
    2021-11-11
  • 一起來練習(xí)C++的指針

    一起來練習(xí)C++的指針

    這篇文章主要為大家詳細介紹了C++的指針,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 如何在C++類的外部調(diào)用類的私有方法

    如何在C++類的外部調(diào)用類的私有方法

    這篇文章主要介紹了如何在C++類的外部調(diào)用類的私有方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Qt實現(xiàn)QLineEdit輸入前提示輸入范圍并用正則表達式限制輸入范圍

    Qt實現(xiàn)QLineEdit輸入前提示輸入范圍并用正則表達式限制輸入范圍

    在日常開發(fā)過程中QLineEdit作為輸入框,有時要限制輸入的內(nèi)容,這篇文章主要給大家介紹了關(guān)于Qt實現(xiàn)QLineEdit輸入前提示輸入范圍并用正則表達式限制輸入范圍的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05

最新評論

濮阳市| 梁河县| 岑巩县| 岳西县| 砀山县| 太保市| 溆浦县| 阳谷县| 龙泉市| 吴旗县| 德清县| 酒泉市| 集安市| 聊城市| 天全县| 大厂| 农安县| 永泰县| 新邵县| 武宣县| 咸宁市| 邵东县| 绥阳县| 夹江县| 仁怀市| 遂平县| 明溪县| 法库县| 敦煌市| 甘洛县| 新昌县| 南郑县| 蓬莱市| 工布江达县| 闻喜县| 浦北县| 二连浩特市| 长沙市| 庆城县| 开原市| 横峰县|