C语言简单数组实现扫雷游戏

C语言简单数组实现扫雷游戏,第1张

      运用c语言数组知识实现简单的扫雷小游戏,游戏可以自己设定棋盘大小,其中以“*”代表雷,以“$”代表旗子

      话不多说直接上代码

game.h

定义函数,主要的函数定义在这里

#define _CRT_SECURE_NO_WARNINGS 1;
#define ROW 10
#define COL 10
#include
#include
void InitBoard(char board[ROW][COL],int row,int col);

void DispalyBoard(char board[ROW][COL], int row, int col);

void Mine(char board[ROW][COL], int row, int col,int x, int y);

char FakeClick(char board[ROW][COL], int x, int y);

void circle(char board[ROW][COL], int x, int y);

void FakeDisplay(char board[ROW][COL], char board2[ROW][COL]);

void Flag(char board[ROW][COL],int row,int col);

int judge(char board[ROW][COL], char board2[ROW][COL]);

int judge2(char board[ROW][COL], char board2[ROW][COL], int x, int y);

int ergodic(char board[ROW][COL]);

test.c

        运行程序在这里进行运行,首先选择游戏玩或不玩,之后运用坐标的方式来代替鼠标点击棋盘中的方格,在输入坐标时如果选择了y就代表着要进行插旗,如若直接输入坐标则是正常点击,游戏规则与玩法和扫雷几乎一样

#define _CRT_SECURE_NO_WARNINGS 1;
#include
#include"game.h"
#define ROW 10
#define COL 10
index()
{
	printf("*************************\n");
	printf("*      1.play game      *\n");
	printf("*      0.  exit         *\n");
	printf("*************************\n");
}

game()
{
	int i = 0;
	int j = 0;
	int a = 0;
	char b;
	char board[ROW][COL];
	char board2[ROW][COL];
	InitBoard(board,ROW,COL);
	InitBoard(board2, ROW, COL);
	DispalyBoard(board2, ROW, COL);
	printf("\n");
	printf("这是一个%dX%d的棋盘,请不要越界!\n",ROW-2,COL-2);
	while (1)
	{
		printf("请输入要点击的坐标:");
		scanf("%d,%d", &i, &j);
		if (0 < i <= 18 && 0 < j <= 18)
		{
			if (a < 1)
			{
				Mine(board, ROW, COL, i + 1, j + 1);
				a++;
			}
			printf("\n");
			circle(board, i + 1, j + 1);
			FakeDisplay(board, board2);
			DispalyBoard(board, ROW, COL);
			printf("\n");
			DispalyBoard(board2, ROW, COL);
			printf("请问要插旗子吗(y/n)\n");
			scanf("%c", &b);
			if (b == 'y')
			{
				printf("请输入棋子的坐标:");
				scanf("%d,%d", &i, &j);
				Flag(board2, i + 1, j + 1);
				DispalyBoard(board2, ROW, COL);
			}
		}
		else if (b == 'n')
		{
			continue;
		}
		if (judge2(board, board2, i, j) == 1)
		{
			printf("失败了,嘤嘤嘤(っ °Д °;)っ\n");
			break;
		}
		if (a == (ROW-2)*(COL-2)-(ROW/2))
		{
			judge(board, board2);
			printf("你成功了,耶耶耶┗|`O′|┛ 嗷~~");
			break;
		}
	}

}
int main()
{
	int a = 0;
	srand((unsigned)time(NULL));
	do
	{
		index();
		printf("请输入要选择的选项\n");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
				game();
				break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("没有此选项,请重新选择\n");
			break;
		}
	} while (a);


	return 0;
}

game.c

       最主要的代码就是实现点击之后雷的个数显示,和运用数组迁移实现点击棋盘的显示,并且由于对初学者比较友好所以部分代码写的比较繁琐

#define _CRT_SECURE_NO_WARNINGS 1;
#include"game.h"
#include
void InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 1; i < row-1; i++)
	{
		for (j = 1; j < col-1; j++)
		{
			board[i][j] = ' ';
		}
	}
	for (j = 0; j < row; j++)
	{
		board[row-1][j] = '#';
	}
	for (j = 0; j < row; j++)
	{
		board[0][j] = '#';
	}
	for (j = 1; j < row-1; j++)
	{
		board[j][0] = '#';
	}
	for (j = 1; j < row - 1; j++)
	{
		board[j][row-1] = '#';
	}
}

void DispalyBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf(" %c |", board[i][j]);
		}		
		printf("\n");
		printf("————————————————————\n");
	}
}
void Mine(char board[ROW][COL], int row, int col,int x,int y)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < ROW/2; i++)
	{
		int X = rand() % (row);
		int Y = rand() % (col);
		if (board[X][Y] != '*' && X != x-1 && Y != y-1 && board[X][Y]!='#'&& 0

       运用的几乎全是数组的知识,非常适合初学者做着玩来提高理解,虽然简单,但是也废了博主不少时间,也有一点小bug(多多包涵)

下面则为游戏开始棋盘的输出方式

输入坐标显示,并且随机显示5颗雷(雷的个数可以自己恒定)

运用数组挪移即可不显示雷

插入旗子,只需输入y,在输入旗子的坐标即可

如果点击的坐标是雷,游戏结束

同理,如果所有旗子覆盖了雷,并且其他位置全部被点开,则游戏胜利 

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/2989863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)