简单易懂的c语言扫雷小游戏


前言

扫雷游戏是一款大家都熟悉的游戏,如果你没玩过,不妨尝试一下,这会给你编写扫雷游戏的灵感。在这篇博客中,我们将详细介绍如何一步步实现扫雷游戏

扫雷游戏链接👉 扫雷游戏网页版 - 在线扫雷


一、模块化编程和传统编程的比较

模块化编程和传统方式编程之间有很多区别。以下是它们之间的比较:

1. 结构和组织:

  • 传统方式编程通常是过程式编程,代码以线性方式组织,从上到下逐步执行。
  • 模块化编程采用模块和组件的方式组织代码,代码分成可重复使用的模块,每个模块执行特定任务。

2. 可维护性:

  • 模块化编程更易于维护。因为代码分解成小的独立模块,故障排查和修改更加容易。
  • 传统方式编程中,代码可能会变得冗长,难以维护,因为所有代码都在一个地方。

3. 重用性:

  • 模块化编程鼓励代码重用。您可以编写一次模块,然后在不同项目中重复使用。
  • 传统方式编程需要重复编写相似的代码。

4. 可读性:

  • 模块化编程有助于提高代码的可读性。每个模块都有自己的职责,代码更加清晰。
  • 传统方式编程可能会导致代码混乱,降低可读性。

5. 团队协作:

  • 模块化编程更适合团队协作。不同开发人员可以独立编写和维护模块。
  • 传统方式编程中,多人开发时可能会产生冲突。

6. 扩展性:

  • 模块化编程更容易扩展。您可以添加新的模块而不影响现有代码。
  • 传统方式编程中,扩展代码可能需要修改现有代码,增加风险。

总的来说,模块化编程有助于提高代码的质量、可维护性和可扩展性,特别是在大型项目和团队协作中。因此,许多现代编程语言和开发框架鼓励或支持模块化编程。

二、扫雷游戏功能说明

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

项目结构

在这里插入图片描述

编写思路

1. 先在main函数中写出大致逻辑

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
int main()
{
	int input = 0;
	srand((size_t)time(NULL));
	do
	{
		menu();
		printf("请输入数字:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("开始游戏咯\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

2. 实现菜单功能(具体可以根据个人喜好自行设计)

void menu()
{
	printf("*********************\n");
	printf("*****1.   play  *****\n");
	printf("**** 0.   exit  *****\n");
	printf("*********************\n");
}

3. 实现game()函数大致逻辑

void game()
{
	char bomb[ROWS][COLS];
	char show[ROWS][COLS];
	//初始化棋盘
	InitBoard(bomb, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印棋盘
	DisplayBoard(show, ROW, COL);
	//DisplayBoard(bomb, ROW, COL);
	//设置雷
	SetBomb(bomb, ROW, COL);
	//DisplayBoard(bomb, ROW, COL);
	//排查雷
	FindBomb(bomb,show, ROW, COL);
}

4. 具体实现其中的各个函数串联起来

void InitBoard(char arr[][COLS], int rows, int cols, char set)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			arr[i][j] = set;
		}
	}
}
void DisplayBoard(char arr[][COLS], int row, int col)
{
	int i = 0;
	printf("**************扫雷*****************\n");
	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 ", arr[i][j]);
		}
		printf("\n");
	}
	printf("**************扫雷*****************\n");
	printf("\n");
}
void SetBomb(char arr[][COLS], int row, int col)
{
	int count = BOMBNUMBER;
	while (count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (arr[x][y] == '0')
		{
			arr[x][y] = '1';
			count--;
		}
	}
}
int VicinityBomb(char bomb[][COLS], int x, int y)
{
	return bomb[x - 1][y - 1] + bomb[x - 1][y] + bomb[x - 1][y + 1] +
		bomb[x][y - 1] + bomb[x][y + 1] +
		bomb[x + 1][y - 1] + bomb[x + 1][y] + bomb[x + 1][y + 1]-8*'0';
}
void FindBomb(char bomb[][COLS],char show[][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	while(win<row*col- BOMBNUMBER)
	{
		printf("请输入你的坐标:>");
		scanf("%d %d", &x, &y);
		if (bomb[x][y] == '1')
		{
			printf("游戏失败,你遇到了炸弹!!!\n");
			break;
		}
		else
		{
			show[x][y] = VicinityBomb(bomb, x, y)+'0';
			DisplayBoard(show, row, col);
			win++;
		}
	}
	if (win == row * col - BOMBNUMBER)
	{
		printf("恭喜你,成功通关,避开了所有的炸弹\n");
	}
}

注意

编写时每实现一个小的功能模块就进行相应的测试,这样可以避免大量编写后错误成堆的烦恼,是一个好的编程习惯!!!

总结

这里的内容属于c语言基础语法内容,该游戏意在锻炼初学者的编程能力和逻辑思辨力,希望大家都可以多多尝试哈,多谢支持!!!谢谢大家!!

源码

源码

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值