【C语言】扫雷【附源码】

这篇具有很好参考价值的文章主要介绍了【C语言】扫雷【附源码】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998

一、扫雷游戏规则

【C语言】扫雷【附源码】,C语言项目,c语言,开发语言,游戏

       尽快找到雷区中的所有不是地雷的格子,而不许踩到地雷。点开的数字是几,则说明该数字旁边的8个位置中有几个雷,如果挖开的是地雷,则会输掉游戏。

二、代码思路:

  • 宏定义

    • RowCol 定义了棋盘的行数和列数。
    • RowsCols 分别定义了棋盘数组的行数和列数,多出来的两行两列是为了在棋盘的四周留出空白区域。
    • EASY 定义了简单难度下的地雷数量。
  • 函数原型

    • InitBoard():初始化棋盘函数原型,用于在程序的其他地方实现初始化棋盘的功能。
    • DisplayBoard():打印棋盘函数原型,用于在程序的其他地方实现打印棋盘的功能。
    • SetMine():布置地雷函数原型,用于在程序的其他地方实现布置地雷的功能。
    • FindMine():找地雷函数原型,用于在程序的其他地方实现找地雷的功能。
  • 菜单函数 menu()

    •  这个函数用于显示游戏的菜单界面,提供了两个选项:开始游戏和退出游戏。 
    void menu() {
    	printf("*****************************\n");
    	printf("*****************************\n");
    	printf("***********1.play************\n");
    	printf("***********0.exit************\n");
    	printf("*****************************\n");
    	printf("*****************************\n");
    	printf("*****************************\n");
    
    
    }

    【C语言】扫雷【附源码】,C语言项目,c语言,开发语言,游戏

  • 主函数 main()

    • main() 函数中,首先声明了一个整型变量 input,用于接收用户的输入选项。
    • 进入一个 do-while 循环,这个循环会一直执行,直到用户选择退出游戏(输入 0)。
    • 在循环内部,首先调用 menu() 函数显示菜单界面,然后通过 scanf() 函数获取用户的选择,并存储在 input 变量中。
    • 使用 switch 语句根据用户的选择执行相应的操作:
      • 如果用户选择 1,则调用 game() 函数开始游戏。
      • 如果用户选择 0,则打印消息表示退出游戏。
      • 如果用户输入其他数字,则提示用户重新选择。
    • 循环条件是 input != 0,即只要用户不选择退出游戏,就会一直循环显示菜单。
    int main()
    {
    	srand((unsigned int)time(NULL));
    	int input = 0;
    	do {
    		menu();
    		printf("请选择:");
    		scanf("%d", &input);
    		switch (input) {
    		case 1:
    			game();
    			break;
    		case 0:
    			printf("退出游戏");
    			break;
    		default:
    			printf("输入错误请重新输入");
    			break;
    
    		}
    	} while (input);
    	return 0;
    }

    【C语言】扫雷【附源码】,C语言项目,c语言,开发语言,游戏

  • 游戏函数 game()

    • 这个函数负责实现扫雷游戏的核心逻辑。
    • 首先声明了两个二维字符数组 mineshow,用于存储扫雷棋盘的地雷分布情况和显示给玩家的棋盘情况。
    • 调用 InitBoard() 函数初始化两个棋盘。
    • 调用 SetMine() 函数设置地雷的位置。
    • 调用 DisplayBoard() 函数显示初始的棋盘给玩家。
    • 最后调用 FindMine() 函数开始游戏,排查地雷并更新显示给玩家的棋盘。
    void game() {
    	char mine[Rows][Cols];
    	char show[Rows][Cols];
    	InitBoard(mine, Rows, Cols, '0');
    	InitBoard(show, Rows, Cols, '*');
    	DisplayBoard(mine, Row, Col);
    	DisplayBoard(show, Row, Col);
    	SetMine(mine, Row, Col);
    	//DisplayBoard(mine, Row, Col);
    	FindMine(mine, show, Row, Col);
    }
  • InitBoard() 函数
  • 用于初始化棋盘,将棋盘的每个格子都设置为指定的字符 set
  • 参数 rowscols 分别表示棋盘的行数和列数。
void InitBoard(char board[Rows][Cols], int rows, int cols, char set) {
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++) {
		for (j = 0; j < cols; j++) {
			board[i][j] = set;
		}
	}
}
  • DisplayBoard() 函数

    1. 用于显示棋盘的当前状态,包括地雷和已经排查的区域。
    2. 打印出棋盘的行号和列号,以及对应位置的字符。
    3. 参数 rowcol 表示棋盘的行数和列数。
