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

C++實現簡易版掃雷游戲

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

一、菜單欄

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

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

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

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

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

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

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

三、初始化棋盤

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

四、打印棋盤

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

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

 

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

五、布置雷

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

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

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

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

 

六、排查雷

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

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

如果排查雷時踩到雷,則這局游戲也就結束了,就該跳出循環(huán),并給予提示,同時打印棋盤,讓玩家輸的明白點兒

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

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

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

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

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

七、全部代碼

//測試文件
#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
//放置雷的個數
#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;//已經布置雷的個數
	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;//已經排查雷的個數
	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);
	}
}

總結

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

相關文章

  • C++中md5 算法實現代碼

    C++中md5 算法實現代碼

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

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

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

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

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

    C++實現單鏈表按k值重新排序的方法

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

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

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

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

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

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

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

    一起來練習C++的指針

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

    如何在C++類的外部調用類的私有方法

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

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

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

最新評論

延吉市| 武邑县| 阳高县| 息烽县| 莎车县| 永清县| 和田县| 开鲁县| 大理市| 宝鸡市| 芜湖市| 子长县| 修武县| 桃园县| 徐水县| 余干县| 祥云县| 辛集市| 米脂县| 涟水县| 邻水| 南城县| 绵竹市| 塔河县| 庆云县| 神木县| 鹿泉市| 石门县| 加查县| 荔波县| 盐池县| 马鞍山市| 车险| 东兴市| 丰原市| 二手房| 四平市| 永济市| 绥滨县| 博客| 绥江县|