代码编织梦想

一、test.c (测试游戏)

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

void game()
{
	char mine[ROWS][COLS] = { 0 };
	char show[ROWS][COLS] = { 0 };
	//初始化棋盘
	InitBoard(mine,ROWS,COLS,'0');
	InitBoard(show,ROWS,COLS,'*');
	//打印棋盘
	//DisPlayBoard(mine, ROW, COL);
	DisPlayBoard(show, ROW, COL);
	//布置雷
	SetBoard(mine, ROW, COL);
	//DisPlayBoard(mine, ROW, COL);
	//排查雷
	FindBoard(mine, show, ROW, COL);
}

int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("eixt\n");
			break;
		default:
			printf("Re enter\n");
		}
	} while (input);
	return 0;
}

二、game.h(游戏函数的声明)

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

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

#define COUNT 7

void InitBoard(char board[ROWS][COLS], int rows, int cols, char ret);

void DisPlayBoard(char board[ROWS][COLS], int row, int col);

void SetBoard(char board[ROWS][COLS], int row, int col);

void FindBoard(char mine_board[ROWS][COLS], char show_board[ROWS][COLS], int row, int col);

三、game.c(游戏函数的实现)

1.棋盘的初始化

void InitBoard(char board[ROWS][COLS], int rows, int cols, char ret)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			board[i][j] = ret;
		}
	}
}

2.棋盘的打印

void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{
	printf("****** 扫雷 *******\n");
	for (int i = 0; i <= col; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (int i = 1; i <= row; i++)
	{
		printf("%d ", i);
		for (int j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
}

3.布置雷

void SetBoard(char board[ROWS][COLS], int row, int col)
{
	int count = COUNT;
	while(count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (x > 0 && x <= row && y > 0 && y < col)
		{
			if (board[x][y] == '0')
			{
				board[x][y] = '1';
				count--;
			}
		}
	}
}

4.排查雷

void FindBoard(char mine_board[ROWS][COLS], char show_board[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	while(1)
	{
		printf("请输入要排查的坐标\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (mine_board[x][y] == '1')
			{
				printf("很遗憾你被炸死了\n");
				DisPlayBoard(mine_board, ROW, COL);
				break;
			}
			else
			{
				Expand(mine_board, show_board, x, y);
				if (Judge(show_board, ROW, COL) == 0)
				{
					printf("恭喜你排雷成功\n");
					DisPlayBoard(show_board, ROW, COL);
					break;
				}
				DisPlayBoard(show_board, ROW, COL);
			}
		}
		else
		{
			printf("输入的坐标超出棋盘限制,请重新输入\n");
		}
	}
}

5.判断是否排雷成功

int Judge(char show_board[ROWS][COLS], int row, int col)
{
	int count = 0;
	for (int i = 1; i <= row; i++)
	{
		for (int j = 1; j <= col; j++)
		{
			if (show_board[i][j] == '*')
			{
				count++;
			}
		}
	}
	if (count == COUNT)
	{
		return 0;//胜利
	}
	else
	{
		return 1;//继续
	}
}

6.爆炸展开显示周围雷的数量

int GetCount(char board[ROWS][COLS], int x, int y)
{
	return  board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1]
		+ board[x][y - 1]  + board[x][y + 1]
		+ board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0';
}

void Expand(char mine_board[ROWS][COLS], char show_board[ROWS][COLS], int x, int y)
{
	if(x >= 1 && x <= ROW && y >= 1 && y <= COL)
	{
		int count = GetCount(mine_board, x, y);
		if (count != 0)
		{
			show_board[x][y] = count + '0';
		}
		else
		{
			show_board[x][y] = ' ';

			int i = 0;
			for (i = x - 1; i <= x + 1; i++)
			{
				int j = 0;
				for (j = y - 1; j <= y + 1; j++)
				{
					if (show_board[i][j] == '*')//没被展开的地方才需要去检测
					{
						Expand(mine_board, show_board, i, j);
					}
				}
			}
		}
	}
}

四、完整代码

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

void game()
{
	char mine[ROWS][COLS] = { 0 };
	char show[ROWS][COLS] = { 0 };
	//初始化棋盘
	InitBoard(mine,ROWS,COLS,'0');
	InitBoard(show,ROWS,COLS,'*');
	//打印棋盘
	//DisPlayBoard(mine, ROW, COL);
	DisPlayBoard(show, ROW, COL);
	//布置雷
	SetBoard(mine, ROW, COL);
	//DisPlayBoard(mine, ROW, COL);
	//排查雷
	FindBoard(mine, show, ROW, COL);
}

int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("eixt\n");
			break;
		default:
			printf("Re enter\n");
		}
	} while (input);
	return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

#define COUNT 7

void InitBoard(char board[ROWS][COLS], int rows, int cols, char ret);

void DisPlayBoard(char board[ROWS][COLS], int row, int col);

void SetBoard(char board[ROWS][COLS], int row, int col);

void FindBoard(char mine_board[ROWS][COLS], char show_board[ROWS][COLS], int row, int col);

void InitBoard(char board[ROWS][COLS], int rows, int cols, char ret)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			board[i][j] = ret;
		}
	}
}

