C++实现简易版扫雷游戏

目录
  • 一、菜单栏
  • 二、创建棋盘数组
  • 三、初始化棋盘
  • 四、打印棋盘
  • 五、布置雷
  • 六、排查雷
  • 七、全部代码
  • 总结

一、菜单栏

1.先用printf函数制作一个简易版的菜单,并附上选项提示,玩游戏或者退出游戏

2.为了使玩家能选择玩或者不玩游戏,则采用do while循环比较合适,同时,借助switch case语句来进行选择

3.玩游戏的那个选项,只需调用game()函数即可

二、创建棋盘数组

为了便于修改棋盘大小,所以采用宏定义的方式定义其行与列

由于有三个信息:放置雷的的信息,周围雷的信息,以及没有雷的信息,所以采用两个棋盘比较合适

又因为每排查一次雷,都得打印该排查坐标周围八个坐标有几个雷的信息,所以为了防止数组越界,从而采用比该棋盘大一圈的棋盘,但是最外面一圈不放置雷

三、初始化棋盘

因为显示棋盘和放置雷的棋盘都需要初始化,为了使两个棋盘调用同一个初始化函数,所以采取多传一个参数的方法

四、打印棋盘

为了排查雷时,能够使棋盘间分割,从而更加清晰,所以最上面和最下面都各打印一个分割行

为了便于游戏玩家找到想要排查的坐标,所以将其行与列的提示打印

打印棋盘时,最外边一圈不需要打印,所以数组下标从1开始即可

五、布置雷

因为想让雷的个数便于更改,所以采用宏定义的方式更好

由于布置雷的个数不止一个,所以必然得采用循环的方式来进行

同时,为了使布置的雷具有随机性,那么就需要采用随机函数和时间戳来进行,time和rand函数,另外使用rand函数的同时,需要调用srand函数

随机数具有不确定性,所以需要将其%上棋盘(不包括最外层)的行与列,再+1,才能限制其范围为布置雷的范围或排查雷的范围

 

六、排查雷

排查的坐标是有范围限制的,所以输入错误时,需要给予提示

排雷涉及多次排查,所以得采用循环

如果排查雷时踩到雷,则这局游戏也就结束了,就该跳出循环,并给予提示,同时打印棋盘,让玩家输的明白点儿

如果此次排查雷成功,那就需打印此坐标周围八个坐标有雷的个数

由于雷的个数采用整数,而'1' - '0' = 1,所以每个坐标的数都要-‘0’,如下图

然后,把此数返回给show棋盘数组,同时打印show棋盘数组

同时,show棋盘数组是浮点型,所以需该整数+‘0’再赋值给show棋盘数组

当排查的坐标只有有雷的坐标没有打印时,就表示玩家赢了,即定义一个变量,每排查一个雷就+1,当其等于棋盘(不包括最外层)的坐标个数-雷的个数时,玩家就赢了

七、全部代码

