C语言 扫雷游戏

扫雷游戏

数组和函数的综合运用 更加深入了解数组如何在函数中的使用

在实现代码时 先思考设计思路 在心中有大致的框架 再通过逐步实现代码 在实现的过程去完善代码的各项功能和缺陷

第一次看这种小型的代码 能看的懂 但是自己在实现的过程 往往写不出来 需要我们反复去分析代码与代码之间的逻辑 慢慢从看懂到写出来的过程

摘要:本文介绍了通过C语言实现控制台版扫雷游戏的过程。采用模块化编程思想,将代码分为头文件、实现文件和测试文件。游戏使用9x9棋盘,随机布置10个雷,通过二维数组存储雷区信息和显示界面。实现功能包括:初始化棋盘、随机布雷、计算周围雷数、排雷判断及游戏胜负判定。重点分析了数组在函数中的运用,以及如何通过逐步实现来完善代码功能。文章强调从看懂代码到自主实现的思维转变过程,展示了小型项目的开发思路和调试方法。

扫雷游戏分析和设计

功能说明

• 使⽤控制台实现经典的扫雷游戏

• 游戏可以通过菜单实现继续玩或者退出游戏

• 扫雷的棋盘是9*9的格⼦?

• 默认随机布置10个雷?

• 可以排查雷

◦ 如果位置不是雷,就显⽰周围有⼏个雷

◦ 如果位置是雷,就炸死游戏结束

◦ 把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束

游戏界面

初始化界面

设计与分析

我们需要一个数组来存放雷的信息 而我们如果在这个数组存放排雷的信息会与排雷的信息相冲突那么我们就需要另一个单独数组来存放排雷的信息

我们在游戏用户所呈现的是隐藏雷的界面

而存放雷的信息 是我们当用户游戏死亡或赢了呈现出来的

雷的位置

代码实现

我们为了方便 未来改变不用一个个去修改引入自定义

我们为了管理代码方便分文件写一个声明 一个测试 一个实现

test.c

源.c

biao.h

我们先对数组进行初始化 再打印数组是否正确 再布雷 排雷

最后对函数实现顺序进行调整

c数组初始化 布雷 排雷 打印数组

biao.h 函数声明

cpp 复制代码
#pragma once
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 9
#define CLO 9
#define ROWS ROW+2
#define CLOS CLO+2
#define CONTT 10
 void INDOWN(char bro[ROWS][CLOS], int rows, int clos,char set);
 void BULEI(char mine[ROWS][CLOS], int row, int clo);
 void DAYIN(char bro[ROWS][CLOS], int row, int clo);
 void PAILEI(char mine[ROWS][CLOS], char show[ROWS][CLOS], int row, int clo);

源.c 函数实现

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include "biao.h"

//初始化11*11的棋盘
void INDOWN(char bro[ROWS][CLOS], int rows, int clos, char set)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < clos; j++)
		{
			bro[i][j] = set;
		}
	}



}
//打印存放雷信息的棋盘
void DAYIN(char bro[ROWS][CLOS], int row, int clo)
{
	for (int i = 0; i <= clo; i++)
	{
		printf("%d", i);
	}
	printf("\n");
	for (int i = 1; i <= row; i++)
	{
		printf("%d", i);
		for (int j = 1; j <=clo; j++)
		{
			printf("%c", bro[i][j]);
		}
		printf("\n");

	}

}
//布雷
void BULEI(char mine[ROWS][CLOS], int row, int clo)
{
	int contt = CONTT;

	while (contt)
	{
		int x = rand() % row + 1;
		int y = rand() % clo + 1;
		if (mine[x][y] == '0')
		{

			mine[x][y] = '1';
			contt--;
		}

	}
	


}
int GESHU(char mine[ROWS][CLOS],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 PAILEI(char mine[ROWS][CLOS], char show[ROWS][CLOS], int row, int clo)
{
	int x = 0;
	int y = 0;
	int win = 0;


	while (row * clo - CONTT)
	{
		printf("请输入坐标>");
		scanf_s("%zd %zd", &x, &y);
		if (x > 1 && x <= row && y > 1 && y <= clo)
		{
			if (mine[x][y] == '1')
			{
				printf("遇到雷,死亡");
				DAYIN(mine, ROW, CLO);
				break;
			}
			else {
				int count = GESHU(mine, x, y);
				show[x][y] = count + '0';
				DAYIN(show, ROW, CLO);
				win++;
			}
			
		}
		else
		{
			printf("坐标⾮法,重新输⼊\n");
		}
	}
	if (win == row * clo - CONTT)
	{
		printf("扫雷成功");
		DAYIN(mine, ROW, CLO);
		
	}
}

		
	

test.c函数测试

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include "biao.h"
void game()
{
	char mine[ROWS][CLOS];
	char show[ROWS][CLOS];
	//初始化棋盘
	INDOWN(mine, ROWS, CLOS, '0');
	INDOWN(show, ROWS, CLOS, '*');
	//布雷
	//BULEI(mine, ROW, CLO);
	//排雷
	//PAILEI(mine, show, ROW, ROW); 
	
//打印棋盘
	DAYIN(mine, ROW, CLO);
	DAYIN(show, ROW, CLO);


	










}
void meun()
{
	printf("---1kaishi-------\n");
	printf("-----0tuichu-------\n");


}
int main()
{

	
	int p = 0;
	
	
	do
	{
		meun();
		srand((unsigned)time(NULL));
		
		printf("请输入>");
		scanf("%d", &p);
		switch (p)
		{
		case 1:
			printf("扫雷游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("选择错误");
			break;
		}






	} while (p);







	return 0;
}
相关推荐
我的offer在哪里26 分钟前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎
串流游戏联盟1 小时前
启程!手机也能邂逅暖暖万相奇观
游戏·远程工作
User_芊芊君子1 小时前
HCCL高性能通信库编程指南:构建多卡并行训练系统
人工智能·游戏·ai·agent·测评
前端不太难4 小时前
HarmonyOS 游戏里,Ability 是如何被重建的
游戏·状态模式·harmonyos
灵狐数据FoxData6 小时前
QQ农场今日回归,我们想“偷”回的到底是什么?
游戏·社交电子·业界资讯·娱乐·玩游戏
微祎_7 小时前
Flutter for OpenHarmony:构建一个 Flutter 平衡球游戏,深入解析动画控制器、实时物理模拟与手势驱动交互
flutter·游戏·交互
renke33649 小时前
Flutter for OpenHarmony:构建一个 Flutter 色彩调和师游戏,RGB 空间探索、感知色差计算与视觉认知训练的工程实现
flutter·游戏
ujainu10 小时前
Flutter + OpenHarmony 实现经典打砖块游戏开发实战—— 物理反弹、碰撞检测与关卡系统
flutter·游戏·openharmony·arkanoid·breakout
呆呆敲代码的小Y13 小时前
【Unity 实用工具篇】 | Book Page Curl 快速实现翻书效果
游戏·unity·游戏引擎·u3d·免费游戏·翻书插件
串流游戏联盟13 小时前
星铁4.0前瞻开启!手机玩家体验或将进一步下降
游戏·远程工作