扫雷游戏C++

2024-06-02 21:48
文章标签 c++ 游戏 扫雷

本文主要是介绍扫雷游戏C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include<iostream>
#include<ctime>
using namespace std;int m=1;
int pan[9][9]={0},pan1[9][9]={0};
char a[10][10]={{'0','1','2','3','4','5','6','7','8','9'},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'},{'9'}};
class Point
{
public:void Get_Point(){cout<<"请输入坐标:";cin>>x>>y;}int Get_x(){return x;};int Get_y(){return y;};
private:int x,y;
};class Map:public Point
{
public:void draw(int x,int y);int open(int x,int y);void scanbomb();int saomiao();
};int Map::saomiao()
{int i,j,n;for(i=1;i<=7;i++){for(j=1;j<=7;j++){if(pan1[i][j]==1||pan1[i][j]==2)n++;if(n==39){break;} }if(n==39){  printf("\n");printf("恭喜你 你赢了!!!!");break;}}if(n==39)m=0;return 0;
}void Map::scanbomb()
{int i,j;for(i=1;i<=8;i++)for(j=1;j<=8;j++){if(pan[i][j]!=9){if(i==1&&j==1)//计数左上角 {if(pan[i][j+1]==9)pan[i][j]++;if(pan[i+1][j]==9)pan[i][j]++;if(pan[i+1][j+1]==9)pan[i][j]++;}if(i==1&&j==7&&pan[1][7]!=9)//计数右上角 {if(pan[i][j-1]==9)pan[i][j]++;if(pan[i+1][j]==9)pan[i][j]++;if(pan[i+1][j-1]==9)pan[i][j]++;}if(i==7&&j==1&&pan[7][1]!=9)//计数左下角 {if(pan[i][j+1]==9)pan[i][j]++;if(pan[i-1][j]==9)pan[i][j]++;if(pan[i-1][j+1]==9)pan[i][j]++;}if(i==7&&j==7&&pan[7][7]!=9)//计数右下角 {if(pan[i][j-1]==9)pan[i][j]++;if(pan[i-1][j]==9)pan[i][j]++;if(pan[i-1][j-1]==9)pan[i][j]++;}if(j==1&&i>1&&i<=7)//计数左边 {if(pan[i-1][j]==9)pan[i][j]++;if(pan[i-1][j+1]==9)pan[i][j]++;if(pan[i][j+1]==9)pan[i][j]++;if(pan[i+1][j]==9)pan[i][j]++;if(pan[i+1][j+1]==9)pan[i][j]++; }if(j==7&&i>1&&i<=7)//计数右边 {if(pan[i-1][j]==9)pan[i][j]++;if(pan[i-1][j-1]==9)pan[i][j]++;if(pan[i][j-1]==9)pan[i][j]++;if(pan[i+1][j]==9)pan[i][j]++;if(pan[i+1][j-1]==9)pan[i][j]++; }if(i==7&&j>1&&j<=7)//计数下边 {if(pan[i-1][j]==9)pan[i][j]++;if(pan[i-1][j-1]==9)pan[i][j]++;if(pan[i][j-1]==9)pan[i][j]++;if(pan[i-1][j+1]==9)pan[i][j]++;if(pan[i][j+1]==9)pan[i][j]++; }if(i==1&&j>1&&j<=7)//计数上边 {if(pan[i+1][j]==9)pan[i][j]++;if(pan[i+1][j-1]==9)pan[i][j]++;if(pan[i][j-1]==9)pan[i][j]++;if(pan[i+1][j+1]==9)pan[i][j]++;if(pan[i][j+1]==9)pan[i][j]++; }if(i>1&&i<7&&j>1&&j<7){if(pan[i-1][j-1]==9) pan[i][j]++;//左上 if(pan[i][j-1]==9) pan[i][j]++;//左 if(pan[i+1][j-1]==9) pan[i][j]++;//左下 if(pan[i-1][j]==9) pan[i][j]++;//上 if(pan[i+1][j]==9) pan[i][j]++;//下 if(pan[i-1][j+1]==9) pan[i][j]++;//右上if(pan[i][j+1]==9) pan[i][j]++;//右 if(pan[i+1][j+1]==9) pan[i][j]++;//右} }}
}int Map::open(int x,int y)
{if(x>=1&&y>=1){int i,j;int pan2[10][10]={0};for(i=0;i<=8;i++)for(j=0;j<=8;j++){if(i==0||i==8||j==0||j==8)pan[i][j]=11;} for(i=x-1;i<=x+1;i++)for(j=y-1;j<=y+1;j++){if(pan[x][y]==0&&pan1[x][y]==1&&pan2[x][y]==0){pan2[i][j]=1;if(x-1>=0&&y-1>=0&&pan[x-1][y-1]!=9&&pan[x-1][y-1]!=11&&pan1[x-1][y-1]==0) draw(x-1,y-1);//挖左上 if(x-1>0&&pan[x-1][y]!=9&&pan[x-1][y]!=11&&pan1[x-1][y]==0) draw(x-1,y);//挖上 if(x-1>0&&y+1<=7&&pan[x-1][y+1]!=9&&pan[x-1][y+1]!=11&&pan1[x-1][y+1]==0) draw(x-1,y+1);//挖右上 if(y-1>0&&pan[x][y-1]!=9&&pan[x][y-1]!=11&&pan1[x][y-1]==0) draw(x,y-1);//挖左 if(y+1<=7&&pan[x][y+1]!=9&&pan[x][y+1]!=11&&pan1[x][y+1]==0) draw(x,y+1);//挖右 if(x+1<=7&&y-1>0&&pan[x+1][y-1]!=9&&pan[x+1][y-1]!=11&&pan1[x+1][y-1]==0) draw(x+1,y-1);//挖左下 if(x+1<=7&&pan[x+1][y]!=9&&pan[x+1][y]!=11&&pan1[x+1][y]==0) draw(x+1,y);//挖下 if(x+1<=7&&y+1<=7&&pan[x+1][y+1]!=9&&pan[x+1][y+1]!=11&&pan1[x+1][y+1]==0) draw(x+1,y+1);//挖右下 }return 0;}}return 0;
}void Map::draw(int x,int y)
{if(pan[x][y]!=9&&pan[x][y]!=0&&pan1[x][y]!=2){pan1[x][y]=1;a[x][y]=pan[x][y]+'0';}if(pan[x][y]==0&&pan1[x][y]!=2){pan1[x][y]=1;a[x][y]=pan[x][y]+'0';open(x,y);}if(pan[x][y]==9&&pan1[x][y]!=2){printf("sorry game over!!!!\n游戏结束");m=0;}
}class Game
{
public:void init();void start();
private:Map map;
};void Game::start()
{int i,j,b,n=0,k=0;for(i=1;i<=9;i++) //打印基本界面 for(j=1;j<=9;j++){a[i][j]='*';}srand(time(NULL));//产生随机数并布雷 while(k<=9){i=(int)(rand()%7+1);j=(int)(rand()%7+1);if(pan[i][j]==0){pan[i][j]=9;k++;}}map.scanbomb();while(m==1){for(i=0;i<=10;i++)//即时显示每次操作后的界面 for(j=0;j<10;j++){if(j%10==0)printf("\n");printf("%c  ",a[i][j]);}printf("\n");printf("请输入序号:");scanf("%d",&b);printf("\n");if(b==1)//挖雷 {map.Get_Point();if(pan1[map.Get_x()][map.Get_y()]==0&&pan1[map.Get_x()][map.Get_y()]!=2){  map.draw(map.Get_x(),map.Get_y());}}if(b==2)//退出 m=0;if(b==3)//标记 {map.Get_Point();if(pan1[map.Get_x()][map.Get_y()]==0){pan1[map.Get_x()][map.Get_y()]=2; a[map.Get_x()][map.Get_y()]='!';}}if(b==4)//取消标记 {map.Get_Point();if(pan1[map.Get_x()][map.Get_y()]==2){pan1[map.Get_x()][map.Get_y()]=0; a[map.Get_x()][map.Get_y()]='*';}}map.saomiao();}
}void Game::init()
{cout<<"\n****************************************************\n"<<endl;cout<<"                   欢迎进入扫雷"<<endl;cout<<"\n****************************************************\n"<<endl;cout<<"规则:\n输入序号1挖雷\n输入序号2退出\n输入序号3对雷进行标记\n输入序号4取消标\n"<<endl;cout<<"玩法:\n先输入序号表明要挖雷还是要标记\n之后你需要输入一个坐标如a b(a表示行  b表示列)则指定位置会被挖开或者标记\n"<<endl;
}int main()
{Game game;game.init();game.start();return 0;
}

这篇关于扫雷游戏C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025180

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给