C語言實現掃雷(1)-創(chuàng)新互聯

個人主頁:平行線也會相交
歡迎 點贊👍 收藏? 留言? 加關注💓本文由 平行線也會相交 原創(chuàng)
收錄于專欄【C語言小項目】
在這里插入圖片描述

馬關網站建設公司創(chuàng)新互聯,馬關網站設計制作,有大型網站制作公司豐富經驗。已為馬關超過千家提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿網站制作要多少錢,請找那個售后服務好的馬關做網站的公司定做!

本文給大家?guī)硪粋€C語言的小項目—掃雷。
在這里插入圖片描述

項目文件
  • test.c
  • game.c
  • game.h

test.c
#define _CRT_SECURE_NO_WARNINGS 1
//掃雷

#include"game.h"

void game()
{//1.需要存放布置好的雷的信息,存放排查好的雷的信息,同時需要一個二維數組
	//2.排查坐標的時候,為了防止坐標越界,我們會給數組的行和列分別增加2

	char mine[ROWS][LINS] = {0 };
	char show[ROWS][LINS] = {0 };
	//棋盤初始化
	InitBoard(mine,ROWS,LINS,'0');
	InitBoard(show, ROWS, LINS, '*');

	//打印棋盤
	DisplayBoard(show,ROW,LIN);//

	//布置雷
	SetMine(mine, ROW, LIN);
	//DisplayBoard(mine, ROW,LIN);//

	//排查雷
	FindMind(mine,show,ROW,LIN);
}

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

void test()
{srand((unsigned int)time(NULL));//srand函數需要的類型是unsigned int,而time返回值類型是SIZE_T,故需要強制類型轉換
	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);
}
int main()
{test();
	return 0;
}
game.c
#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

//初始化棋盤
void InitBoard(char board[ROWS][LINS], int rows, int lins, char set)
{int i = 0;
	for (i = 0; i< rows; i++)
	{int j = 0;
		for (j = 0; j< lins; j++)
		{	board[i][j] = set;
		}
	}
}

//打印棋盤
void DisplayBoard(char board[ROWS][LINS], int row, int lin)
{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<= lin; j++)
		{	printf("%c ",board[i][j]);
		}
		printf("\n");
	}
	printf("--------掃雷---------\n");
}


//布置雷
void SetMine(char mine[ROWS][LINS], int row, int lin)
{int count = EASY_COUNT;
	while (count)
	{//1.生成隨機下標
		int x = rand() % row + 1;
		int y = rand() % row + 1;

		//2.布置雷
		if (mine[x][y] == '0')
		{	mine[x][y] = '1';
			count--;//不能放在if語句外,只有布置雷成功之后才可以count--,因為坐標可能生成重復的
		}

	}
}

//統(tǒng)計周圍8個坐標的情況并返回
int get_mine_count(char mine[ROWS][LINS], int x, int y)
{return(mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1]
		+ mine[x][y - 1] + mine[x][y + 1]
		+ mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0');
}

//排查雷
void FindMind(char mine[ROWS][LINS], char show[ROWS][LINS], int row, int lin)
{printf("請輸入要排查的坐標:>");
	int x = 0;
	int y = 0;
	int win = 0;
	while (win<(row*lin-EASY_COUNT))
	{scanf("%d %d", &x, &y);
		if (x >= 1 && x<= 9 && y >= 1 && y<= 9)
		{	if (show[x][y] != '*')//該坐標可能別排查過
			{		printf("該坐標被排查過了\n");
				continue;
			}
			if (mine[x][y] == '1')
			{		printf("很遺憾,你被炸死了\n");
				DisplayBoard(mine, ROW, LIN);//看看自已為什么被炸死
				break;
			}
			else
			{		int n = get_mine_count(mine, x, y);
				show[x][y] = n + '0';
				DisplayBoard(show, ROW, LIN);
				win++;
			}
		}
		else
		{	printf("坐標非法,重新輸入\n");
		}
	}
	if (win == (row * lin - EASY_COUNT))
	{printf("恭喜你,排雷成功\n");
		DisplayBoard(mine, ROW, LIN);//看一下自已怎么成功的
	}
}
game.h
#define _CRT_SECURE_NO_WARNINGS 1

#include#include#include#define ROW 9
#define LIN 9

#define ROWS ROW+2
#define LINS LIN+2

#define EASY_COUNT 10

//初始化棋盤
void InitBoard(char board[ROWS][LINS], int rows, int lins, char set);

//打印棋盤
void DisplayBoard(char board[ROWS][LINS],int row,int lin);

//布置雷
void SetMine(char board[ROWS][LINS], int row, int lin);

//排查雷
void FindMind(char mine[ROWS][LINS], char show[ROWS][LINS], int row, int lin);

//統(tǒng)計周圍8個坐標的情況并返回
int get_mine_count(char mine[ROWS][LINS], int x, int y);

以上就是完整代碼,掃雷的思路(思路一定要有)大體就是這樣的,當然不完善的地方也有很多。
比如:

1.能夠展開一片操作。
2.標記和取消類雷。
3.顯示剩余雷的個數。

后期再給大家一一展示吧。
在這里插入圖片描述

本文就到這里了,再見啦?。?!

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

文章名稱:C語言實現掃雷(1)-創(chuàng)新互聯
網站路徑:http://muchs.cn/article8/dschip.html

成都網站建設公司_創(chuàng)新互聯,為您提供網頁設計公司、品牌網站建設、全網營銷推廣、響應式網站網站建設、外貿網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

網站建設網站維護公司