void DisplayBoard(char board[Rows][Cols], int row, int col) {
	int i = 0;
	int j = 0;
	printf("----------  扫雷 -----------\n");
	for (i = 0; i <= col; i++) {
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++) {
		printf("%d ", i);
		for (j = 1; j <= col; j++) {
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("----------  扫雷 -----------\n");
}

【C语言】扫雷【附源码】,C语言项目,c语言,开发语言,游戏

  • SetMine() 函数

    1. 用于设置地雷在棋盘上的位置。
    2. 参数 rowcol 分别表示棋盘的行数和列数。
    3. 使用 rand() 函数生成随机数,随机设置地雷的位置。
    4. count 变量表示地雷的数量,根据不同的难度(这里是简单难度)来设置地雷的数量。
void SetMine(char board[Rows][Cols], int row, int col) {
	int count = EASY;
	while (count) {
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (board[x][y] == '0') {
			board[x][y] = '1';
			count--;
		}


	}
}
  • GetMineCount() 函数

    1. 用于统计某个位置周围地雷的数量。
    2. 参数 xy 表示要统计的位置坐标。
    3. 遍历该位置周围的八个方向,统计周围地雷的数量。
int GetMineCount(char mine[Rows][Cols], int x, int y) {
	return mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0';
}
  • FindMine() 函数

    1. 实现了玩家排雷的过程。
    2. 使用 while 循环,直到排查完所有非地雷的位置或者踩到地雷为止。
    3. 每次循环提示玩家输入坐标,然后判断该位置是否有地雷。
    4. 如果踩到地雷,则游戏失败,显示所有地雷的位置。
    5. 如果没有踩到地雷,则统计周围地雷的数量,并更新显示给玩家的棋盘。
    6. 循环结束后,根据游戏是否成功来显示相应的消息
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) {
		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 sum = GetMineCount(mine, x, y);
				show[x][y] = sum + '0';//1+'0'='1'
				DisplayBoard(show, Row, Col);
				win++;
			}

		}
		else {
			printf("坐标错误重新输入");
		}
	}
	if (win == Row * Col - EASY) {
		printf("恭喜你排雷成功");
		DisplayBoard(mine, Row, Col);

	}
}

三、完整代码

        test.c

        文章来源地址https://www.toymoban.com/news/detail-848433.html

#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");
	printf("*****************************\n");
	printf("*****************************\n");


}
void game() {
	char mine[Rows][Cols];
	char show[Rows][Cols];
	InitBoard(mine, Rows, Cols, '0');
	InitBoard(show, Rows, Cols, '*');
	DisplayBoard(mine, Row, Col);
	DisplayBoard(show, Row, Col);
	SetMine(mine, Row, Col);
	//DisplayBoard(mine, Row, Col);
	FindMine(mine, show, Row, Col);
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do {
		menu();
		printf("请选择:");
		scanf("%d", &input);
		switch (input) {
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("输入错误请重新输入");
			break;

		}
	} while (input);
	return 0;
}

        game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void InitBoard(char board[Rows][Cols], int rows, int cols, char set) {
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++) {
		for (j = 0; j < cols; j++) {
			board[i][j] = set;
		}
	}
}
void DisplayBoard(char board[Rows][Cols], int row, int col) {
	int i = 0;
	int j = 0;
	printf("----------  扫雷 -----------\n");
	for (i = 0; i <= col; i++) {
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++) {
		printf("%d ", i);
		for (j = 1; j <= col; j++) {
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("----------  扫雷 -----------\n");
}
void SetMine(char board[Rows][Cols], int row, int col) {
	int count = EASY;
	while (count) {
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (board[x][y] == '0') {
			board[x][y] = '1';
			count--;
		}


	}
}
int GetMineCount(char mine[Rows][Cols], int x, int y) {
	return mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0';
}
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) {
		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 sum = GetMineCount(mine, x, y);
				show[x][y] = sum + '0';//1+'0'='1'
				DisplayBoard(show, Row, Col);
				win++;
			}

		}
		else {
			printf("坐标错误重新输入");
		}
	}
	if (win == Row * Col - EASY) {
		printf("恭喜你排雷成功");
		DisplayBoard(mine, Row, Col);

	}
}

        game.h

