扫雷3.0(不喜勿喷)
2026-10-02 16:53:31
发布于:湖北
上期内容:扫雷游戏2.0
此次作者增加了双人模式
如有问题可以跟作者说

下期预告:
图形化raylib扫雷游戏。
最好先下好raylib动态库,
作者主要推荐下小熊猫DEV-C++,因为它自带。
#include<bits/stdc++.h>
#include<Windows.h>
#include<ctime>
#include <iomanip>
using namespace std;
string ac1="如果你开出了空格,那么游戏继续";
string ac2="如果你开出了雷,那么游戏结束";
string ac3="如果你开出了数字n,表示它的周围有n个雷,游戏继续(当它周围一个雷都没有时,则表示为空格)";
string ac4="如果你开出了空格,表示它的周围有0个雷,游戏继续(如果你设置为连锁为开时,那么当你开出一个空格时,周围8个格子中的空格会连锁翻开,如果你设置为连锁为关时,就只会翻开一个格子)";
string ko=" ";
string ok=" ";
string w[10][10];
string x[10][10];
bool qw=0;
void setColor(int foreColor) {
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h, foreColor);
}
void ch(){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
w[i][j]="■";
}
}
}
void chx(){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
x[i][j]=" ";
}
}
}
void ch1(){
cout<<ko<<" 1 2 3 4 5 6 7 8 9\n";
for(int i=0;i<9;i++){
cout<<ko<<" "<<i+1;
for(int j=0;j<9;j++){
cout<<w[i][j]<<" ";
}
cout<<endl;
}
}
void shx(){
cout<<ko<<" 1 2 3 4 5 6 7 8 9\n";
for(int i=0;i<9;i++){
cout<<ko<<i+1;
for(int j=0;j<9;j++){
cout<<x[i][j]<<" ";
}
cout<<endl;
}
}
bool chess(){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(w[i][j]=="■"&&x[i][j]!="雷"){
return 1;
}
}
}return 0;
}
void expand(int ti,int tj){
if(ti<0||ti>=9||tj<0||tj>=9)return;
if(w[ti][tj]!="■")return;
if(x[ti][tj]=="雷")return;
w[ti][tj]=x[ti][tj];
if(x[ti][tj]==" "){
expand(ti-1,tj-1);
expand(ti-1,tj);
expand(ti-1,tj+1);
expand(ti,tj-1);
expand(ti,tj+1);
expand(ti+1,tj-1);
expand(ti+1,tj);
expand(ti+1,tj+1);
}
}
void singleGame(){
while(true){
ch();
chx();
system("cls");
cout<<ko<<"请输入地雷个数(1<=地雷个数<=80)\n";
cout<<ko;
int d;
cin>>d;
if(d>=1&&d<=80){
for(int i=0;i<d;i++){
int y=rand()%9;
int z=rand()%9;
if(x[y][z]!="雷"){
x[y][z]="雷";
}else{
i--;
}
}
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
int pp=0;
if(x[i][j]=="雷"){continue;}
if(j-1 >=0 && x[i][j-1]=="雷") pp++;
if(j+1 <9 && x[i][j+1]=="雷") pp++;
if(i-1 >=0 && x[i-1][j]=="雷") pp++;
if(i+1 <9 && x[i+1][j]=="雷") pp++;
if(i-1>=0 && j-1>=0 && x[i-1][j-1]=="雷") pp++;
if(i-1>=0 && j+1<9 && x[i-1][j+1]=="雷") pp++;
if(i+1<9 && j-1>=0 && x[i+1][j-1]=="雷") pp++;
if(i+1<9 && j+1<9 && x[i+1][j+1]=="雷") pp++;
if(pp!=0){
x[i][j]=char(pp+48);
x[i][j]=" "+x[i][j];}
else{
x[i][j]=" ";
}
pp=0;
}
}
system("cls");
break;
}
else{
system("cls");
cout<<ko<<" 选择无效!";
Sleep(3000);
continue;
}
}
ch1();
int ww=0,zz=0,yyy=0;
while(true){
int aa,bb;
cout<<ko<<" 请输入行数:";
cin>>aa;
cout<<endl;
cout<<ko<<" 请输入列数:";
cin>>bb;
if(aa<=0||aa>=10||bb<=0||bb>=10){
system("cls");
cout<<ko<<" 选择无效!\n";
Sleep(3000);
system("cls");
ch1();
continue;
}
system("cls");
string e1;
while(true){
cout<<ko<<" 1.翻开格子\n";
cout<<ko<<" 2.标记格子\n";
cout<<ko;
cin>>e1;
if(e1=="1"||e1=="2"){break;}
else{
cout<<ko<<" 选择无效!";
Sleep(3000);
system("cls");
ch1();
}
}
if(e1=="1"){
if(w[aa-1][bb-1]!="■"&&w[aa-1][bb-1]!="标"){
system("cls");
cout<<ko<<" 选择无效!";
Sleep(3000);
system("cls");
ch1();
continue;
}else{
system("cls");
if(x[aa-1][bb-1]==" "){
cout<<ko<<" 你中了"<<"空格\n";
if (qw==1){
expand(aa-1,bb-1);
}
w[aa-1][bb-1]=" ";
ch1();
}else if(x[aa-1][bb-1]=="雷"){
cout<<ko<<" 你中了"<<"雷\n";
cout<<ko<<" 你输了!\n";
Sleep(3000);
system("cls");
while(true){
cout<<ko<<"是否查看本局阵容(Y/N)\n";
cout<<ko;
string ss;
cin>>ss;
if(ss=="Y"){
while(true){
shx();
cout<<ko<<"1.返回\n";
string tt;
cout<<ko;
cin>>tt;
if(tt=="1") {
ww=1;
break;
}else{
system("cls");
cout<<ko<<"选择无效\n";
Sleep(3000);
system("cls");
continue;
}}
if(ww==1||zz==1||yyy==1){
break;
}}
else if(ss=="N"){
zz=1;
system("cls");
break;
}
else{
system("cls");
cout<<ko<<"选择无效!";
Sleep(3000);
system("cls");
continue;
}
}
}else{
w[aa-1][bb-1]=x[aa-1][bb-1];
ch1();
}
}
}
else if(e1=="2"&&w[aa-1][bb-1]=="■"){
system("cls");
w[aa-1][bb-1]="标";
ch1();
}
else{
system("cls");
cout<<ko<<" 选择无效!";
Sleep(3000);
ch1();
continue;
}
if(ww==1||zz==1||yyy==1){
break;
}
if(!chess()){
system("cls");
cout<<ko<<" 玩家胜利!\n";
Sleep(5000);
system("cls");
break;
}
}
}
void twoPlayerGame(){
while(true){
ch();
chx();
system("cls");
cout<<ko<<"请输入地雷个数(1<=地雷个数<=80)\n";
cout<<ko;
int d;
cin>>d;
if(d>=1&&d<=80){
for(int i=0;i<d;i++){
int y=rand()%9;
int z=rand()%9;
if(x[y][z]!="雷"){
x[y][z]="雷";
}else{
i--;
}
}
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
int pp=0;
if(x[i][j]=="雷"){continue;}
if(j-1 >=0 && x[i][j-1]=="雷") pp++;
if(j+1 <9 && x[i][j+1]=="雷") pp++;
if(i-1 >=0 && x[i-1][j]=="雷") pp++;
if(i+1 <9 && x[i+1][j]=="雷") pp++;
if(i-1>=0 && j-1>=0 && x[i-1][j-1]=="雷") pp++;
if(i-1>=0 && j+1<9 && x[i-1][j+1]=="雷") pp++;
if(i+1<9 && j-1>=0 && x[i+1][j-1]=="雷") pp++;
if(i+1<9 && j+1<9 && x[i+1][j+1]=="雷") pp++;
if(pp!=0){
x[i][j]=char(pp+48);
x[i][j]=" "+x[i][j];
}else{
x[i][j]=" ";
}
pp=0;
}
}
system("cls");
break;
}
else{
system("cls");
cout<<ko<<" 选择无效!";
Sleep(3000);
continue;
}
}
int score1=0,score2=0;
int turn=1;
ch1();
while(true){
cout<<ko;
if(turn==1){
cout<<"=====玩家1回合=====";
}else{
cout<<"=====玩家2回合=====";
}
cout<<endl;
cout<<ko<<"玩家1得分:"<<score1<<" 玩家2得分:"<<score2<<endl;
int aa,bb;
cout<<ko<<" 请输入行数:";
cin>>aa;
cout<<endl;
cout<<ko<<" 请输入列数:";
cin>>bb;
if(aa<=0||aa>=10||bb<=0||bb>=10){
system("cls");
cout<<ko<<" 选择无效!\n";
Sleep(3000);
system("cls");
ch1();
continue;
}
system("cls");
string e1;
while(true){
cout<<ko<<" 1.翻开格子\n";
cout<<ko<<" 2.标记格子\n";
cout<<ko;
cin>>e1;
if(e1=="1"||e1=="2"){break;}
else{
cout<<ko<<" 选择无效!";
Sleep(3000);
system("cls");
ch1();
}
}
if(e1=="1"){
if(w[aa-1][bb-1]!="■"&&w[aa-1][bb-1]!="标"){
system("cls");
cout<<ko<<" 选择无效!";
Sleep(3000);
system("cls");
ch1();
continue;
}else{
system("cls");
if(x[aa-1][bb-1]=="雷"){
cout<<ko<<" 你中了"<<"雷\n";
cout<<ko<<" 玩家"<<turn<<"踩雷输掉!\n";
Sleep(3000);
system("cls");
if(turn==1){
cout<<ko<<" 玩家2获胜!\n";
}else{
cout<<ko<<" 玩家1获胜!\n";
}
Sleep(3000);
system("cls");
while(true){
cout<<ko<<"是否查看本局阵容(Y/N)\n";
cout<<ko;
string ss;
cin>>ss;
if(ss=="Y"){
while(true){
shx();
cout<<ko<<"1.返回\n";
string tt;
cout<<ko;
cin>>tt;
if(tt=="1") {
return;
}else{
system("cls");
cout<<ko<<"选择无效\n";
Sleep(3000);
system("cls");
continue;
}
}
}
else if(ss=="N"){
system("cls");
return;
}
else{
system("cls");
cout<<ko<<"选择无效!";
Sleep(3000);
system("cls");
continue;
}
}
}else{
if(qw==1){
expand(aa-1,bb-1);
}else{
w[aa-1][bb-1]=x[aa-1][bb-1];
}
if(x[aa-1][bb-1]!=" "){
if(turn==1) score1++;
else score2++;
}
ch1();
}
}
}
else if(e1=="2"&&w[aa-1][bb-1]=="■"){
system("cls");
w[aa-1][bb-1]="标";
ch1();
}
else{
system("cls");
cout<<ko<<" 选择无效!";
Sleep(3000);
ch1();
continue;
}
if(!chess()){
system("cls");
shx();
cout<<endl;
if(score1>score2){
cout<<ko<<" 全部格子翻开!玩家1胜利!\n";
}else if(score2>score1){
cout<<ko<<" 全部格子翻开!玩家2胜利!\n";
}else{
cout<<ko<<" 全部格子翻开!双方平局!\n";
}
Sleep(5000);
system("cls");
return;
}
turn=3-turn;
}
}
int main(){
srand((unsigned)time(NULL));
system("mode con cols=120 lines=45");
HWND hwnd = GetConsoleWindow();
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
bool WA=0;
while(true){
system("color 04");
for(int j=0;j<50;j++){
for(int i=0;i<11;i++){
cout<<"建议全屏使用! ";
}
cout<<endl;
}
Sleep(5000);
system("cls");
cout<<"+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
cout<<"+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
cout<<"+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
for(int i=0;i<18;i++){
cout<<endl;
}
setColor(6);
cout<<ok<<" ";
setColor(4);
cout<<"=================\n";
setColor(6);
cout<<ok<<" || ==============|| ";
setColor(4);
cout<<" |\n";
setColor(6);
cout<<ok<<" || || ";
setColor(4);
cout<<"+----------------+\n";
setColor(6);
cout<<ok<<" || || ";
setColor(4);
cout<<"| ■ | ■ |\n";
setColor(6);
cout<<ok<<" || || ";
setColor(4);
cout<<"| | |\n";
setColor(6);
cout<<ok<<"====== || ";
setColor(4);
cout<<"| ■ | ■ |\n";
setColor(6);
cout<<ok<<" || || \n";
cout<<ok<<" || ==============|| ";
setColor(4);
cout<<"+================+\n";
setColor(6);
cout<<ok<<" || || ";
setColor(4);
cout<<"| | |\n";
setColor(6);
cout<<ok<<"====== || ";
setColor(4);
cout<<"| | |\n";
setColor(6);
cout<<ok<<" || || ";
setColor(4);
cout<<"|----------------|\n";
setColor(6);
cout<<ok<<" || || ";
setColor(4);
cout<<"| | |\n";
setColor(6);
cout<<ok<<" || || ";
setColor(4);
cout<<"| | |\n";
setColor(6);
cout<<ok<<" || ==============|| ";
setColor(4);
cout<<" +================+\n";
for(int i=0;i<17;i++){
cout<<endl;
}
cout<<"+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
cout<<"+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
cout<<"+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
Sleep(5000);
system("cls");
setColor(4);
cout<<ko<<"原创游戏(仿照原版地雷)\n";
setColor(5);
cout<<ko<<" 作者:幽冥魔帝\n";
setColor(1);
cout<<ko<<" 测试者:。\n";
cout<<ko<<" 测试者:怀孕の星野\n";
cout<<ko<<" 测试者:EWhite\n";
cout<<ko<<" 测试者:立春男明星(关必回)\n";
cout<<ko<<" 测试者:复仇者_L\n";
cout<<ko<<" 测试者:ID:3736031(名字是一个空格)\n";
Sleep(5000);
system("cls");
system("color 07");
string dot[]={"",".","..","..."};
for(int i=1;i<=6;i++){
system("cls");
cout<<ko<<" 加载游戏中"<<dot[i%3+1];
Sleep(400);
}
system("cls");
cout<<endl;
while(true){
cout<<"------------------------------------------------------------------------------------欢迎来到扫雷游戏-------------------------------------------------------------------------------------------\n";
cout<<ko<<" 1.单人模式\n";
cout<<ko<<" 2.双人模式\n";
cout<<ko<<" 3.查看规则\n";
cout<<ko<<" 4.退出游戏\n";
cout<<ko<<" 5.设置\n";
cout<<ko<<" ";
string a;
cin>>a;
if(a=="1"){
singleGame();
}else if(a=="2"){
twoPlayerGame();
}else if(a=="3"){
system("cls");
while(true){
cout<<ko<<" 1.直接输出\n";
cout<<ko<<" 2.逐字输出\n";
cout<<ko<<" 3.返回\n";
cout<<ko;
string AK;
cin>>AK;
if(AK=="1") {
system("cls");
cout<<ko<<ac1<<endl;
cout<<ko<<ac2<<endl;
cout<<ko<<ac3<<endl;
cout<<ac4<<endl;
while(true){
cout<<ko<<" 1.返回";
cout<<endl<<ko<<" ";
string ng;
cin>>ng;
if(ng=="1"){
system("cls");
break;
}else{
system("cls");
cout<<ko<<"选择无效!";
Sleep(3000);
system("cls");
continue;
}
}
}else if(AK=="2") {
system("cls");
cout<<ko;
for(int i=0;i<ac1.size();i++){
cout<<ac1[i];
Sleep(30);
}cout<<endl<<ko;
for(int i=0;i<ac2.size();i++){
cout<<ac2[i];
Sleep(30);
}cout<<endl<<" ";
for(int i=0;i<ac3.size();i++){
cout<<ac3[i];
Sleep(30);
}cout<<endl;
for(int i=0;i<ac4.size();i++){
cout<<ac4[i];
Sleep(30);
}Sleep(10000);
while(true){
cout<<ko<<"1.返回";
cout<<endl<<ko<<" ";
string ng;
cin>>ng;
if(ng=="1"){
system("cls");
break;
}else{
system("cls");
cout<<ko<<"选择无效!";
Sleep(3000);
system("cls");
continue;
}
}
}
else if(AK=="3"){
WA=1;
break;
}else{
system("cls");
cout<<ko<<"选择无效!";
Sleep(3000);
system("cls");
continue;
}
}
}else if(a=="4"){
system("cls");
cout<<ko<<" 退出成功!";
return 0;
}
else if(a=="5"){
system("cls");
while(true) {
cout<<ko<<" 1.连锁(开)\n";
cout<<ko<<" 2.连锁(关)\n";
cout<<ko<<" 3.返回\n";
cout<<ko<<" 连锁效果请在规则查看\n";
cout<<ko<<" ";
string AC;
cin>>AC;
if(AC=="1"){
cout<<ko<<" 开启成功!";
qw=1;
Sleep(3000);
system("cls");
}else if(AC=="2"){
cout<<ko<<" 关闭成功!";
qw=0;
Sleep(3000);
system("cls");
}else if(AC=="3"){
WA=1;
system("cls");
break;
}else{
system("cls");
cout<<ko<<"选择无效!";
Sleep(3000);
system("cls");
}
}
}
else{
system("cls");
cout<<ko<<" 选择无效!\n";
Sleep(1000);
system("cls");
continue;
}
if(WA==0){
while(true){
cout<<ko<<" 是否再来一场(Y/N)\n";
cout<<ko;
string b;
cin>>b;
if(b=="Y"){
system("cls");
break;
}else if(b=="N"){
system("cls");
cout<<ko<<" 感谢参与!\n";
cout<<ko<<" 退出成功!\n";
return 0;
}else{
system("cls");
cout<<ko<<" 输入无效!\n";
Sleep(3000);
system("cls");
continue;
}
}
}
else{
WA=0;
continue;
}
}
}
return 0;
}
全部评论 9
d
4小时前 来自 湖北
0d
5天前 来自 湖北
0d
5天前 来自 湖北
0d
5天前 来自 湖北
0d
5天前 来自 湖北
0小友的游戏很好玩,必须关注
5天前 来自 浙江
0ok
5天前 来自 湖北
0
d
5天前 来自 湖北
0d
6天前 来自 湖北
0d
6天前 来自 湖北
0


























有帮助,赞一个