//测试文件
#include"game.h"
void menu()
{
	printf("**************************\n");
	printf("****    1.play    ********\n");
	printf("****    0.exit    ********\n");
	printf("**************************\n");
}
//玩游戏
void game()
{
	//创建棋盘
	//放置雷的棋盘
	char mine[ROWS][COLS];
	//显示排查后的棋盘
	char show[ROWS][COLS];
	//初始化棋盘
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印棋盘
	//DisplayBoard(mine, ROW, COL);
	DisplayBoard(show, ROW, COL);
	//布置雷
	SetMineBoard(mine, ROW, COL);
	//排查雷
	FindBoard(mine, show, ROW, COL);
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//玩游戏
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}
//声明文件
#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 EASY_COUNT 10
//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void SetMineBoard(char board[ROWS][COLS], int row, int col);
//排查雷
void FindBoard(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
//定义文件
#include"game.h"
//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	printf("--------------------------------\n");
	//行提示
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		int j = 0;
		//列提示
		printf("%d ",i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("--------------------------------\n");
}

//布置雷
void SetMineBoard(char board[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = 0;//已经布置雷的个数
	while (count < EASY_COUNT)
	{
		x = rand() % row + 1;
		y = rand() % col + 1;
		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count++;
		}
	}
}

int GetMineBoard(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 FindBoard(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;//已经排查雷的个数
	while (win < row * col - EASY_COUNT)
	{
		printf("请输入要排查的坐标:");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= col && y >= 1 && y <= col)
		{
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了\n");
				DisplayBoard(mine, ROW, COL);
				break;
			}
			else
			{
				show[x][y] = GetMineBoard(mine, x, y) + '0';
				DisplayBoard(show, ROW, COL);
				win++;
			}
		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}
	if (win == row * col - EASY_COUNT)
	{
		printf("恭喜您,排雷成功!\n");
		DisplayBoard(mine, ROW, COL);
	}
}

总结

到此这篇关于C++实现简易版扫雷游戏的文章就介绍到这了,更多相关C++扫雷内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++实现趣味扫雷游戏

    本文实例为大家分享了C++实现趣味扫雷游戏的具体代码,供大家参考,具体内容如下 流程设计 1.初始化阵列. 2.输入坐标点. 3.选择:挖掘,标记,取消标记,重启,退出游戏. 如果选了挖掘,判断坐标点是地雷则游戏结束,是数字则显示数字并回到2,是空格则显示周围8个元素值并直到连带的空格显示完了回到2: 如果选了标记,将该点的元素值设为-2并回到2: 如果选了取消标记,初始化该点,回到2: 如果选了重启,则初始化阵列,回到2: 如果选了退出游戏,则exit. 4.挖掘完所有非地雷点后,游戏胜利,选

  • C++ 情怀游戏扫雷的实现流程详解

    扫雷最原始的版本可以追溯到1973年一款名为"方块"的游戏. 不久,"方块"被改写成了游戏"Rlogic".在"Rlogic"里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输.两年后,汤姆·安德森在"Rlogic"的基础上又编写出了游戏"地雷",由此奠定了现代扫雷游戏的雏形. 1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师

  • C++代码实现扫雷游戏

    前言 提示:本文是基于easyX图形库实现的,还有部分功能可以添加,仅适合新手参考. 提示:以下是本篇文章正文内容,下面案例可供参考 一.扫雷游戏模式 在确定大小的矩形雷区中随机布置一定数量的地雷,玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷. 游戏的基本操作包括左键单击和右键单击.其中左键用于打开安全的格子,推进游戏进度:右键用于标记地雷,以辅助判断. 左键单击:在判断出不是雷的方块上按下左键,可以打开该方块.如果方块上出现数字,则该数字表示其周围3×3区域中的地雷数(一般为8个

  • 380行C++代码实现扫雷小游戏

    本文实例为大家分享了C++代码实现扫雷小游戏的具体代码,供大家参考,具体内容如下 难点: 点击一次清理出一大片区域的功能,我采用的是先把点击的那一块的坐标存到一个队列里,然后取出里面的一个元素,再把这个元素周围的8块放进队列里,重复的不放,就可以对规定的区域做大面积清理了,另外为了右滑界面也加了不少代码比如一些颜色属性时钟移动效果还有光标之类的,实际上要想做一个简单的出来200行绰绰有余了,只要将程序模块化,一个函数解决一个问题,思路还是很清晰的. 此外,在写这个东西的几天里也学到了很多经验,终

  • C++实现简单扫雷小游戏

    本文实例为大家分享了C++实现简单扫雷小游戏的具体代码,供大家参考,具体内容如下 头文件Mine_Sweep.h #include <iostream> #include <ctime> #include <cstdlib> #include <algorithm> #include <queue> #include <Windows.h> using namespace std; typedef pair<int, int&g

  • C++实现扫雷程序开发

    C++程序开发实现扫雷游戏,供大家参考,具体内容如下 //扫雷的类的定义 #pragma once class Game{ public: //开始游戏 void play(); //退出游戏 int quit(); //游戏规则 void rule(); private: //踩雷次数,作为失败条件 int error = 0; //分数 int score = 0; //最高分记录 int Rocord[5] = { 0,0,0,0,0 }; //地图 int map[40][40]; //

  • C++实现扫雷游戏示例讲解

    C/C++实现扫雷小游戏 源代码: github:https://github.com/KamSss/C-Practice/tree/master/Minesweeper扫雷小游戏/Minesweeper扫雷 总体构造: a.简易的游戏菜单逻辑 b.初始化棋盘 c.布置雷的位置 d.排雷.棋盘打印.判断输赢(难点) a.简易的游戏菜单逻辑 简单的通过一个输入0和1实现判断是玩游戏还是退出游戏的逻辑 输入1则进入游戏 输入0则break退出游戏,且退出do-while循环,程序结束. void t

  • C++实现简易版扫雷游戏

    目录 一.菜单栏 二.创建棋盘数组 三.初始化棋盘 四.打印棋盘 五.布置雷 六.排查雷 七.全部代码 总结 一.菜单栏 1.先用printf函数制作一个简易版的菜单,并附上选项提示,玩游戏或者退出游戏 2.为了使玩家能选择玩或者不玩游戏,则采用do while循环比较合适,同时,借助switch case语句来进行选择 3.玩游戏的那个选项,只需调用game()函数即可 二.创建棋盘数组 为了便于修改棋盘大小,所以采用宏定义的方式定义其行与列 由于有三个信息:放置雷的的信息,周围雷的信息,以及

  • 利用java开发简易版扫雷游戏

    1.简介 学了几周的Java,闲来无事,写个乞丐版的扫雷,加强一下Java基础知识. 2.编写过程 编写这个游戏,一共经历了三个阶段,编写了三个版本的游戏代码. 第一版:完成了扫雷游戏的基本雏形,实现了游戏的基本功能,游戏运行在cmd黑窗口中,以字符绘制游戏界面,无图形化窗口,通过控制台输入字符完成游戏控制.代码放置在一个java文件中,代码的可读性以及可扩展性都比较差. 第二版:在第一版实现基本功能的基础之上,对游戏代码进行重构,根据各部分的功能创建多个类,增加代码注释,提高代码的可读性以及可

  • C语言实现简易版扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 这个小项目源自两个月前学数组的时候,由于觉得比较重要,想记录一下. 首先,大概的思路是要做出两个二维数组充当棋盘,一个用于后台储存雷的情况,一个用于打印给玩家玩游戏 那么第一步我们知道,需要声明两个二维数组,一个打印出来给用户看,一个自己深埋在心里. 第二步应该是要埋雷,这里我们可以定义几个数值去让玩家选择埋雷的数量. 第三步也就是最难的扫雷部分了,我的思路是,首先玩家先输入一个坐标,我们再对玩家输入的坐标找到对应藏雷的

  • C语言开发简易版扫雷小游戏

    前言: 想起来做这个是因为那时候某天知道了原来黑框框里面的光标是可以控制的,而且又经常听人说起这个,就锻炼一下好了. 之前就完成了那1.0的版本,现在想放上来分享却发现有蛮多问题的,而且最重要的是没什么注释[果然那时候太年轻]!现在看了也是被那时候的自己逗笑了,就修改了一些小bug,增加了算是详尽而清楚的注释,嗯,MSDN上面对各种函数的解释很详细的[又锻炼一下英语],顺便让开头和结尾的展示"动"了起来,就当作1.5的版本好了. 这个只是给出了一个实现的思路,其中肯定也有很多不合理的地

  • C语言实现简易版扫雷小游戏

    本文实例为大家分享了C语言实现简易版扫雷的具体代码,供大家参考,具体内容如下 声明 本次扫雷小游戏用多文件来编写.首先,要自定义的一个头文件 mine.h,里面有扫雷程序里面所需要的头文件.常量和所有函数的声明.其次,创建主函数 test.c,用自己喜欢的方式构建一个游戏的框架,最后,创建自定义函数 mine.c,编写各项功能. 设计思路 1.先写主函数,理清整个游戏流程. int main() { int quit = 0; do{ int select = 0; Menu(); scanf(

  • C语言实现简易版扫雷的完整过程

    一.问题描述 用C语言实现简易版扫雷. 二.基本流程 1.菜单界面. 2.创建地图 (两个地图). 3.初始化地图. 4.打印地图. 5.程序读取玩家输入的要翻开位置的坐标,并校验. 6.如果不是地雷,统计当前位置周围雷的个数, 并显示到地图上.. 7.判定游戏是否胜利. 三.步骤 1.菜单界面 1.开始游戏 0.退出游戏 int menu(){ printf("----------------------\n"); printf("------1.开始游戏------\n&

  • 利用C语言实现简易版扫雷

    我和我的父亲都是扫雷的狂热粉,小时候我常常因为技术不好而被父亲嘲笑,那么今天我要来做一个简易版扫雷,回头也给他玩一玩. 首先我们要构建好雷盘的样子,我们理所当然想到利用二维数组.那么请注意:因为我们每一次随机生成的雷盘不能展示给用户,所以显示盘与雷盘要分开,那么我们在这里要用到两个二维数组.一个是雷盘,用来记录随机生成雷的布局,另一个是显示盘,初始化全为*,让用户来扫雷. 具体功能: 先由电脑随机生成雷的分布. 玩家通过输入坐标来选择点. 玩家选择对应点后,对应点将显示周围雷的个数(以该点为中心

  • 用Python写一个简易版弹球游戏

    我们前面讲了几篇关于类的知识点,为了让大家更好的掌握类的概念,并灵活的运用这些知识,我写了一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python写小游戏还是蛮方便的,蛮有意思的~~ 先看一下我们的最终效果图 我们分9步来讲解如何写这个小游戏 1.创建游戏的主界面 我们用Python的内置模块Tkinter来完成了,它是Python的标准GUI工具包,可以非常方便在制作GUI小工具,因为是跨平台的,可以方便的在win和linux下运行,我们用

  • C语言版扫雷游戏

    本文实例为大家分享了C语言版扫雷游戏的具体代码,供大家参考,具体内容如下 1.思路 一.创建二维数组,来表示地图 每一个格子要表示的信息: 1.未翻开状态(草地)和已翻开状态(数字) 2.该格子是地雷或者不是地雷(1表示是地雷,0表示不是) 二.使用两个二维数组来分别表示以上的两种状态 第一个二维数组 char showMap[9][9];表示每个格子的翻开和未翻开状态 表示未翻开,字符'0'-'8'表示已翻开的数字 第二个二维数组 char mineMap[9][9];表示每个格子是否是地雷

  • C语言实现简易的扫雷游戏

    本文实例为大家分享了C语言实现简易的扫雷游戏的具体代码,供大家参考,具体内容如下 在正式讲内容之前先说一说扫雷游戏的规则 游戏规则很简单,点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利 .刚开始需要碰运气,只要点开一个区域,就可以正式开始了. 3.根据现有情况,判断出一定有雷的位置. 4.进一步计算,因为"2"右边的"1"已经有从属的雷了,所以右边的"2"的正下方没有雷,因此可以判断出左边有两颗雷,满足两个"2". 5.

随机推荐