栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 扫雷游戏(代码+注释)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 扫雷游戏(代码+注释)

对于C语言学习者来说,在完成C语言初级学习之后,扫雷游戏是一个很好的知识的总结和练习。

扫雷即在一个棋盘中,随机放入一定数量的雷,玩家通过输入坐标,得到坐标上的信息(以此点为中心四周8个格子内地雷数量的总和),来判断此格子是否有地雷,从而依照此法排查出整个棋盘上所有的地雷。

本项目采用9*9的棋盘,放入地雷的数量可以依照个人设置。

首先声明总的头文件

#ifndef _UTILI_H_
#define _UTILI_H_

#include
#include   //后面需要地雷的随机放置,需要时间函数

#endif 

接下来我们需要对整个项目所有需要用的函数进行声明,放置在一个头文件中:

#ifndef _GAME_H_  //条件编译
#define _GAME_H_

#include"utili.h"

#define QUIT 0    //0退出 1 进入游戏
#define GAME 1

#define ROW 9    //定义9*9的扫雷界面
#define COL 9
#define ROWS ROW+2  //左右两边加1行1列,为了统计周围雷个数
#define COLS COL+2

#define GAME_LEVEL 20

void InitBoard(char board[ROWS][COLS], char set);    //设置界面
void DisplayBoard(char board[ROWS][COLS], int row, int col);   //展示界面

void SetMine(char mine[ROWS][COLS], int row, int col);   //设置雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);  //找雷

void StartGame();

#endif 

整个游戏各个部分功能进行编写代码,分别实现不同的功能:

#include"Game.h"

void InitBoard(char board[ROWS][COLS], char set)   //初始化棋盘,在后台执行扫雷任务时
{
	for(int i=0; i");
		scanf("%d %d", &x, &y);

		if(x<1||x>row || y<1 || y>col)
		{
			printf("输入的排雷位置非法,请重新输入.....n");
			continue;
		}

		if(mine[x][y] == '1')
		{
			printf("很遗憾,你被Over.n");
			DisplayBoard(mine, ROW, COL);
			break;
		}

		//统计雷的个数
		int count = GetMineCount(mine, x, y);
		show[x][y] = count + '0';

		system("cls");
		DisplayBoard(show, ROW, COL);

		win++;
	}

	if(win >=  row*col-GAME_LEVEL)
	{
		printf("恭喜你,排雷成功.n");
	}
}

void StartGame()
{
	//定义棋盘
	char mine[ROWS][COLS];
	char show[ROWS][COLS];

	//初始化棋盘
	InitBoard(mine, '0');
	InitBoard(show, '*');

	//埋雷
	SetMine(mine, ROW, COL);

	//显示棋盘
	DisplayBoard(show, ROW, COL);

	//扫雷
	FindMine(mine, show, ROW, COL);
}

编写主函数:

#include"Game.h"

int main(int argc, char *argv[])
{
	int select = 1;
	while(select)
	{
		printf("*************************************n");
		printf("*          简 易 扫 雷 游 戏        *n");
		printf("*************************************n");
		printf("*             [1] Play              *n");
		printf("*             [0] Quit              *n");
		printf("*************************************n");
		printf("请选择:>");
		scanf("%d", &select);

		if(select == QUIT)
			break;

		if(select != GAME)
		{
			printf("输入的操作有误,请重新输入......n");
			continue;
		}

		//开始游戏
		StartGame();
	}
	printf("游戏结束,拜拜.n");
	return 0;
}

代码在VS2015上正常执行,整个游戏过程没出现问题。

游戏还可以有许多改进的地方,如增加计时功能,点到附件无雷的格子时展示所有相邻的无雷格子等,后续还可以丰富完善。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925965.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号