[C语言]扫雷小游戏实现 注释 代码

Posted 只yao为你发光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言]扫雷小游戏实现 注释 代码相关的知识,希望对你有一定的参考价值。

思路

一、初始化用户棋盘和雷区棋盘
二、雷区棋盘随机布雷
三、打印初始化棋盘
四、用户输入坐标
五、判断输赢
六、打印雷区棋盘
在这里插入图片描述

game.h的创建和代码

这部分做的是头文件的声明以及后面所要用到的大部分函数的定义

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9   //用户棋盘大小
#define COL 9
#define ROWS ROW+2//雷区棋盘大小
#define COLS COL+2
#define Mine_Count 10//雷数
void InitBoard(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col);//初始化雷区棋盘和用户棋盘
void SetMine(char mine_board[ROWS][COLS], int row, int col);//放置雷
void ShowBoard(char user_board[ROWS][COLS], int row, int col);//打印用户棋盘
char Get_Mine(char mine_board[ROWS][COLS], int x, int y);//获取用户选择坐标周围的雷数
void SweepMine(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col);//扫雷

game.c的创建和代码

这部分做的是game.c文件中定义的函数实现

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void InitBoard(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col)//初始化雷区棋盘和用户棋盘
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			mine_board[i][j] = '0';//初始化雷区棋盘
		}
	}
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			user_board[i][j] = '?';//初始化用户棋盘
		}
	}
}
void SetMine(char mine_board[ROWS][COLS], int row, int col)//放置雷
{
	int mine_count = Mine_Count;

	while (mine_count!=0)
	{
		int x = rand() % ROW + 1;
		int y = rand() % COL + 1;
		if (mine_board[x][y] == '0')
		{
			mine_board[x][y] = '1';
			mine_count--;
		}
	}
}
void ShowBoard(char user_board[ROWS][COLS], int row, int col)//打印用户棋盘
{
	printf("============================================\\n");
	for (int i = 0; i <= row; 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 ", user_board[i][j]);
			}
		}
		printf("\\n");
	}
	printf("============================================\\n");
}
char Get_Mine(char mine_board[ROWS][COLS], int x, int y)//获取用户选择坐标周围的雷数
{
	return mine_board[x - 1][y - 1] + mine_board[x - 1][y] + mine_board[x - 1][y + 1]
		+ mine_board[x][y - 1] + mine_board[x][y + 1]+ mine_board[x + 1][y - 1] 
		+ mine_board[x + 1][y] + mine_board[x + 1][y + 1]-8*'0';
}

void SweepMine(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col)//扫雷
{
	int count = 0;
	while (count < ROW*COL - Mine_Count)
	{
		printf("请输入你的选择 x,y:");
		int x = 0;
		int y = 0;
		scanf("%d,%d", &x, &y);
		if (user_board[x][y] == '?')//判断是否曾经输入过这个坐标
		{
			if (mine_board[x][y] == '1')//等于字符1就踩雷
			{
				printf("很遗憾,踩到雷了...\\n");
				break;
			}
			else//否则返回该坐标周围的雷数并打印新的棋盘
			{
				user_board[x][y] = Get_Mine(mine_board, x, y) + '0';
				ShowBoard(user_board, ROW, COL);
				count++;
			}
		}
		else
		{
			printf("刚才已经扫过此地...");
		}
	}
	if (count == ROW*COL - Mine_Count)//判断走的步数和棋盘安全位置是否相等
	{
		printf("恭喜你,扫雷成功!!");
		ShowBoard(mine_board, ROW, COL);
	}
}

test.c的创建和代码

这部分做的是菜单、游戏的运行函数和主函数的编写

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
	printf("**********************\\n");
	printf("*********扫雷*********\\n");
	printf("****0.exit**1.play****\\n");
	printf("**********************\\n");
}
void game()
{
	char mine_board[ROWS][COLS] = { 0 };
	char user_board[ROWS][COLS] = { 0 };
	InitBoard(mine_board, user_board, ROWS, COLS);
	SetMine(mine_board, ROWS, COLS);
	ShowBoard(user_board, ROW, COL);
	//ShowBoard(mine_board, ROW, COL);这个函数在最开始会打印一边雷区 供调试使用
	SweepMine(mine_board, user_board, ROWS, COLS);
}
int main()
{
	srand((unsigned int)time(NULL));
	int input;
	do
	{
		menu();
		printf("请输入你的选择:");
		scanf("%d", &input);
		switch(input)
		{
			case 1:
				printf("开始游戏\\n");
				game();
				break;
			case 0:
				printf("退出游戏\\n");
				break;
			default:
				printf("选择不合法");
		}
	} while (input);
	return 0;
}

以上是关于[C语言]扫雷小游戏实现 注释 代码的主要内容,如果未能解决你的问题,请参考以下文章

急求C语言编译的小游戏(如扫雷),附带源代码和注释。

C语言—实现扫雷游戏(注释详解)

C语言项目实战:《扫雷游戏》零基础项目,230 行源码注释示例

C语言之实现扫雷游戏 附注释

c语言初学者如何代码实现 扫雷 游戏

C语言--扫雷小游戏(含递归展开)