不用说,先上代码,简单易懂。
#include<windows.h>
#include<iostream>
#include<cstdlib>
#include<conio.h>
#include<ctime>
using namespace std;
const int m=10;char c;
short int dirx[8]{-1,0,1,-1,1,-1,0,1},diry[8]{1,1,1,0,0,-1,-1,-1};//方向
bool dirz[8]{0,1,0,1,1,0,1,0}; //1为横竖 2为斜
char map[m][m];bool flag[m][m],dis[m][m];int zx,zy;int n=m*m;//map 本身 flag 标记 dis 显示
int random(int x){
return rand()%x+0;
}
void print(){ //打印
system("cls");
printf("扫雷游戏\n");
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
if(flag[i][j])
printf("P");
else if(dis[i][j])
printf("%c",map[i][j]);
else printf("#");
if(i==zx&&j==zy)
printf("<");
else printf(" ");
}
printf("\n");
}
printf("w上 s下 a左 d右 空格点击 回车标记雷");
return;
}
void init(){ //初始化
srand(time(0));
for(int i=0;i<m;i++){
for(int j=0;j<m;j++)
map[i][j]='0';
map[i][random(m-1)]='*';
}
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
if(map[i][j]=='0')
for(int z=0;z<8;z++)
if(map[i+dirx[z]][j+diry[z]]=='*')
map[i][j]++;
print();
return;
}
void dfs0(int x,int y){//点到了0(递归)
dis[x][y]=true;n--;
if(map[x][y]=='0')
for(int i=0;i<8;i++)
if( map[x+dirx[i]][y+diry[i]]!='*' && x+dirx[i]>=0 && y+diry[i]>=0 && y+diry[i]<m && x+dirx[i]<m && dis[x+dirx[i]][y+diry[i]]==false){
if(dirz[i])dfs0(x+dirx[i],y+diry[i]);
else if(map[x+dirx[i]][y+diry[i]]!='0'){
dis[x+dirx[i]][y+diry[i]]=true;n--;
}
}
return;
}
void luse(){//输了
system("cls");
printf("你输了!\n");
for(int i=0;i<m;i++){
for(int j=0;j<m;j++)
printf("%c ",map[i][j]);
printf("\n");
}
printf("(点击离开)");
getch();
return;
}
void win(){//赢了
system("cls");
printf("你赢了!\n");
for(int i=0;i<m;i++){
for(int j=0;j<m;j++)
printf("%c ",map[i][j]);
printf("\n");
}
printf("(点击离开)");
getch();
return;
}
int main(){
//system("color 7A");//白色
init();
while(n>0){
c=getch();
if(c=='s'&&zx<m-1)zx++;
else if(c=='w'&&zx>0)zx--;
else if(c=='d'&&zy<m-1)zy++;
else if(c=='a'&&zy>0)zy--;//方向
else if(c==13){//标记
if(flag[zx][zy]){
flag[zx][zy]=false;
if(map[zx][zy]=='*')n++;
}
else {
flag[zx][zy]=true;
if(map[zx][zy]=='*')n--;
}
}
else if(c==' '){//点击
if(map[zx][zy]=='0')
dfs0(zx,zy);
else if(map[zx][zy]=='*'){
luse();
Sleep(100);
return 0;
}
else {
dis[zx][zy]=1;
n--;
}
}
print();
}
win();
return 0;
}