C语言实战项目:扫雷游戏(简单且易懂)

1.建立相关文件

 

首先建立相关头文件和源文件,如下图:
21815bad46a640838c390b21090b2dba.png

2.相关文件下的代码(代码内附带注释)

🔥 utili.h:

#define _CRT_SECURE_NO_WARNINGS 1

#pragma once

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

🔥 Game.h:

#define _CRT_SECURE_NO_WARNINGS 1

#pragma once

#include "utili.h"

#define Row 11
#define Col 11
#define row Row-2
#define col Col-2
#define Level 20

void startMine();
void initBoard(char board[Row][Col], char set);
void Print(char board[Row][Col], int rows, int cols);
void setMine(char board[Row][Col]);
void FindMine(char show[Row][Col], char mine[Row][Col], int rows);

🔥 Game.cpp:

#define _CRT_SECURE_NO_WARNINGS 1

#include "Game.h"

//定义雷阵和显示矩阵
char Mine[Row][Col];
char show[Row][Col];

//初始化
void initBoard(char board[Row][Col], char set) {
	for (int i = 0;i < Row;++i) {
		for (int j = 0;j < Col;++j) {
			board[i][j] = set;//设置为你输入的set符号
		}
	}
}

//打印
void Print(char board[Row][Col], int rows, int cols) {
	//打印出0~rows 方便玩家输入坐标
	for (int i = 0;i <= rows;++i) {
		printf("%d ", i);
	}
	printf("\n");

	for (int i = 1;i <= rows;++i) {
		printf("%d ", i);
		for (int j = 1;j <= cols;++j) {
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}

//埋雷
void setMine(char mine[Row][Col]) {
	int count = Level;
	srand(time(0));
	//随机设置Level个雷,Level的数量可以根据个人喜好更改
	while (count)
	{
		int x = rand() % row + 1; //1 ~ ROW
		int y = rand() % col + 1; //1 ~ COL
		if (x > 0 && x <= row && y > 0 && y <= col && mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

//雷的数量
int mineNum(char mine[Row][Col], int x,int y) {
	//统计雷的数量
	return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1]
		+ mine[x][y - 1] + mine[x][y] + mine[x][y + 1]
		+ mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1]
		- 9 * '0';
}

//扫雷开始
void FindMine(char show[Row][Col], char mine[Row][Col], int rows,int cols) {

	int win = 0;
	int x, y;
	//胜利条件是win=rows*cols-Level
	while (win < rows * cols - Level) {
		printf("请输入你要排雷的位置:");
		scanf("%d %d", &x, &y);
		//判断位置合法性
		if (x<0 || x>rows || y<0 || y>cols) {
			printf("你输入的位置非法,请重新输入!\n");
		}
		//判断是否触雷
		else if (mine[x][y] == '1') {
			printf("很遗憾,你被雷炸死了!\n");
			Print(mine, row, col);
			break;
		}
		//位置合法且未触雷则进行此操作
		else {
			int count = mineNum(mine, x, y);
			show[x][y] = (char)('0' + count);
			win++;

			//刷新 使输入更形象
			system("cls");
			Print(show, row, col);
		}
	}
	if (win >= rows * cols - Level) {
		printf("恭喜你!扫雷成功!!!\n");
	}
}

//开始扫雷游戏
void startMine() {

	//初始化两个矩阵
	initBoard(show, '*');
	initBoard(Mine, '0');

	//打印
	Print(show, row, col);

	//埋雷
	setMine(Mine);

	//扫雷
	FindMine(show, Mine, row, col);

}

🔥 Mine.cpp:

#define _CRT_SECURE_NO_WARNINGS 1

#include "Game.h"

int main() {

	int select = 1;
	while (select) {
		printf("******************************\n");
		printf("*      简 易 扫 雷 游 戏     *\n");
		printf("******************************\n");
		printf("*         [1]开始游戏        *\n");
		printf("*         [0]退出            *\n");
		printf("******************************\n");
		printf("请输入你的选择(1/0):");
		scanf("%d", &select);

		if (select == 0) {
			break;
		}

		else if (select != 1) {
			printf("你输入的数不合法,请重新输入!\n");
		}
		else {
			startMine();
		}
	}
	return 0;
}

3.运行状态图片:

22362f1b3a764a709d080a18b8f25269.png
ff2209cc57b9441080565e57a2cb4ad8.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木是木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值