扫雷游戏代码分享(c基础)

hi , I am 36.

代码来之不易👍👍👍

创建两个.c 一个.h

1:test.c

cs 复制代码
#include"game.h"

void game()
{
	//创建数组
	char mine[ROWS][COLS] = { 0 };
	char show[ROWS][COLS] = { 0 };
	char temp[ROWS][COLS] = { 0 };
	//初始化数组
	Iniarr(mine, ROWS, COLS, '0');
	Iniarr(show, ROWS, COLS, '*');
	Iniarr(temp, ROWS, COLS, '0');


	//选择模式
	mold(mine, ROW, COL);

	//打印出来
	/*Minebord(mine, ROW, COL);*/
	Showbord(show, ROW, COL);

	//排查
	int flag = 1;
	while (flag)
	{
		/*Minebord(mine, ROW, COL);*/

		flag = Tell__count(mine, show, temp,ROWS, COLS);
		
		Showbord(show, ROW, COL);
		int x = 0;
		//判断胜利
		if (x = Iswin(mine, show, ROW, COL)) break;
		//是否标记
		if (flag) 	
		{
			Isflag(show, ROW, COL);
			Showbord(show, ROW, COL);
		}
		
	}
	if (flag == 0)
	{
		Minebord(mine, ROW, COL);
		printf("你输了\n\n\n");
		Sleep(2000);
	}
	else
	{
		printf("\nCongratulations!!!\a\a\n");
		printf("Congratulations!!!\a\a\n");
		printf("Congratulations!!!\a\a\n");
		printf("Congratulations!!!\a\a\n");
		printf("Congratulations!!!\a\a\n");
		printf("Congratulations!!!\a\a\n");

	}
}


int main()
{

	//设置种子值
	srand((unsigned int)time(NULL));

	Myintub();//介绍
	menu();//菜单
	int n = 0;
	do
	{


		scanf("%d", &n);
		switch (n)
		{
		case 1:game(); printf("请问是否继续?\n"); menu(); break;
		case 0:system("cls"); Myintuo(); break;
		default:system("cls"); printf("该值无效 请重新输入\n"); Sleep(1000); system("cls"); menu(); break;
		}

	} while (n);




	return 0;
}

2: game.h

cs 复制代码
#pragma once
#define _CRT_SECURE_NO_WARNINGS

#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2

#include<stdio.h>
#include<windows.h>
#include<time.h>




void Myintub();

void Myintuo();

void menu();

void Iniarr(char arr[ROWS][COLS], int rows, int cols, int set);

void Minebord(char arr[ROWS][COLS], int row, int col);

void Showbord(char arr[ROWS][COLS], int row, int col);

void mold(char arr[ROWS][COLS], int row, int col);

void Ini__my__count(char arr[ROWS][COLS], int row, int col,int n);

int  Tell__count(char arr[ROWS][COLS], char show[ROWS][COLS], char temp[ROWS][COLS], int rows, int cols);

int  print(char mine[ROWS][COLS], char show[ROWS][COLS], char temp[ROWS][COLS], int rows, int cols,int x, int y);

int Iswin(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

void Isflag(char arr[ROWS][COLS], int row, int col);

void Flag1(char arr[ROWS][COLS], int row, int col);

void Flag2(char arr[ROWS][COLS], int row, int col);

void Flag3(char arr[ROWS][COLS], int row, int col);

3:game.c

cs 复制代码
#include"game.h"

void Myintub()
{
	printf("hi, I am 36\n");
	printf("let us begine \n");

	Sleep(1500);
	system("cls");
}

void Myintuo()
{
	printf("hi, I am 36.\n");
	printf("bye bye \n");

	Sleep(1500);
}

void menu()
{
	printf("**** 扫雷游戏 ****\n");
	printf("******************\n");
	printf("**** 1  play *****\n");
	printf("**** 0  exit *****\n");
	printf("**** 扫雷游戏 ****\n");
	printf("请选择:>");

}

void Iniarr(char arr[ROWS][COLS], int rows, int cols, int set)
{

	int i = 0;
	int j = 0;

	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)

			arr[i][j] = set;
	}

}

void Minebord(char arr[ROWS][COLS], int row, int col)
{
	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 <= col; j++)
			printf("%c ", arr[i][j]);
		printf("\n");
	}
	printf("*** 扫雷游戏 ******\n");
}

