首页 > 其他分享 >扫雷1.0(控制台)

扫雷1.0(控制台)

时间:2023-12-12 19:38:40浏览次数:29  
标签:10 1.0 cout int void 扫雷 DisplayMine 控制台 游戏

《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输,直到如今,也是一款解压的小游戏。它不仅有意思,而且占用内存还小,只可惜在win10扫雷就不自带了,但是它仍然活跃在大学生身边。今天我们就来复现一下扫雷。


首先要明确扫雷程序的组成:

目录

主菜单menu();

展示游戏面DisplayDesk();

显示雷面DisplayMine();

布雷assignmine();

揭开put();

主菜单menu();

玩游戏一定需要游戏菜单,对于控制台的扫雷我选择的是这样:

———————扫雷———————

      ————————————————

      —————1.开始游戏——————

      —————2.退出游戏——————

      ————————————————

     ———————扫雷———————

    请选择:


代码:

void menu() {
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;		
	cout << "                                            —————1.开始游戏——————" << endl;
	cout << "                                            —————2.退出游戏——————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            请选择:";
  }

在这之前我加入了一定数量的" "将菜单置于屏幕中间

扫雷1.0(控制台)_i++

对于如何快速计算出中心位置可以看如下操作:

扫雷1.0(控制台)_随机数_02

扫雷1.0(控制台)_i++_03

tip:宽度就是对应的可以显示的每一行的位数,一个英语字符为一位,一个中文字符为2位

显示游戏桌面DisplayDesk();

定义游戏桌面ShowDesk[10][10]={ {'','','','','','','','','',''},{'','','','','','','','','',''}, {'','','','','','','','','',''}, {'','','','','','','','','',''}, {'','','','','','','','','',''}, {'','','','','','','','','',''}, {'','','','','','','','','',''}, {'','','','','','','','','',''}, {'','','','','','','','','',''} }; 

双循环显示:

void DisplayDesk() {
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	for (int i = 0; i < 9; i++) {
		cout << "                                             " << i + 1 << " ";
		for (int j = 0; j < 9; j++)
			cout << " " << ShowDesk[i][j] << " ";
		cout << " " << i + 1;
		cout << endl;
	}
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            输入坐标(x y):";
}

效果图:

扫雷1.0(控制台)_随机数_04

布雷assginmine();

布雷要得到一个真随机数。rand()产生的仅仅是假随机数,为了产生真随机数需要用到time.h头文件,代码:

int Desk[11][11]
void assignmine() {
	srand((unsigned int)time(NULL));
	for (int i = 0; i < 10;) {
		int x = rand() % 9+1;
		int y = rand() % 9+1;
		if (Desk[x][y] == 0) {
			Desk[x][y] = 1;
			i++;
		}
	}
}

显示雷面DisplayMine();

和显示游戏桌面一样没什么特别的变化,直接上代码:

void DisplayMine() {
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	for (int i = 1; i < 10; i++) {
		cout << "                                             " << i <<" ";
		for (int j = 1; j < 10; j++)
			cout << " "<<Desk[i][j]<<" ";
		cout << " " << i;
		cout << endl;
	}
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
}

效果图:

扫雷1.0(控制台)_ci_05

揭开put();

揭开对应的数字产生要计算该位置附近的雷的数量,为了不进行分类讨论,所以对于99的游戏来说,放置雷的数组定义为1111。计算完之后,将对应的ShowDesk数组的位置替换为对应数字,并进行判断游戏是否结束。

代码:

void put() {
	int x, y,flag=1;
	while (coun[0] > 0) {
		cin >> x >> y;
		if (Desk[x][y] == 1) {
			cout << "                                                        Game Over!" << endl;
			flag = 0;
			break;
		}
		ShowDesk[x-1][y-1] = Desk[x - 1][y - 1] + Desk[x - 1][y] + Desk[x - 1][y + 1] + Desk[x][y - 1] + Desk[x][y + 1] + Desk[x + 1][y - 1] + Desk[x + 1][y] + Desk[x + 1][y + 1]+'0';
		system("cls");
		DisplayDesk();
		coun[0]--;
	}
	if (flag)
		cout << "                                                        恭喜通过!"<<endl;
}

完整代码+优化

#include<time.h>
#include<iostream>
using namespace std;
int Desk[11][11] = { 0 }, flag[9][9] = { 0 }, mine[1] = { 10 }, coun[1] = { 71 };
char ShowDesk[10][10] = { {'*','*','*','*','*','*','*','*','*','*'},{'*','*','*','*','*','*','*','*','*','*'}, {'*','*','*','*','*','*','*','*','*','*'}, {'*','*','*','*','*','*','*','*','*','*'}, {'*','*','*','*','*','*','*','*','*','*'}, {'*','*','*','*','*','*','*','*','*','*'}, {'*','*','*','*','*','*','*','*','*','*'}, {'*','*','*','*','*','*','*','*','*','*'}, {'*','*','*','*','*','*','*','*','*','*'}, };

void menu();
void DisplayMine();
void DisplayDesk();
void assignmine();
void put();



