王子公主来扫雷0^0

news2024/11/20 20:23:46

🪐🪐🪐欢迎来到程序员餐厅💫💫💫

         今日主菜:扫雷小游戏,

                 主厨:邪王真眼

            所属专栏: C语言知识点   

              主厨的主页:Chef‘s blog


 

引言:

                已经学会数组的朋友注意了,现在的你已经有能力写出两个小游戏了,一个是扫雷,一个是三子棋,上次咱们搞定了三子棋代码,今天这扫雷又送上了门。

         本章你可能会用到的知识:

  • 随机数的生成:C语言实现随机数
  • 数组的使用
  • 函数的创建与调用
  • 递归

1. 扫雷游戏要求

  1.  游戏可以通过菜单实现继续玩或者退出游戏
  2.  默认棋盘为9×9的格子,但可以修改
  3.  默认随机布置雷,默认雷的个数为9,但可以修改
  4. 关于排查雷

 (1) 如果位置不是雷,就显⽰周围有⼏个雷,并且循环展开。
 (2)如果位置是雷,就炸死游戏结束
 (3)把所有⾮雷都找出来,排雷成功,游戏结束

 (4)玩家可以对认为是雷的位置进行可能是雷或肯定是雷的标记。 

2 游戏的分析和设计

2.1 数据结构的分析
扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息。 因为我们需要在9*9的棋盘上布置雷的信息和排查雷,我们⾸先想到的就是创建⼀个9*9的数组来存放信息。

那如果这个位置布置雷,我们就存放1,没有布置雷就存放0.

排查(8,6)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,最下⾯的三 个坐标就会越界,因此我们在设计的时候,给数组扩大⼀圈,雷还是布置在中间的9*9的坐标上,周围⼀圈不去布置雷就行,这样就解决了越界的问题。所以我们将存放数据的数组创建成11*11 是⽐较合适。
  1. 问题:假设我们排查了某 ⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录下来,那这个雷的个数信息存放在哪⾥呢?如果存放在布 置雷的数组中,这样雷的信息和雷的个数信息就可能或产⽣混淆和打印上的困难。
  2. 解决:这⾥我们肯定有办法解决,⽐如:雷和⾮雷的信息不要使⽤数字,使⽤某些字符就行,但是这样做棋盘上有雷和非雷的信息,还有排查出的雷的个数信息,就⽐较混杂,不够⽅便。我们采⽤另外⼀种⽅案,我们专门给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再 给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。这样就互不⼲扰了,
  3. 补充:同时为了保持神秘,show开始时初始化为字符 '*',mine数组最开始也初始化为字符'0',布置雷改成'1'。如下如:

 

3.多文件操作


              为了方便代码的管理和保证游戏实现逻辑的清晰性,函数的声明与定义是分开写的,所以我们将采用多文件管理的模式。

        (1)创建头文件game.h,包含所有头文件(其他源文件只需引用它即可),以及所有游戏功能的函数接口。

        (2)创建源文件game.c,负责所有游戏功能对应函数的具体代码实现。

        (3)创建源文件main.c,负责调用函数实现来游戏。

4.  简易菜单的实现

4.1功能介绍

 1.玩家可以通过选择1进入游戏,0退出游戏。

2.选错的话提醒玩家,重新选择。

3.告诉玩家游戏规则

4.2功能实现

void menu(void)
{
	printf("***************************\n");
	printf("***   1 开始游戏   ********\n");
	printf("***   0 结束游戏   ********\n");
	printf("***************************\n");
}
void rules()
{
	printf("游戏规则如下:\n");
	printf("1.你可以通过排雷和标记逐渐逼近胜利条件\n");
	printf("2.对同一坐标标记1次是!,标记2次是?,第3次恢复*\n");
	printf("3.标记!代表肯定是雷,标记?代表可能是雷\n");
	printf("4.标记!的次数最多为雷的个数\n");
	printf("5.如果选中雷,则游戏失败\n");
	printf("6.当成功标记所有雷,或者排查完所有格子,游戏胜利\n");
}

