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

ops/2024/11/15 0:45:47/

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;}elseflag = 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)
{//若是雷返回0if (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.ppmy.cn/ops/133724.html

相关文章

Spring学习笔记_35——@RestController

1. 介绍 SpringMVC基于Controller注解和ResponseBody注解扩展了RestController注解&#xff0c;使得RestController注解同时具备于Controller注解和ResponseBody注解的功能。 当一个类被标记为RestController&#xff0c;意味着其处理的所有方法都将自动添加ResponseBody效果…

Ue5 umg学习(二)图像控件,锚点

视频资料4、图像控件_哔哩哔哩_bilibili 选择通用下的图像 将其拉入画布中&#xff0c;会拉出一个小白块的东西 点击小白块&#xff0c;会发现右侧的属性。 左上角像花一样的是锚点。 首先选择图片 这里需要一张ui图片&#xff0c;我截图了一张图片作为例子&#xff0c;其他图…

现代化汽车共享:SpringBoot管理系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理共享汽车管理系统的相关信息成为必然。开发…

100种算法【Python版】第58篇——滤波算法之卡尔曼滤波

本文目录 1 算法步骤2 算法示例2.1 示例描述2.2 python代码3 算法应用:二维运动目标跟踪问题滤波算法是用于从信号中提取有用信息、去除噪声或估计系统状态的技术。在时间序列分析、信号处理和控制系统中,滤波算法起着关键作用。 1 算法步骤 卡尔曼滤波(Kalman Filter)的…

7天用Go从零实现分布式缓存GeeCache(学习)(5)

Go 语言锁机制与 Geecache 项目中的加锁实现详解 一、Go 语言中的锁机制 Go 语言的 sync 包提供了多种用于并发控制的锁机制&#xff0c;以下是常用的几种&#xff1a; 1. sync.Mutex&#xff08;互斥锁&#xff09; 用途&#xff1a;控制对共享资源的独占访问&#xff0c;…

前端监控与埋点 全总结

一、概念 前端埋点是指在网页或者应用程序中插入特定的代码&#xff0c;用于收集用户的行为数据并发送给服务器进行分析。这些数据可以包括用户的点击、浏览、输入等操作&#xff0c;帮助开发者了解用户的在其网站中的行为&#xff0c;从而进行针对性的优化和改进。 前端埋点…

机器学习—为什么我们需要激活函数

如果我们使用神经网络中每个神经元的线性激活函数&#xff0c;回想一下这个需求预测示例&#xff0c;如果对所有节点使用线性激活函数&#xff0c;在这个神经网络中&#xff0c;事实证明&#xff0c;这个大神经网络将变得与线性回归没有什么不同&#xff0c;所以这将挫败使用神…

请求接口时跨域问题详细解决方案

浏览器中的报错&#xff1a; 跨域问题通常需要前端和后端协作解决。以下是一些常用的解决方法&#xff0c;分别从前端和后端的角度进行讲解&#xff1a; 一. 后端解决方案 设置 CORS 头部&#xff1a; 最常用和推荐的方法是后端服务器设置 Access-Control-Allow-Origin 响应头…