void Showbord(char arr[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;

	printf("\n*** 扫雷游戏 ******\n\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 <= col; j++)
			printf("%c ", arr[i][j]);
		printf("\n");
	}

	printf("\n*** 扫雷游戏 ******\n");
}

void mold(char arr[ROWS][COLS], int row, int col)
{


	printf("**** 扫雷游戏 ****\n");
	printf("**** 0  简单 *****\n");
	printf("**** 1  中等 *****\n");
	printf("**** 2  困难 *****\n");
	printf("**** 扫雷游戏 ****\n");
	int n = 0;
	int flag = 0;
	do
	{
		flag = 0;
		printf("请选择难度:>");
		scanf("%d", &n);
		system("cls");
		switch (n)
		{
		case 0:Ini__my__count(arr, ROW, COL, n); break;
		case 1:Ini__my__count(arr, ROW, COL, n); break;
		case 2:Ini__my__count(arr, ROW, COL, n); break;
		default: printf("该值无效 请重新输入\n"); flag = 36; break;
		}
	} while (flag);
}

void Ini__my__count(char arr[ROWS][COLS], int row, int col,int n)
{

	//雷的个数
	int a = 0;
	a = (n + 1) * 10;
	//创建坐标
	int x = 0;
	int y = 0;

	while (a)
	{
		x = rand() % row  + 1;
		y = rand() % col  + 1;
		if (arr[x][y] == '0')
		{
			
			arr[x][y] = '1';
			
			a--;
		}
	}


	//判断
	/*for (x = 0; x < row + 2; x++)
	{
		for (y = 0; y < col + 2; y++)

			printf("%d %d %c\n",x, y, arr[x][y]);
	}*/

}

int Tell__count(char mine[ROWS][COLS], char show[ROWS][COLS], char temp[ROWS][COLS], int rows, int cols)
{
	int x = 0;
	int y = 0;
	int flag = 0;
	do
	{
		printf("请输入排查坐标:>");
		scanf("%d %d", &x, &y);
		if (x == 36 && y == 36)
		{
			flag = 1;
			Minebord(mine, ROW, COL);
		}
		else if (x < 1 || x>9 || y < 1 || y>9)
		{
			printf("请输入合法值\n");
			flag = 1;

		}
		else if (show[x][y] != '*'&& show[x][y] != '?'&& show[x][y] != '$')
		{
			printf("该坐标已被排查,请重新输入\n");
			flag = 1;

		}
		else
			flag = 0;
		
	} while (flag);
	 return print(mine, show,temp, rows, cols, x, y);

}

int  print(char mine[ROWS][COLS], char show[ROWS][COLS], char temp[ROWS][COLS], int rows, int cols, int x, int y)
{

	//若是雷返回0
	if (mine[x][y] == '1')		
		return 0;

	//不是雷返回1
	//打印个数
	else
	{
		int i = 0;
		int j = 0;
		temp[x][y] = '1';

		//创建计数变量
		int count = 0;

		for (i = -1; i <= 1; i++)
			for (j = -1; j <= 1; j++)
				if (mine[x + i][y + j] == '1')
					count++;
		if (count != 0)
		{
			show[x][y] = count + '0';
			return 1;
		}
		else
		{
			show[x][y] = ' ';
			for (i = -1; i <= 1; i++)
			{
				for (j = -1; j <= 1; j++)
				{
					if (x + i <= 9 && x + i >= 1 && y + j <= 9 && y + j >= 1 && temp[x + i][y + j] == '0')
					{
						print(mine, show, temp, rows, cols, x + i, y + j);

					}

				}
			}
			return 1;

		}
	}


}

int Iswin(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{

	int i = 0;
	int j = 0;
	int a = 0;
	int b = 0;


	for (i = 1; i <= row; i++)
	{
		for (j = 1; j <= col; j++)
			if (mine[i][j] == '1')
				a++;

	}

	for (i = 1; i <= row; i++)
	{
		for (j = 1; j <= col; j++)
			if (show[i][j] == '*')
				b++;

	}
	if (a == b)
		return 36;
	else return 0;
}

void Isflag(char arr[ROWS][COLS], int row, int col)
{


	int n = 0;
	do
	{
		printf("\n*****************\n");
		printf("请问是否标记操作?\n");
		printf("***0   exit    **\n");
		printf("** 1   $       **\n");
		printf("** 2   ?       **\n");
		printf("** 3   *       **\n");

		printf("请选择:>");
		scanf("%d", &n);
		switch (n)
		{
		case 0:	system("cls");break;
		case 1:Flag1(arr, row, col); break;
		case 2:Flag2(arr, row, col); break;
		case 3:Flag3(arr, row, col); break;
		default:printf("该值无效\n请重新输入:>"); break;
		}

	} while (n);


}

void Flag1(char arr[ROWS][COLS], int row, int col)
{
	printf("请输入坐标:>");
	int x = 0;
	int y = 0;
	
		scanf("%d %d", &x, &y);
		if (arr[x][y] == '*')
		{
			arr[x][y] = '$';
			Showbord(arr, row, col);
		}
}

void Flag2(char arr[ROWS][COLS], int row, int col)
{
	printf("请输入坐标:>");
	int x = 0;
	int y = 0;

	scanf("%d %d", &x, &y);
	if (arr[x][y] == '*')
	{
		arr[x][y] = '?';
		Showbord(arr, row, col);
	}
}

void Flag3(char arr[ROWS][COLS], int row, int col)
{
	printf("请输入坐标:>");
	int x = 0;
	int y = 0;

	scanf("%d %d", &x, &y);
	if (arr[x][y] == '$' || arr[x][y] == '?')
	{
		arr[x][y] = '*';
		Showbord(arr, row, col);

	}

}
相关推荐
VertexGeek20 分钟前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz21 分钟前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang1 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca1 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱1 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
今天吃饺子1 小时前
2024年SCI一区最新改进优化算法——四参数自适应生长优化器,MATLAB代码免费获取...
开发语言·算法·matlab
是阿建吖!1 小时前
【优选算法】二分查找
c++·算法
王燕龙(大卫)2 小时前
leetcode 数组中第k个最大元素
算法·leetcode
不去幼儿园2 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法