int main()
{
	srand((unsigned int)time(NULL));
	rules();
	do
	{
		menu();
	again:
		printf("请选择->");
		int input;
		scanf("%d", &input);
		gets(brr);
		switch (input)
		{
		case 1:
			printf("----------------扫雷游戏----------------\n");
			game();
			break;
		case 0:
			printf("结束游戏\n");
			return 0;
		default:
			printf(" 选择错误,重新选择\n");
			goto again;
		}
	} while (1);
	return 0;
}

4.3功能展示

5. 游戏功能实现

  5.1 预定义信息

(1)要求

  • 1.包含需要的头文件
  • 2.包含需要的宏定义
  • 3.包含需要的函数接口

(2)代码实现

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define L 9
#define W 9
#define LS L+2
#define WS L+2
#define NUM 9
void intiboard(char arr[LS][WS], int ls, int ws, char a);
void printboard(char arr[LS][WS], int l, int w);
void setmine(char arr[LS][WS], int l, int w,int a,int b);
void mark(char arr[LS][WS], int l, int w);
int conuts(char arr1[LS][WS], int x, int y);
void judge(char arr1[LS][WS], char arr2[LS][WS], int l, int w, int num,int x,int y);
int iswin(char arr1[LS][WS], char arr2[LS][WS], int l, int w);

 

 5.2 初始化棋盘

   (1)要求

1. mine棋盘初始化为全‘0’。

2. show棋盘初始化为全‘*’。

(2)实现
  1. void intiboard(char arr[LS][WS], int ls, int ws, char a)
    {
    	for (int i = 0; i < ls; i++)
    	{
    		for (int j = 0; j < ws; j++)
    		{
    			arr[i][j] = a;
    		}
    	}
    }
    5.3 打印棋盘
        (1)要求

    1. 打印出棋盘中的元素。

    2. 利用---,|模拟出棋盘框。

    3. 显示出每行,每列的序号。

        (2)实现 
    void printboard(char arr[LS][WS], int l, int w)
    {
    	printf("----------------扫雷ing----------------\n");
    	for (int i = 0; i <= l; i++)
    		printf(" %d  ", i);
    	printf("\n");
    	printf("   |---|---|---|---|---|---|---|---|---|");
    	
    	printf("\n");
    	for (int i = 1; i <= l; i++)
    	{
    		printf(" %d |", i);
    		for (int j = 1; j <= w; j++)
    		{
    			printf(" %c |", arr[j][i]);
    		}printf("\n");
    		printf("   |---|---|---|---|---|---|---|---|---|");
    		printf("\n");
    		
    	}
    }
    (3)效果展示

 5.4 埋雷 
    (1)要求

1.在mine棋盘中随机布置9个雷,雷为‘0’。

2.重复位置不能布置。

3.在第一次输入坐标后在埋雷,防止第一次直接炸死(这个实现不在这个函数里)

    (2)实现 
void setmine(char arr[LS][WS], int l, int w)
{
	int num = NUM;
	while (num)
	{
		int x, y;
	a:    x = rand() % l + 1;
		y = rand() % l + 1;
		if (arr[x][y] == '0')
		{
			arr[x][y] = '1';
			num--;
		}
		else
			goto a;
	}
}

