91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言數組怎么實現掃雷游戲

發布時間:2022-04-14 10:16:34 來源:億速云 閱讀:146 作者:iii 欄目:開發技術

本篇內容主要講解“C語言數組怎么實現掃雷游戲”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言數組怎么實現掃雷游戲”吧!

    1、掃雷是什么?

    百度百科:《掃雷》是一款大眾類的益智小游戲,于1992年發行。游戲目標是在最短的時間內根據點擊格子出現的數字找出所有非雷格子,同時避免踩雷,踩到一個雷即全盤皆輸。

    C語言數組怎么實現掃雷游戲

    2、程序框架

    程序整體的框架可以搬用上篇三子棋的,這種框架也可以當作一種通用的形式,加以運用。

    2.1 主函數

    int main()
    {
    	int input = 0;
    	srand((unsigned int)time(NULL));//產生隨機數
    	do
    	{
    		menu();//菜單提示
    		printf("請輸入 ==> ");//輸入1或0,
    		scanf("%d", &input);
    		switch (input)//根據輸入選擇是否玩游戲
    		{
    		case 1:
    			game();//玩游戲的具體實現
    			break;
    		case 0:
    			printf("退出游戲\n");
    			break;
    		default:
    			printf("選擇錯誤,重新選擇!\n");
    			break;
    		}
    	} while (input);
    
    	return 0;
    }

    2.2 函數menu

    輸出提示菜單,提醒玩家,1是玩游戲,0是退出游戲

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

    2.3 函數game

    數組mine,初始化后放入字符 ‘0’

    • mine數組后續放入10個雷,有雷的位置用字符 ‘1’ 表示,沒有雷的位置仍然是字符 ‘0’

    • 10個雷的位置隨機生成

    數組show,初始化后放入字符 ‘*’

    • 字符 ‘*’ 是將生成雷的位置遮擋住,不讓玩家看見

    • show數組放入棋盤中關于具體坐標周圍的雷的信息

    • 如果坐標周圍有雷,將統計雷的個數,并顯示在這個坐標上

    void game()
    {
    	printf("開始玩游戲!\n");
    	//掃雷游戲的實現
    	//mine數組是用來存放布置好的雷的信息
    	//就10個雷在什么位置
    	char mine[ROWS][COLS] = { 0 };//'0'
    	//show數組是用來存放排查出的雷的信息
    	//坐標周圍有幾個雷
    	char show[ROWS][COLS] = { 0 };//'*'
    
    	//初始化棋盤
    	init_board(mine, ROWS, COLS, '0');
    	init_board(show, ROWS, COLS, '*');
    	//打印棋盤
    	//show_board(mine, ROW, COL);//全是字符'0'
    	//show_board(mine, ROW, COL);//全是'*'
    	//布置雷
    	set_mine(mine, ROW, COL);//雷的數組
    	//show_board(mine, ROW, COL);這是顯示10個雷在哪里
    	show_board(show, ROW, COL);//輸出*暫時掩蓋雷在哪里
    	//排查雷
    	find_mine(mine, show, ROW, COL);
    }
    2.3.1 函數init_board

    init_board初始化參數是將棋盤初始化,讓整個棋盤顯示字符 ‘0’ 和 ‘*’

    //初始化棋盤    參數:行數 列數  行數 列數 字符0或* 
    void init_board(char arr[ROWS][COLS], int rows, int cols, char set)
    {//set表示初始化傳進來的字符是0 還是 *
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < rows; i++)
    	{
    		for (j = 0; j < cols; j++)
    		{
    			arr[i][j] = set;
    		}
    	}
    }
    2.3.2 函數show_board

    show_board是展示棋盤的,可以看到棋盤里面雷的信息,以及后續掃雷時,棋盤的具體狀態

    //展示棋盤
    void show_board(char arr[ROWS][COLS], int row, int col)
    {
    	int i = 0;
    	int j = 0;
    	printf("------------掃雷------------\n");
    	for (i = 0; i <= col; i++)
    	{
    		printf("%d ", i);//列號,棋盤首先打印列數
    	}
    	printf("\n");
    	for (i = 1; i <= row; i++)
    	{
    		printf("%d ", i);//行前面的數字,行號
    		for (j = 1; j <= col; j++)
    		{
    			printf("%c ", arr[i][j]);//打印棋盤每個元素
    		}
    		printf("\n");
    	}
    	printf("------------掃雷------------\n");
    }
    2.3.3 函數set_mine

    函數set_mine是布置雷的,會在棋盤內隨機在10個坐標位置產生雷

    //布置雷
    void set_mine(char mine[ROWS][COLS], int row, int col)
    {
    	int count = EASY_COUNT;//布置10個雷
    	int x = 0;//行坐標
    	int y = 0;//列坐標
    	while (count)//直到10個雷布置完成,退出循環
    	{
    		x = rand() % row + 1;//取模是0-8,加1就是1-9
    		y = rand() % col + 1;
    		if (mine[x][y] == '0')//是空的,就放雷,否則重新隨機產生坐標位置
    		{
    			mine[x][y] = '1';//布置雷
    			count--;
    		}
    	}
    }
    2.3.4 函數find_mine

    函數find_mine是排查雷,每次玩家排雷都先輸入一個坐標,然后判斷坐標上的字符是否為1:

    • 1為雷,游戲結束

    • 不是1,統計坐標周圍8個位置雷的個數,以字符放入形式顯示在坐標上

    //排查雷
    void find_mine(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 <= row && y >= 1 && y <= col)//在1-9的坐標范圍內
    		{
    			if (mine[x][y] == '1')//確定坐標為字符'1',就是雷
    			{
    				printf("很遺憾,被炸死了\n");
    				show_board(mine, ROW, COL);//顯示所有雷的位置
    				break;
    			}
    			else//不是字符1,坐標就不是雷,顯示坐標周圍有雷的個數
    			{
    				int count = get_mine_count(mine, x, y);//函數計算類的個數
    				show[x][y] = count + '0';//周圍有雷的個數+'0'就轉換成字符了
    				show_board(show, ROW, COL);//打印出來,每次掃雷后的棋盤
    				win++;//掃了一次雷就++
    			}
    		}
    		else//超過坐標范圍
    		{
    			printf("坐標非法,重新輸入\n");
    		}
    	}
    	if (win == row * col - EASY_COUNT)//掃雷次數==9*9-10 71次就結束
    	{
    		printf("恭喜你,排雷成功\n");
    		show_board(mine, ROW, COL);//顯示雷的信息
    	}
    }
    2.3.5 函數get_mine_count

    函數get_mine_count統計雷的個數:

    • 字符 &rsquo;1&lsquo;代表有雷,字符 &rsquo;0&lsquo;代表沒有, &rsquo;1&lsquo;- &rsquo;0&lsquo;為數字1,代表1個雷

    • 坐標周圍8個坐標上的字符相加 - 8 * &lsquo;0&rsquo;,結果就是有雷的個數,是整形

    //統計坐標周圍有雷的個數
    int get_mine_count(char mine[ROWS][COLS], int x, int y)
    {//坐標周圍的8個地方減去'0',再相加的個數就是類的個數
    	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、頭文件.h

    #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 //10個雷的個數
    //初始化
    void init_board(char arr[ROWS][COLS], int rows, int cols, char set);
    //打印
    void show_board(char arr[ROWS][COLS], int row, int col);
    //布置雷
    void set_mine(char mine[ROWS][COLS], int row, int col);

    4、游戲試玩

    運行結果見下圖,基本滿足了游戲功能。

    C語言數組怎么實現掃雷游戲

    到此,相信大家對“C語言數組怎么實現掃雷游戲”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    闸北区| 万州区| 屏东市| 牡丹江市| 高陵县| 辛集市| 浦江县| 南昌县| 大关县| 马尔康县| 黎平县| 道孚县| 上杭县| 南皮县| 浦城县| 九寨沟县| 镇巴县| 乌苏市| 乌拉特后旗| 宁安市| 澄迈县| 大埔区| 博野县| 武安市| 宜川县| 乐山市| 慈利县| 辉南县| 竹北市| 自贡市| 天镇县| 宁明县| 抚松县| 固始县| 依安县| 万源市| 博野县| 民县| 昆明市| 抚顺县| 桐柏县|