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

Posted 王嘻嘻-

tags:

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

概述

扫雷是一款大众类的益智小游戏。游戏目标是根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。

实现过程

  1. 创建一个用户交互菜单
  2. 布雷函数
  3. 显示扫雷矩阵
  4. 玩家自定义坐标
  5. 计算排雷数

多文件实现

头文件  clear_mine.h

#pragma once  //防止头文件被重复包含

#define _CRT_SECURE_NO_WARNINGS 1   //实现 scanf 编译通过

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

#define ROW 8              
#define COL 8           

#define STYLE '?'        //初始化
#define NUM 20           //埋雷数

extern void Game();

源文件  main.c

  向玩家展示菜单栏

#include "clear_mine.h"

static void Menu()          //用户交互菜单
{
	printf("########################\\n");
	printf("#  1. Play      0.Exit #\\n");
	printf("########################\\n");
}

int main()
{
	int quit = 0;
	int select = 0;
	while (!quit)
	{
		Menu();
		printf("Please Enter# ");
		scanf("%d", &select);
		switch (select)
		{
		case 1:
			Game();
			break;
		case 0:
			quit = 1;
			break;
		default:
			printf("Position Error, Try Again!\\n");
			break;
		}
	}

	printf("byebye!\\n");

	system("pause");
	return 0;
}

源文件  clear_mine.c

#include "clear_mine.h"

static void SetMines(char board[][COL], int row, int col)     //布雷
{
	int count = NUM;
	while (count)
	{
		int x = rand() % (row - 2) + 1;
		int y = rand() % (col - 2) + 1;   //随机数生成 矩阵长宽分别-2 的随机数
		if (board[x][y] == '0')     //非法判断 只能同一个位置生成一个随机数
		{
			board[x][y] = '1';
			count--;
		}
	}
}

static void ShowLine(int col)        
{
	for (int i = 0; i <= (col - 2); i++)
	{
		printf("----");
	}
	printf("\\n");
}
static void ShowBoard(char board[][COL], int row, int col)    //显示扫雷矩阵
{
	printf("     ");
	for (int i = 1; i <= (col - 2); i++)      //表头数字打印
	{
		printf("%d   ", i);
	}
	printf("\\n");
	ShowLine(col);        
	for (int i = 1; i <= (row - 2); i++)
	{
		printf("%-3d|", i);
		for (int j = 1; j <= (col - 2); j++)
		{
			printf(" %c |", board[i][j]);
		}
		printf("\\n");
		ShowLine(col);
	}
}

static char CountMines(char board[][COL], int x, int y)      //计算某点周围8个位置雷总数
{
	return board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + \\
		board[x][y + 1] + board[x + 1][y + 1] + board[x + 1][y] + \\
		board[x + 1][y - 1] + board[x][y - 1] - 7 * '0';
}

void Game()
{
	srand((unsigned long)time(NULL));     //生成随机数种子

	char show_board[ROW][COL];
	char mine_board[ROW][COL];

	memset(show_board, STYLE, sizeof(show_board));  //生成用户显示矩阵   
	memset(mine_board, '0', sizeof(mine_board));    //生成扫雷矩阵

	SetMines(mine_board, ROW, COL);            //布雷

	int count = (ROW - 2)*(COL - 2) - NUM;        //排雷

	while (count)
	{
		system("cls");                //清屏
		ShowBoard(show_board, ROW, COL);
		printf("Please Enter Your Position <x,y># ");
		int x = 0;
		int y = 0;
		scanf("%d %d", &x, &y);
		if (x < 1 || x > 10 || y < 1 || y > 10)    //非法性判断
		{
			printf("Postion Error!\\n");
			continue;
		}
		if (show_board[x][y] != STYLE){
			printf("Postion Is not *\\n");
			continue;
		}
		if (mine_board[x][y] == '1'){
			printf("game over!\\n");
			ShowBoard(mine_board, ROW, COL);
			break;
		}
		
		show_board[x][y] = CountMines(mine_board, x, y);
		count--;
	}

}

初始化好的扫雷矩阵 

游戏体验结果

感兴趣的小朋友可以尝试下哦  ~  welcome

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

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

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

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

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

C语言之实现三子棋游戏 附注释

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