效果展示

 5.5 排雷和标记


  (1)要求·:

  1.  每次玩家都可以先进行排雷和标记。
  2.  玩家输入的值不合法时提醒玩家重新输入
  3.  对于同一个坐标,第一次标记为!代表肯定是雷;第二次标记为?代表可能是雷;第三次   标记恢复‘*’。
  4.  排雷时,玩家输入要排除的坐标,如果是雷,则游戏结束;如果不是雷,则统计周围雷的个数。
  5.  如果周围没有雷,则向周围展开至有雷为止。

 (2)递归排雷的实现 

}
int conuts(char arr1[LS][WS], int x, int y)
{
	int count = 0;
	for (int i = x - 1; i <= x + 1; i++)
	{
		for (int j = y - 1; j <= y + 1; j++)
		{
			if (arr1[i][j] == '1')
				count++;
		}
	}
	return count;
}
void judge(char arr1[LS][WS], char arr2[LS][WS], int l, int w, int num, int x, int y)
{
	if (x > L || y > L || x < 1 || y < 1)
	{
		return;
	}
	if (arr1[x][y] == '1')
		return;
	int count = 0;//这个格子一圈的雷,你找到的非雷
	if (flag == 0)
	{
		arr2[x][y] = ' ';
		flag++;
		setmine(arr1, L, W, x, y);
		count = conuts(arr1, x, y);
		if (!count)
		{
			arr2[x][y] = ' ';
			if (arr2[x - 1][y] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y);
			if (arr2[x - 1][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y - 1);
			if (arr2[x - 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y + 1);
			if (arr2[x][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y - 1);
			if (arr2[x][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y + 1);
			if (arr2[x + 1][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y - 1);
			if (arr2[x + 1][y] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y);
			if (arr2[x + 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y + 1);
		}
		else
			arr2[x][y] = count + '0';
		z++;
	}
	else
	{
		count = conuts(arr1, x, y);
		if (!count)
		{
			arr2[x][y] = ' ';
			if (arr2[x - 1][y] != ' ' &&(arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y);
			if (arr2[x - 1][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y - 1);
			if (arr2[x - 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y + 1);
			if (arr2[x][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y - 1);
			if (arr2[x][y + 1] != ' ' &&( arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y + 1);
			if (arr2[x + 1][y - 1] != ' ' &&( arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y - 1);
			if (arr2[x + 1][y] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y);
			if (arr2[x + 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y + 1);
		}
		else
			arr2[x][y] = count + '0';
		z++;
	}
}

(3)标记的实现 

void mark(char arr[LS][WS], int l, int w)
{
	printf("标记雷输入1,不标记输入0\n");
	int a = 0;
	scanf("%d", &a);
	gets(brr);
	if (a)
	{
		printf("请输入你要标记的坐标->\n");
		int x, y;
	again:	scanf("%d %d", &x, &y);
		gets(brr);
		if (x > l || y > l || x < 1 || y < 1)
		{
			printf("输入错误,请重新输入\n");
			goto again;
		}
		else if (arr[x][y] == '*')
			arr[x][y] = '!';
		else if (arr[x][y] == '!')
			arr[x][y] = '?';
		else if (arr[x][y] == '?')
			arr[x][y] = '*';
	}
}

5.6 胜利条件

(1)要求

成功排查完除雷外所有格子,游戏胜利。

(2)实现

int iswin(char arr1[LS][WS], char arr2[LS][WS], int l, int w)
{
	int num = 0;
	for(int i=1;i<=l;i++)
		for (int j = 1; j <= w; j++)
		{
			if (arr2[i][j] == ' ' && arr1[i][j] == '1')
				return -1;
			if (arr2[i][j]-'0'<=9&&arr2[i][j]-'0'>=0||arr2[i][j]==' ')
				num++;
		}
	return num;
}

6. 游戏实现 

  6.1函数调用分析顺序

1. 初始化棋盘。

2. 先让玩家输入一个排雷坐标再埋雷,防止第一次就被炸死。

3. 玩家选择标记还是埋雷。

4. 判断玩家是否被炸死,判断玩家是否胜利。

5.如果步骤4未成功执行,就重复执行步骤3,4。

 6.2 实现

void game()
{
	char arr1[LS][WS] = { 0 };
	char arr2[LS][WS] = { 0 };
	intiboard(arr2, LS, WS, '*');
	intiboard(arr1, LS, WS, '0');
	printboard(arr2, L, W);
	int flag0 = 1;
	do
	{
		int x, y;
		printf("请输入坐标->");
	again:	scanf("%d %d", &x, &y);
		gets(brr);
		if (x > L || y > L || x < 1 || y < 1)
		{
			printf("输入坐标不再棋盘内,请重新输入\n");
			goto again;
		}
		else 	if (arr2[x][y] == ' ' || arr2[x][y] - '0' <= 9 && arr2[x][y] - '0' >= 1)
		{
			printf("此位置已被排雷,请重新输入\n");
			goto again;
		}
		judge(arr1, arr2, L, W, NUM, x, y);
		int flag0=iswin( arr1, arr2, L,  W);
		if (flag0 == -1)
		{
			printf("你被炸死了,游戏结束");
			break;
		}
		if (L * L - flag0 == NUM)
		{
			printf("恭喜你,顺利通关\n");
			break;
		}
		mark( arr2, L, W);
		printboard(arr2, L, W);
	} while (1);
}

7. 源码 

  (1)game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"源.h"
char brr[100];
void menu(void)
{
	printf("***************************\n");
	printf("***   1 开始游戏   ********\n");
	printf("***   0 结束游戏   ********\n");
	printf("***************************\n");
}
void rules()
{
	printf("游戏规则如下:\n");
	printf("1.你可以通过排雷和标记逐渐逼近胜利条件\n");
	printf("2.对同一坐标标记1次是!,标记2次是?,第3次恢复*\n");
	printf("3.标记!代表肯定是雷,标记?代表可能是雷\n");
	printf("4.标记!的次数最多为雷的个数\n");
	printf("5.如果选中雷,则游戏失败\n");
	printf("6.当成功标记所有雷,或者排查完所有格子,游戏胜利\n");
}

void game()
{
	char arr1[LS][WS] = { 0 };
	char arr2[LS][WS] = { 0 };
	intiboard(arr2, LS, WS, '*');
	intiboard(arr1, LS, WS, '0');
	printboard(arr2, L, W);
	int flag0 = 1;
	do
	{
		int x, y;
		printf("请输入坐标->");
	again:	scanf("%d %d", &x, &y);
		gets(brr);
		if (x > L || y > L || x < 1 || y < 1)
		{
			printf("输入坐标不再棋盘内,请重新输入\n");
			goto again;
		}
		else 	if (arr2[x][y] == ' ' || arr2[x][y] - '0' <= 9 && arr2[x][y] - '0' >= 1)
		{
			printf("此位置已被排雷,请重新输入\n");
			goto again;
		}
		judge(arr1, arr2, L, W, NUM, x, y);
		int flag0=iswin( arr1, arr2, L,  W);
		if (flag0 == -1)
		{
			printf("你被炸死了,游戏结束");
			break;
		}
		if (L * L - flag0 == NUM)
		{
			printf("恭喜你,顺利通关\n");
			break;
		}
		mark( arr2, L, W);
		printboard(arr2, L, W);
	} while (1);
}
int main()
{
	srand((unsigned int)time(NULL));
	rules();
	do
	{
		menu();
	again:
		printf("请选择->");
		int input;
		scanf("%d", &input);
		gets(brr);
		switch (input)
		{
		case 1:
			printf("----------------扫雷游戏----------------\n");
			game();
			break;
		case 0:
			printf("结束游戏\n");
			return 0;
		default:
			printf(" 选择错误,重新选择\n");
			goto again;
		}
	} while (1);
	return 0;
}

(2)源.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"源.h"
int flag = 0, z = 0;
char brr[100];
void intiboard(char arr[LS][WS], int ls, int ws, char a)
{
	for (int i = 0; i < ls; i++)
	{
		for (int j = 0; j < ws; j++)
		{
			arr[i][j] = a;
		}
	}
}
void printboard(char arr[LS][WS], int l, int w)
{
	printf("----------------扫雷ing----------------\n");
	for (int i = 0; i <= l; i++)
		printf(" %d  ", i);
	printf("\n");
	printf("   |---|---|---|---|---|---|---|---|---|");
	
	printf("\n");
	for (int i = 1; i <= l; i++)
	{
		printf(" %d |", i);
		for (int j = 1; j <= w; j++)
		{
			printf(" %c |", arr[j][i]);
		}printf("\n");
		printf("   |---|---|---|---|---|---|---|---|---|");
		printf("\n");
		
	}
}
void setmine(char arr[LS][WS], int l, int w,int a,int b)
{
	int num = NUM;
	while (num)
	{
		int x, y;
	a:    x = rand() % l + 1;
		y = rand() % l + 1;
		if (arr[x][y] == '0'&&(a!=x||b!=y))
		{
			arr[x][y] = '1';
			num--;
		}
		else
			goto a;
	}
}
int conuts(char arr1[LS][WS], int x, int y)
{
	int count = 0;
	for (int i = x - 1; i <= x + 1; i++)
	{
		for (int j = y - 1; j <= y + 1; j++)
		{
			if (arr1[i][j] == '1')
				count++;
		}
	}
	return count;
}
void judge(char arr1[LS][WS], char arr2[LS][WS], int l, int w, int num, int x, int y)
{
	if (x > L || y > L || x < 1 || y < 1)
	{
		return;
	}
	if (arr1[x][y] == '1')
		return;
	int count = 0;//这个格子一圈的雷,你找到的非雷
	if (flag == 0)
	{
		arr2[x][y] = ' ';
		flag++;
		setmine(arr1, L, W, x, y);
		//printboard(arr1, 9, 9);
		count = conuts(arr1, x, y);
		if (!count)
		{
			arr2[x][y] = ' ';
			if (arr2[x - 1][y] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y);
			if (arr2[x - 1][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y - 1);
			if (arr2[x - 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y + 1);
			if (arr2[x][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y - 1);
			if (arr2[x][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y + 1);
			if (arr2[x + 1][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y - 1);
			if (arr2[x + 1][y] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y);
			if (arr2[x + 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y + 1);
		}
		else
			arr2[x][y] = count + '0';
		z++;
	}
	else
	{
		count = conuts(arr1, x, y);
		if (!count)
		{
			arr2[x][y] = ' ';
			if (arr2[x - 1][y] != ' ' &&(arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y);
			if (arr2[x - 1][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y - 1);
			if (arr2[x - 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x - 1, y + 1);
			if (arr2[x][y - 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y - 1);
			if (arr2[x][y + 1] != ' ' &&( arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x, y + 1);
			if (arr2[x + 1][y - 1] != ' ' &&( arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y - 1);
			if (arr2[x + 1][y] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y);
			if (arr2[x + 1][y + 1] != ' ' && (arr2[x][y] - '0' > 9 || arr2[x][y] - '0' < 1))
				judge(arr1, arr2, l, w, num, x + 1, y + 1);
		}
		else
			arr2[x][y] = count + '0';
		z++;
	}
}
void mark(char arr[LS][WS], int l, int w)
{
	printf("标记雷输入1,不标记输入0\n");
	int a = 0;
	scanf("%d", &a);
	gets(brr);
	if (a)
	{
		printf("请输入你要标记的坐标->\n");
		int x, y;
	again:	scanf("%d %d", &x, &y);
		gets(brr);
		if (x > l || y > l || x < 1 || y < 1)
		{
			printf("输入错误,请重新输入\n");
			goto again;
		}
		else if (arr[x][y] == '*')
			arr[x][y] = '!';
		else if (arr[x][y] == '!')
			arr[x][y] = '?';
		else if (arr[x][y] == '?')
			arr[x][y] = '*';
	}
}
int iswin(char arr1[LS][WS], char arr2[LS][WS], int l, int w)
{
	int num = 0;
	for(int i=1;i<=l;i++)
		for (int j = 1; j <= w; j++)
		{
			if (arr2[i][j] == ' ' && arr1[i][j] == '1')
				return -1;
			if (arr2[i][j]-'0'<=9&&arr2[i][j]-'0'>=0||arr2[i][j]==' ')
				num++;
		}
	return num;
}

(3)源.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define L 9
#define W 9
#define LS L+2
#define WS L+2
#define NUM 9
void intiboard(char arr[LS][WS], int ls, int ws, char a);
void printboard(char arr[LS][WS], int l, int w);
void setmine(char arr[LS][WS], int l, int w,int a,int b);
void mark(char arr[LS][WS], int l, int w);
int conuts(char arr1[LS][WS], int x, int y);
void judge(char arr1[LS][WS], char arr2[LS][WS], int l, int w, int num,int x,int y);
int iswin(char arr1[LS][WS], char arr2[LS][WS], int l, int w);

结语:

恭喜你,看完了这~么长的文章,熟能生巧,看完记得练习哦,

ps:本章部分图片来源《比特就业课课件》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1427791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringFramework实战指南(五)

SpringFramework实战指南(五) 4.3 基于 注解 方式管理 Bean4.3.1 实验一: Bean注解标记和扫描 (IoC)4.3.2 实验二: 组件(Bean)作用域和周期方法注解4.3.3 实验三: Bean属性赋值:引用类型自动装配 (DI)4.3.4 实验四: Bean属性赋值:基本类型属性赋值 (DI)4.3.5 实验五:…

C语言第十六弹---操作符(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 操作符 1、下标访问[]、函数调用() 1.1、[ ] 下标引用操作符 1.2、函数调用操作符 2、结构成员访问操作符 2.1、结构体 2.1.1、结构的声明 2.1.2、结构体变…

Rust学习之Features

Rust学习之Features 一 什么是 Features二 默认 feature三 简单的features应用示例四 可选(optional)的依赖五 依赖的特性5.1 在依赖表中指定5.2 在features表中指定 六 命令行中特性控制七 特性统一路径八 其它8.1 相互排斥特性8.2 观察启用特性8.3 [Feature resolver version…

【Java程序设计】【C00234】基于Springboot的美食生活分享平台(有论文)

基于Springboot的美食生活分享平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的美食生活分享平台 主要功能如下&#xff1a;用户模块管理、美食分享笔记管理、美食笔记详情管理、公告信息管理、用户评论模块管…

node 第二十四天 mongoDB shell 命令 高级方法 $where aggregate聚合

$where 数据库数据如下 使用where语法如下 等价于 2.aggregate 聚合 使用聚合管道执行聚合操作。该管道允许用户通过一系列基于阶段的操作来处理来自集合或其他源的数据。 过滤数据, 分组数据 (排除name为 AAA 的数据 按price进行分组 每匹配一组计数1) 下面我们用aggregate…

three.js CSS3DRenderer、CSS3DSprite渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果: <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"></div><…

C++学习Day01之初识C++ Helloworld

目录 一、程序二、输出三、分析与总结 一、程序 #include <iostream> //标准输入输出流 i - input 输入 o - output 输出 stream 流 相当于 stdio.h using namespace std; //使用 标准 命名空间 //程序入口函数 int main() {// cout 标准输出流对象// <&l…

英语文件怎么翻译成中文?五个软件轻松应对英文文件翻译

英语文件怎么翻译成中文&#xff1f;随着全球化的发展&#xff0c;我们时常需要处理英文文件。对于非英语母语者来说&#xff0c;准确、快速地将英文文件翻译成中文变得至关重要。本文将介绍5款翻译软件&#xff0c;帮助你轻松应对英文文件的翻译工作。 1.智能翻译官 智能翻译…

【代码随想录-链表】环形链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

BetrFS: A Compleat File System for Commodity SSDs——论文阅读

EuroSys 2022 Paper 分布式元数据论文汇总 问题 在不同的工作负载下&#xff0c;没有单一的Linux文件系统在普通SSD上始终表现良好。我们将一个完备的文件系统定义为在各种微基准测试和应用程序中&#xff0c;没有一个工作负载的性能低于最佳文件系统性能的30%&#xff0c;并…

代码随想录算法训练营29期|day36任务以及具体安排

第八章 贪心算法 part05 435. 无重叠区间 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a,b)-> {return Integer.compare(a[0],b[0]);});if(intervals.length 1) return 0;int result 0;for(int i 1 ; i < interva…

Unity | YooAssetV2.1.0 + HybridCLR热更新

目录 一、项目更改 二、使用YooAsset热更 1.资源配置 2.资源构建 3.将两个文件夹下的资源上传CDN服务器 4.修改代码 5.运行效果 本文记录利用YooAssetHybridCLR来进行资源和dll的更新。YooAsset使用的是新版V2.1.0。相比于旧版&#xff0c;dll(原生文件)和资源要建两个p…

AI-数学-高中-17-三角函数的定义

原作者视频&#xff1a;三角函数】4三角函数的定义&#xff08;易&#xff09;_哔哩哔哩_bilibili 初中&#xff1a; 高中&#xff1a;三角函数就是单位圆上的点的横纵坐标(x0,y0)。 示例1&#xff1a; 规则&#xff1a; 示例2&#xff1a; 示例3.1&#xff1a; 示例3.2 示例4…

VBA数据库解决方案第八讲:SQL语句及打开记录集

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

C语言递归与迭代并举:双重视角下的C语言阶乘计算实现

引言 计算一个正整数的阶乘是常见的数学问题。阶乘的定义为&#xff1a;n的阶乘&#xff08;记作n!&#xff09;是所有小于及等于n的正整数的乘积。例如&#xff0c;5的阶乘&#xff08;5!&#xff09;就是54321120。下面我们将通过一个使用递归方法实现阶乘的C语言代码示例&am…

POI操作word表格,添加单元格,单元格对齐方法(不必合并单元格)

添加单元格&#xff0c;直接对row进行create新的cell&#xff0c;则会导致新创建的单元格与前面的单元格不对齐的现象。 //表格信息XWPFTable table doc.createTable();table.setWidth("100%");//第一行XWPFTableRow row0table.getRow(0);XWPFTableCell cell00row0.…

STM32GPIO(流水灯、蜂鸣器案例)

文章目录 一、介绍GPIO简介GPIOGPIO基本结构GPIO位结构GPIO模式 二、外设介绍LED、蜂鸣器简介硬件电路 面包板介绍 三、实现LED闪烁连接LED线路具体程序引入Delay具体代码如下&#xff1a; 四、实现流水灯组装线路根据GPIO_Init中结构体成员GPIO_Pin的定义&#xff0c;可以使用…

Redis学习——高级篇⑦

Redis学习——高级篇⑦ Redis7之缓存预热 缓存雪崩 缓存击穿 缓存穿透&#xff08;八&#xff09; 8.1 缓存预热8.1.1 是什么8.1.2 解决 8.2 缓存雪崩8.2.1 是什么8.2.2 发生8.2.3 预防 解决 8.3 缓存穿透8.3.1 是什么8.3.2 解决1 空对象缓存或者缺省值2 Goo…

【Linux网络编程三】Udp套接字编程(简易版服务器)

【Linux网络编程三】Udp套接字编程(简易版服务器&#xff09; 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…

前端小案例——滚动文本区域(HTML+CSS, 附源码)

一、前言 实现功能: 这个案例实现了一个具有滚动功能的文本区域&#xff0c;用于显示长文本内容&#xff0c;并且可以通过滚动条来查看完整的文本内容。 实现逻辑&#xff1a; 内容布局&#xff1a;在<body>中&#xff0c;使用<div>容器创建了一个类名为listen_t…