void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{
	printf("****** 扫雷 *******\n");
	for (int i = 0; i <= col; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (int i = 1; i <= row; i++)
	{
		printf("%d ", i);
		for (int j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
}

void SetBoard(char board[ROWS][COLS], int row, int col)
{
	int count = COUNT;
	while(count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (x > 0 && x <= row && y > 0 && y < col)
		{
			if (board[x][y] == '0')
			{
				board[x][y] = '1';
				count--;
			}
		}
	}
}

int GetCount(char board[ROWS][COLS], int x, int y)
{
	return  board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1]
		+ board[x][y - 1]  + board[x][y + 1]
		+ board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0';
}

void Expand(char mine_board[ROWS][COLS], char show_board[ROWS][COLS], int x, int y)
{
	if(x >= 1 && x <= ROW && y >= 1 && y <= COL)
	{
		int count = GetCount(mine_board, x, y);
		if (count != 0)
		{
			show_board[x][y] = count + '0';
		}
		else
		{
			show_board[x][y] = ' ';

			int i = 0;
			for (i = x - 1; i <= x + 1; i++)
			{
				int j = 0;
				for (j = y - 1; j <= y + 1; j++)
				{
					if (show_board[i][j] == '*')//没被展开的地方才需要去检测
					{
						Expand(mine_board, show_board, i, j);
					}
				}
			}
		}
	}
}

int Judge(char show_board[ROWS][COLS], int row, int col)
{
	int count = 0;
	for (int i = 1; i <= row; i++)
	{
		for (int j = 1; j <= col; j++)
		{
			if (show_board[i][j] == '*')
			{
				count++;
			}
		}
	}
	if (count == COUNT)
	{
		return 0;//胜利
	}
	else
	{
		return 1;//继续
	}
}

void FindBoard(char mine_board[ROWS][COLS], char show_board[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	while(1)
	{
		printf("请输入要排查的坐标\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (mine_board[x][y] == '1')
			{
				printf("很遗憾你被炸死了\n");
				DisPlayBoard(mine_board, ROW, COL);
				break;
			}
			else
			{
				Expand(mine_board, show_board, x, y);
				if (Judge(show_board, ROW, COL) == 0)
				{
					printf("恭喜你排雷成功\n");
					DisPlayBoard(show_board, ROW, COL);
					break;
				}
				DisPlayBoard(show_board, ROW, COL);
			}
		}
		else
		{
			printf("输入的坐标超出棋盘限制,请重新输入\n");
		}
	}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Adz1119/article/details/128751023

扫雷c语言完整源代码,C语言扫雷源码-爱代码爱编程

C语言扫雷源码 #include #include #include #include /*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define RI

c语言扫雷(自动展开,计时)-爱代码爱编程

目录 整体思路一、关键解析棋盘分析:雷的布置递归展开计时功能二、具体实现1.初始化棋盘2.打印棋盘设置雷开始扫雷计算雷数递归展开完整代码game.hgame.ctest.c总结 整体思路 1.字符数组存放棋盘,初始化并打印 2.存储雷的信息 3.获取坐标进行排雷 4.统计当前坐标周围雷的数量,若8个单元内都没雷递归展开 5.统计未展开的坐标与

C语言扫雷的一些心得-爱代码爱编程

  文章目录 前言一、对于扫雷的认识二、关于扫雷游戏的实现 1.设计出游戏的大体模样2.游戏需用到的头文件3.初始化函数4.埋雷函数5.打印函数6.排雷函数总结 前言 这是关于我自己对扫雷的一些认识,希望大家能提些建议。 一、对于扫雷的认识 在一个系统给出的棋盘里找出不是雷的坐标。 二、关于扫雷游戏的实现

C语言扫雷详解实现-爱代码爱编程

扫雷 前言代码思路1.创建游戏菜单2.创建二个游戏棋盘初始化棋盘函数的实现布置雷代码实现打印棋盘测试排查雷mine_count 函数的思路图解代码实现胜利条件扫雷代码()全)test.cgame.hgame.c 前言 今天就用之前所学的知识来写一个C语言简易版扫雷游戏,主要涉及了C语言中的一些基本知识,循环、分支、函数、数组等等,如果熟练掌

c语言扫雷(递归展开)(详细注释)(完整代码)_aaaaa_9的博客-爱代码爱编程

目录 一、功能实现 1.雷盘初始化与打印 雷盘定义 初始化雷盘 打印雷盘 随机布置雷 2.玩家排查雷 获取坐标周围雷数 递归展开 胜负判断 显示雷位置 二、游戏试玩 三、游戏完整代码 game.h  test.c game.c       扫雷大家应该都知道,翻开一个格子,显示的数字就是周围 8 格所含的雷

c语言 扫雷(含递归展开)_琦悠的博客-爱代码爱编程

目录 前言 一.设计思路 基本的构思方向 准备基本框架 二.函数功能设置 菜单界面 主函数 初始化 显示棋盘 设置雷 计算周围雷数 排雷  总体game函数 后续优化 1.标记雷 2.递归展开 3.防止第一次踩雷 4.惩罚功能 5.最终代码 总结 前言 想必大家在上学时代都或多或少玩过扫雷游戏,通过棋盘上已