扫雷-完整源码(C语言实现)

news/2024/11/29 21:37:49/

云边有个稻草人-CSDN博客

在学完C语言函数之后,我们就有能力去实现简易版扫雷游戏了(成就感满满),下面是扫雷游戏的源码,快试一试效果如何吧!

在test.c里面进行扫雷游戏的测试,game.h和game.c里实现扫雷游戏的实现,后续我会出扫雷游戏代码的详细思路和解析

目录

效果图

game.h

game.c

test.c


效果图

(哇趣,一下子就踩到雷了,幸运到爆!)

game.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10//初始化棋盘
void InitBoard(char mine[ROWS][COLS], int rows, int cols,char set);//打印棋盘
void DisplayBoard(char show[ROWS][COLS], int row, int col);//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){board[i][j] = set;}}
}//打印棋盘
void DisplayBoard(char show[ROWS][COLS], int row, int col)
{printf("--------扫雷--------\n");//打印显示列int i = 0;for ( i = 0; i <= row; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){int j = 0;printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", show[i][j]);}printf("\n");}}//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{//产生随机的一个坐标int x = 0;int y = 0;int count = EASY_COUNT;while (count){x = rand() % row + 1;y = rand() % col + 1;if (mine[x][y] != '1'){mine[x][y] = '1';count--;}}
}//方法一
//int GetMineCount(char mine[ROWS][COLS], int x, int y)
//{
//	return mine[x - 1][y] +
//	mine[x + 1][y] + 
//	mine[x - 1][y - 1] +
//	mine[x][y - 1] + 
//	mine[x + 1][y - 1] + 
//	mine[x - 1][y + 1] + 
//	mine[x][y + 1] + 
//	mine[x + 1][y + 1] - 8 * '0';
//}//方法二
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{int i = 0;int count = 0;for (i = -1; i <= 1; i++){int j = 0;for (j = -1; j <= 1; j++){count += mine[x + i][y + j] - '0';}}return count;
}//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win<row*col-EASY_COUNT){printf("请输入要排查的坐标:");scanf("%d %d", &x, &y);//要正确地输入坐标if (x >= 1 && x <= row && y >= 1 && y <= col){//输入的坐标是雷if (mine[x][y] == '1'){printf("踩雷被炸,游戏结束\n");DisplayBoard(mine, ROW, COL);break;}//输入的坐标不是雷else{int count = GetMineCount(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);win++;}}else{printf("输入错误,请重新输入:");}}if (win == EASY_COUNT){printf("恭喜你,排雷成功!\n");}}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"//打印菜单
void menu()
{printf("     欢迎来到扫雷游戏    \n");printf("*************************\n");printf("********* 1.play ********\n");printf("********* 0.exit ********\n");printf("*************************\n");
}void game()
{srand((unsigned int)time(NULL));//定义两个字符串数组char mine[ROWS][COLS] = { 0 };//存放雷的信息char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//打印棋盘DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);//排查雷FindMine(mine, show, ROW, COL);}void test()
{int input = 0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");default :printf("输入错误,请重新输入:");}} while (input);
}int main()
{test();return 0;
}

期待我后续扫雷游戏的详细介绍吧

我是云边有个稻草人

期待与你的下一次相遇!Bye~


http://www.ppmy.cn/news/1550996.html

相关文章

241125学习日志——[CSDIY] [ByteDance] 后端训练营 [15]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

智能驾驶,车联网,传感器,车载电子集中展示|2025北京自动驾驶展

在这个充满创新与变革的时代&#xff0c;自动驾驶技术已经成为全球汽车产业的焦点之一。“2025北京国际自动驾驶技术展览会”正式开启预定&#xff0c;无疑为全球自动驾驶技术领域的专业人士、企业以及爱好者们提供了一个交流与展示的绝佳平台。此次展览会不仅将展示自动驾驶技…

Vue.js 实现用户注册功能

在本篇博客中&#xff0c;我们将通过一个简单的例子来展示如何使用 Vue.js 来实现一个用户注册功能。我们将创建一个包含用户名、邮箱和密码输入的表单&#xff0c;并在用户点击“创建账号”按钮时进行简单的验证。 完整代码 <!DOCTYPE html> <html lang"en&q…

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录&#xff0c;有别于基础语法&#xff0c;很多内容只要求会用就行&#xff0c;无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout&#xff1a; 1.3 string以下是字符串的一些简介&#xff1a;字符串…

电动工具领域可推荐的一些调速控制电路,运算放大器芯片等相关型号

电动工具调速控制电路芯片 GS069&#xff1a;该芯片是专门为电动工具调速控制而设计的芯片&#xff0c;通过调节电机的转速&#xff0c;满足不同工作场景下对电动工具转速的需求&#xff0c;从而实现诸如钻孔、拧紧螺丝等不同操作的速度控制. 运算放大器芯片 D8541/2&#xff…

【第十一课】Rust并发编程(二)

目录 前言 Channel 多生产者 前言 在上一节中&#xff0c;我们介绍了Rust中并发编程的方式之一&#xff1a;Fork和Join&#xff0c;通过新建线程提升代码的效率&#xff0c;这节课我们介绍并发编程的第二种方式&#xff1a;通道。Channel就类似于水管&#xff0c;通过Channe…

Vue小项目(开发一个购物车)

基于Vue知识点1&#xff08;点击跳转&#xff09;、Vue知识点2&#xff08;点击跳转&#xff09; ​想要学习更多前端知识&#xff1a;点击Web前端专栏 接下来我们开发一个如下图所示&#xff0c;有最基本购物车功能的简易小项目 下面这是最基本的HTMLCSS框架&#xff01;&…

【R安装】VSCODE安装及R语言环境配置

目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code&#xff08;简称“VSCode” &#xff09;是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器&…