[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语言==>扫雷游戏

实现记忆中的经典游戏-扫雷