void menu() {
	int m;
	//空白有44个,内容占用了32个位置,一共120个位
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;		
	cout << "                                            —————1.开始游戏——————" << endl;
	cout << "                                            —————2.退出游戏——————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            请选择:";
	cin >> m;
	if (m == 1) {
		system("cls");
		assignmine();
		DisplayDesk();
		put();
		DisplayMine();
	}
}
void DisplayMine() {
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	//cout << "                                              %d|"<<1;//46空白格
	for (int i = 1; i < 10; i++) {
		cout << "                                             " << i <<" ";
		for (int j = 1; j < 10; j++)
			cout << " "<<Desk[i][j]<<" ";
		cout << " " << i;
		cout << endl;
	}
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
}
void DisplayDesk() {
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	for (int i = 0; i < 9; i++) {
		cout << "                                             " << i + 1 << " ";
		for (int j = 0; j < 9; j++)
			cout << " " << ShowDesk[i][j] << " ";
		cout << " " << i + 1;
		cout << endl;
	}
	cout << "                                                1  2  3  4  5  6  7  8  9" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            ———————扫雷———————" << endl;
	cout << "                                            ————————————————" << endl;
	cout << "                                            输入坐标(x y):";
}
void assignmine() {
	srand((unsigned int)time(NULL));
	for (int i = 0; i < 10;) {
		int x = rand() % 9+1;
		int y = rand() % 9+1;
		if (Desk[x][y] == 0) {
			Desk[x][y] = 1;
			i++;
		}
	}
}
void put() {
	int x, y,flag=1;
	while (coun[0] > 0) {
		cin >> x >> y;
		if (Desk[x][y] == 1) {
			cout << "                                                        Game Over!" << endl;
			flag = 0;
			break;
		}
		ShowDesk[x-1][y-1] = Desk[x - 1][y - 1] + Desk[x - 1][y] + Desk[x - 1][y + 1] + Desk[x][y - 1] + Desk[x][y + 1] + Desk[x + 1][y - 1] + Desk[x + 1][y] + Desk[x + 1][y + 1]+'0';
		system("cls");
		DisplayDesk();
		coun[0]--;
	}
	if (flag)
		cout << "                                                        恭喜通过!"<<endl;
}
int main() {
	menu();
	return 0;
}

tip:system("cls");清除控制台的内容

标签:10,1.0,cout,int,void,扫雷,DisplayMine,控制台,游戏
From: https://blog.51cto.com/u_16256111/8789958

相关文章

  • 《初学C语言第18天——扫雷游戏特别篇》
    //(game.h.cpp)#define_CRT_SECURE_NO_WARNINGS1#defineROW9#defineCOL9#defineROWSROW+2#defineCOLSCOL+2#defineLEI10//雷的个数10#include<stdio.h>#include<stdlib.h>#include<time.h>//函数声明voidInitBoard(charboard[ROWS][COLS],......
  • 【洛谷 P2670】[NOIP2015 普及组] 扫雷游戏 题解(模拟)
    [NOIP2015普及组]扫雷游戏题目背景NOIP2015普及组T2题目描述扫雷游戏是一款十分经典的单机小游戏。在行列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的......
  • 小米澎湃 os 技术白皮书V1.0
    2023年对于小米而言,是开启全新发展周期的一年,也是一系列的深刻变革进入深水区之时。集团正处于一个全新殿堂的门槛上,全新阶段的起跑线上。这一年我们的关键词是“稳健推进,蓄势待发”,这一年里,我们要不断夯实基础、构建强化体系能力,为未来5-10年的长期发展打下坚实基础,并为未......
  • 遥遥领先GPT-4!谷歌最强AI大模型Gemini 1.0发布
    在5月举行的开发者大会上,谷歌首次透露其正在开发的AI大模型Gemini,时隔7个月,Gemini终于来了。据谷歌官方公众号消息,谷歌日前正式发布Gemini1.0,这是谷歌迄今为止构建的最强大、最通用、最灵活的模型。据介绍,针对不同场景,谷歌发布了三种不同版本:GeminiUltra:谷歌规模最大且功能......
  • activiti7.1.0.M6流程图预览和进度高亮查看
    activiti7移除了静态方法创建ProcessDiagramGenerator,需要创建DefaultProcessDiagramGenerator实例依赖:<properties><batik-transcoder.version>1.17</batik-transcoder.version><batik-codec.version>1.17</batik-codec.version>......
  • Web开发学习HTTP协议、通过浏览器控制台学习HTTP协议。
    @目录HTTP协议1.HTTP协议是什么?2.HTTP协议的特点3.什么是URL?4.通过浏览器控制台学习HTTP协议RequestHeaders请求数据格式说明ResponseHeaders请求数据格式说明5.HTTP工作原理HTTP协议1.HTTP协议是什么?HTTP协议是一种超文本传输协议,规定了浏览器和服务器之间的数据传输的规则......
  • WP:靶场BBS (cute): 1.0.2
    WP:靶场BBS(cute):1.0.2靶场地址:https://www.vulnhub.com/entry/bbs-cute-102,567/#release1、信息收集namp-sV192.168.2.0/24 StartingNmap7.91(https://nmap.org)at2022-07-2919:12CSTNmapscanreportfor192.168.2.1(192.168.2.1)Hostisup(0......
  • OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提
    问题描述:OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@DescriptorMatcher@cuda@cv......于动态链接库......,如下图所示:解决办法:如果include、lib和dll的路径都配置正确的话,可以尝试将编译好的带......
  • 优维产品最佳实践第17期:善用控制台
    「背景」遇到页面报错时,是不是感到困扰,不知如何解决?页面响应缓慢时,是否感到迷茫,不清楚从何入手排查?面对主机高负载时,是不是觉得确认异常根因很有挑战?本期最佳实践为您讲解如何通过控制台排查定位:页面报错时,获取traceId确认报错组件;通过全局监控确认组件状态,查看组件日志分析原因......
  • 11.02日
    今天的课程安排相当紧凑,从UML统一建模语言开始,我对软件开发的蓝图有了更深的理解。这些图形化的表示方法让抽象的概念变得直观,我开始构想自己设计一个小型项目的框架。乒乓球课给了我一次释放压力的机会。球拍与小球的每一次碰撞,都让我暂时忘记了学业的繁重。我想象自己能用同......