问题标题: “代码分享”模块可以复制了!!!

1
0
已解决
曹灿阳
曹灿阳
初级天翼
初级天翼

皆大欢喜!!!!

太好了!!!!

为了庆祝一下,我发一下我自己编的扫雷(后期会更新):

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <bits/stdc++.h>
#include <windows.h>
#include <fstream>
#define INF 0x3f3f3f3f
using namespace std;
const int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int mmap[40][40],win,lose;
bool vis[40][40];
bool pd(int m,int n){
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(vis[i][j]==0)
				return false;
		}
	}
	return true;
}
bool valid(int x,int y,int m,int n){
	if(x>=1&&x<=m&&y>=1&&y<=n)
		return true;
	return false;
}
void fankai(int x,int y,int m,int n){
	for(int i=0;i<8;i++){
		int nx=x+dir[i][0],ny=y+dir[i][1];
		if(valid(nx,ny,m,n)&&vis[nx][ny]==0){
			vis[nx][ny]=true;
			if(mmap[nx][ny]==0)
				fankai(nx,ny,m,n);
		}
	}
}
bool saolei(int m,int n){
	srand(time(NULL));
	memset(mmap,0,sizeof(mmap));
	memset(vis,0,sizeof(vis));
	system("cls");
	int cnt_b=m*(n+1)/10+1;
	for(int i=1;i<=cnt_b;i++){
		int x=rand()%m+1,y=rand()%n+1;
		mmap[x][y]=INF;
	}
	cnt_b=0;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(mmap[i][j]==INF){
				cnt_b++;
				vis[i][j]=true;
			}
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(mmap[i][j]!=INF){
				for(int k=0;k<8;k++){
					int nx=i+dir[k][0],ny=j+dir[k][1];
					if(valid(nx,ny,m,n)&&mmap[nx][ny]==INF){
						mmap[i][j]++;
					}
				}
			}
		}
	}
	while(!pd(m,n)){
		system("cls");
		for(int i=1;i<=m;i++){
			for(int j=1;j<=n;j++){
				if(vis[i][j]&&mmap[i][j]!=INF){
					cout<<mmap[i][j]<<" ";
				}
				else{
					cout<<"? ";
				}
			}
			cout<<endl;
		}
		Sleep(1000);
		cout<<"请输入你想翻开的格子(行、列从1开始):"; 
		int xa,xb;
		cin>>xa>>xb;
		if(!valid(xa,xb,m,n)){
			cout<<"输入错误,请重新输入!";
			Sleep(1000);
			system("cls");
			continue;
		}
		if(mmap[xa][xb]==INF){
			system("cls");
			cout<<"你踩到地雷了!!!扫雷失败!!!\n这是答案:\n";
			for(int i=1;i<=m;i++){
				for(int j=1;j<=n;j++){
					if(mmap[i][j]==INF){
						cout<<"* ";
					}
					else{
						cout<<mmap[i][j]<<" ";
					}
				}
				cout<<endl;
			}
			system("pause");
			return false;
		}
		vis[xa][xb]=true;
		if(mmap[xa][xb]==0)
			fankai(xa,xb,m,n);
		system("cls");
	}
	system("cls");
	cout<<"你完成了扫雷,真厉害!\n这是答案:\n";
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(mmap[i][j]==INF){
				cout<<"* ";
			}
			else{
				cout<<mmap[i][j]<<" ";
			}
			
		}
		cout<<endl;
	}
	system("pause");
	system("cls");
	return true;
}
void goto_saolei(){
	system("cls");
	int m,n;
	while(1){
		cout<<"请输入你要玩多少行,多少列的扫雷?\n";
		cin>>m>>n;
		if(!(m>=3&&m<=30&&n>=3&&n<=30)){
			cout<<"输入数据不合理,请重新输入!"<<endl;
			Sleep(1000);
			system("cls");
			continue;
		}
		else{
			break;
		}
	}
	if(saolei(m,n))
		win++;
	else
		lose++;
	system("cls");
}
int main(){
	MessageBox(NULL,"欢迎来到益智游戏大全!","欢迎",MB_OK);
	MessageBox(NULL,"输入是核对一下,输入的内容不要有字母或者\n其他奇奇怪怪的东西,否则会让程序崩溃!!!","注意!",MB_OK);
	bool cd;
	cout<<"请问您是否使用上一次的存档???(输入1或0)";
	cin>>cd;
	if(cd){
		cout<<"好的,恢复存档。"<<endl;
		ifstream fin("益智游戏大全.txt");
		fin>>win>>lose;
		fin.close();
		Sleep(1000);
	}
	while(1){
		system("cls");
		cout<<"你要玩什么游戏?\n1. 扫雷\n输入-1退出游戏。\n其余在开发中,敬请期待!";
		int g;
		cin>>g;
		if(g==-1)
			break;
		switch(g){
			case 1:goto_saolei();break;
			default:cout<<"输入错误,请重新输入!";Sleep(1000);continue; 
		}
	}
	system("cls");
	bool bc;
	cout<<"你赢了"<<win<<"局,输了"<<lose<<"局。\n";
	Sleep(2000);
	cout<<"是否保存???(输入1或0)";
	cin>>bc;
	if(bc){
		cout<<"好的,保存后请立即退出。"<<endl;
		ofstream fout("益智游戏大全.txt");
		fout<<win<<" "<<lose;
		fout.close();
		Sleep(1000);
	}
	else{
		system("cls");
		cout<<"再见!!!";
		ofstream fout("益智游戏大全.txt");
		fout<<0<<" "<<0;
		fout.close();
		Sleep(1000);
	}
	return 0;
}

 

曹灿阳在2021-01-30 15:54:24追加了内容

有一点渣渣,会更新的。

曹灿阳在2021-01-30 15:58:07追加了内容

大家可以提意见,有用的话会被我采纳。

目前问题:

O3怎么加???(大家回答)

如何增加“插旗”功能(这个我自己想,不需要你们回答)


0
已采纳
丁博扬
丁博扬
中级天翼
中级天翼

谢谢大佬

更要谢谢每位酷町堂的老师

5
沙宸安
沙宸安
中级启示者
中级启示者

我本来以为没人会理我的。。。

结果就这样不声不响的采纳我了?

哦,真高兴,谢谢各位酷町堂的老师。

沙宸安在2021-01-31 13:47:09追加了内容

诶,等等,为什么没人呢?

沙宸安在2021-01-31 21:47:16追加了内容

1
曹灿阳
曹灿阳
初级天翼
初级天翼

KDWD满足了多少个月多少用户的愿望!!!

1
0
0
0
李子杰
李子杰
资深光能
资深光能

感谢酷町堂的老师们!!!

0
张帆
张帆
中级天翼
中级天翼

你这功能,太少了。

 

 

0
0
0
0
笑红尘
笑红尘
初级守护
初级守护

功能少了一点,总体不错,加油吧!

我要回答