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

news2024/11/24 2:43:08

hi , I am 36.

代码来之不易👍👍👍

创建两个.c    一个.h

1:test.c

#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

#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

#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);

	}

}

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

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

相关文章

leetcode 148. 排序链表 中等

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#xff1a; …

Elasticsearch中什么是倒排索引?

倒排索引&#xff08;Inverted Index&#xff09;是一种索引数据结构&#xff0c;它在信息检索系统中被广泛使用&#xff0c;特别是在全文搜索引擎中。倒排索引允许系统快速检索包含给定单词的文档列表。它是文档内容&#xff08;如文本&#xff09;与其存储位置之间的映射&…

excel-VLOOKUP函数使用/XVLOOKUP使用

多个窗口同时编辑表格&#xff0c;方便对照操作 使用开始-视图-新建窗口 将战区信息表的三列数据匹配到成交数据表上 可以使用VLOOKUP函数 有4个参数&#xff08;必须要查找的值&#xff0c; 要查找的区域&#xff0c;要返回区域的第几列数据&#xff0c;一个可选参数查找匹…

netcore 静态文件目录浏览

环境&#xff1a;Net6 string dirPath "C:\\Users\\15298\\Pictures"; var fileProvider new PhysicalFileProvider(dirPath); app.UseStaticFiles(new StaticFileOptions {FileProvider fileProvider,RequestPath new PathString(("/files")) }); // …

1Panel修改PostgreSQL时区

需求 1Panel安装的PostgreSQL默认是UTC时区&#xff0c;需要将它修改为上海时间 步骤 进入PostgreSQL的安装目录 /opt/1panel/apps/postgresql/postgresql/data打开postgresql.conf文件 修改&#xff1a; log_timezone Asia/Shanghai timezone Asia/Shanghai保存后重启…

函数式接口和stream

函数式接口&#xff08;Functional Interface&#xff09;是Java 8引入的一个新特性&#xff0c;它只有一个抽象方法的接口。这意味着你可以将一个函数式接口作为参数传递给方法&#xff0c;或者将其实现为一个lambda表达式。函数式接口的主要目的是允许你以声明性方式处理操作…

Oracle 高水位线和低-高水位线(High Water Mark Low High Water Mark)

在Oracle的逻辑存储结构中&#xff08;表空间-段-区-块&#xff09;&#xff0c;数据是存在数据段中的&#xff0c;通常一个表就是一个数据段&#xff0c;而段最终又由许多数据块组成。当数据存入数据块时&#xff0c;需要对块进行格式化&#xff0c;高水位线&#xff08;High …

科技资讯|Matter 1.4 标准正式发布,低功耗蓝牙助力其发展

连接标准联盟&#xff08;CSA&#xff09;宣布推出最新的 Matter 1.4 版本&#xff0c;引入了一系列新的设备类型和功能增强&#xff0c;有望提高包括 HomeKit 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

python练习-Django web入门

python -m pip install --user requests使用API调用请求数据 处理API响应 import requestsclass Requests:def request(self):url "https://www.toutiao.com/stream/widget/local_weather/data/?city北京"headers {"Accept": "application/json;…

元器件封装

元器件封装类型 为什么越来越多用贴片元件&#xff0c;而不是插件元件 为什么越来越多用贴片元件&#xff0c;而不是插件元件 1.体积小、质量小、容易保存和运输&#xff1b; 2.容易焊接和拆卸。抗震效果好。 贴片元件不用过孔&#xff0c;用锡少。直插元件最麻烦的就是拆卸&a…

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935

自顶向下逐步求精解决LeetCode第3307题找出第K个字符II题

3307.找出第K个字符II 难度&#xff1a;困难 问题描述&#xff1a; Alice和Bob正在玩一个游戏。最初&#xff0c;Alice有一个字符串word"a"。 给定一个正整数k和一个整数数组operations&#xff0c;其中operations[i]表示第i次操作的类型。 现在Bob将要求Alice按…

v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条

效果 导入组件 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; components:{ ElImageViewer },模板使用组件 <el-image-viewerv-if"isShowPics":on-close"closeViewer":url-list"srcList"/>定义两…

Redis - 哨兵(Sentinel)

Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要⼈⼯进⾏主从切换&#xff0c;同时⼤量 的客⼾端需要被通知切换到新的主节点上&#xff0c;对于上了⼀定规模的应⽤来说&#xff0c;这种⽅案是⽆法接受的&#xff0c; 于是Redis从2.8开始提…

使用wordpress搭建简易的信息查询系统

背景 当前有这样的一个需求&#xff0c;要实现让客户能够自助登录系统查询一些个人的信息&#xff0c;市面上没有特别符合我的需求的产品&#xff0c;经过一段时间的研究&#xff0c;想出了一个用wordpress实现简易信息查询系统&#xff0c;有两种方式。 方式一&#xff1a;使…

探索 Python HTTP 的瑞士军刀:Requests 库

文章目录 探索 Python HTTP 的瑞士军刀&#xff1a;Requests 库第一部分&#xff1a;背景介绍第二部分&#xff1a;Requests 库是什么&#xff1f;第三部分&#xff1a;如何安装 Requests 库&#xff1f;第四部分&#xff1a;Requests 库的基本函数使用方法第五部分&#xff1a…

【青牛科技】 GC6153——TMI8152 的不二之选,可应用于摇头机等产品中

在电子工程领域&#xff0c;不断寻求性能更优、成本更低的解决方案是工程师们的永恒追求。今天&#xff0c;我们要为广大电子工程师带来一款极具竞争力的产品 —— GC6153&#xff0c;它将成为 TMI8152 的完美替代之选。 一、产品背景 随着科技的飞速发展&#xff0c;电子设备…

基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;番茄成熟度检测在农业生产及质量控制中起着至关重要的作用&#xff0c;不仅能帮助农民及时采摘成熟的番茄&#xff0c;还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型&#xff0c;该模型使用了…

艾体宝干货丨微突发流量检测与分析:IOTA让网络监控更精准

网络流量中的微突发问题常常难以察觉&#xff0c;但它们可能对网络性能产生显著影响。这篇文章深入探讨了如何利用IOTA来捕捉和分析微突发&#xff0c;帮助您快速有效地解决网络中的突发流量问题。 什么是微突发&#xff08;Microburst&#xff09;流量&#xff1f; 微突发是…

论文略读: ALPAGASUS: TRAINING A BETTER ALPACA WITH FEWER DATA

ICLR 2024 1 背景 大模型通常需要在有监督指令数据集上进行指令微调来加强指令遵循能力 但是广泛使用的数据集包含许多具有不正确或不相关响应的低质量样本&#xff0c;这对大模型微调具有误导性——>论文提出了一种简单有效的数据选择策略&#xff0c;使用ChatGPT自动识别…