#pragma once
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

#define Row 9
#define Col 9

#define Rows Row+2
#define Cols Col+2

#define EASY 10
void InitBoard(char board[Rows][Cols], int rows, int cols, char set);//初始化棋盘
void DisplayBoard(char board[Rows][Cols], int row, int col);//打印棋盘
void SetMine(char board[Rows][Cols], int row, int col);//布置地雷
void FindMine(char mine[Rows][Cols], char show[Rows][Cols], int row, int col);//找地雷

到了这里,关于【C语言】扫雷【附源码】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python游戏:扫雷 (附源码)

    这次我们基于 pygame 来做一个扫雷,我所有的代码都是基于 python 3.6 的。 下面将一下我的实现逻辑 首先,如何表示雷和非雷,一开始有好多状态,后来一想,干脆就做个类吧。 布雷就很简单了,随机取99个数,从上往下顺序排   点击一个格子的时候,只要根据点击的坐标,

    2024年02月11日
    浏览(31)
  • C语言实战——扫雷游戏

    1.1扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏 游戏可以通过菜单实现继续玩或者退出游戏 扫雷的棋盘是9*9的格子 默认随机布置10个雷 可以排查雷 如果位置不是雷,就显示周围有几个雷 如果位置是雷,就炸死游戏结束 把除10个雷之外的所有⾮雷都找出来,排雷成功

    2024年03月15日
    浏览(47)
  • 【C语言】实现扫雷游戏

    详细介绍扫雷游戏的思路和实现过程,并用随机数实现埋雷。 • 使用控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷 ◦ 如果位置不是雷,就显示周围有几个雷 ◦ 如果位置是雷,就炸

    2024年02月04日
    浏览(45)
  • C语言(扫雷游戏)

                          Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注+收藏,欢迎欢迎~~                              💥 个人主页 :小羊在奋斗                         💥 所属专栏 :C语言             本

    2024年04月23日
    浏览(34)
  • [C语言][游戏][扫雷]

    为了巩固C语言,我运用所学的知识,写了一篇关于扫雷游戏的博客。如果有大佬看到这篇文章,如有不足之处,请你一定要指出来。 游戏的规则: 我们在棋盘格中任意点开一个格子(输入行和列确认这个格子),若这个格子不是雷就排除了这个位置,排除后这个格子会显示

    2024年02月13日
    浏览(39)
  • 前端技术搭建扫雷小游戏(内含源码)

    上周我们实通过前端基础实现了贪吃蛇游戏,今天还是继续按照我们原定的节奏来带领大家完成一个游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的作用, 在前面的文章当中我们也提及到我们在本系列的专栏是循序

    2024年02月07日
    浏览(51)
  • C语言扫雷小游戏

    扫雷的玩法:在一个9×9(初级)、16×16(中级)、16×30(高级)或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个),再由玩家逐个翻开方块,翻开的地方将显示周围八个雷的个数。以找出所有地雷为最终游戏目标。如果玩家翻开的方块

    2024年02月05日
    浏览(61)
  • 扫雷小游戏【C语言】

    目录 前言 一、基本实现逻辑 二、实现步骤 1. 我们希望在进入游戏时有一个菜单让我们选择 2. 我们希望可以重复的玩(一把玩完了还可以接着玩) 3. 采用多文件形式编程  4.要扫雷先得有棋盘(创建棋盘R*N) 5.初始化棋盘  6.打印棋盘 7.设置雷 8.排查雷 三、全部源码: 上期

    2024年02月11日
    浏览(62)
  • C语言:扫雷小游戏

    文接上一篇博文C语言:三子棋小游戏。本篇博文是使用C语言来实现扫雷小游戏的。这里不对扫雷的规则进行赘述。玩家通过键盘输入坐标来探雷。博主在实现扫雷之前从未看过扫雷实现的相关视频,所以这里实现的扫雷完全是博主的原生思路,具有逻辑性。下面详细介绍一

    2024年02月09日
    浏览(62)
  • C语言小游戏——扫雷

            结合前边我们所学的C语言知识,本期我们将使用C语言实现一个简单的小游戏——扫雷 目录 前言 总体框架设计 多文件分装程序 各功能模块化实现 初始化棋盘  棋盘打印 埋雷  判赢与排雷 游戏逻辑安排 总结         和三子棋相同,游戏开始时不需要任何判

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包