c语言递归函数扫雷游戏 c语言源代码( 四 )


if(Mine[i][j].flag==1)/*如果格子有红旗则左键无效*/
continue;
if(Mine[i][j].num!=0)/*如果格子没有处理过*/
{
if(Mine[i][j].num==1)/*鼠标按下的格子是地雷*/
{
MouseOff();
GameOver();/*游戏失败*/
break;
}
else/*鼠标按下的格子不是地雷*/
{
MouseOff();
Num=MineStatistics(i,j);
if(Num==0)/*周围没地雷就用递归算法来显示空白格子*/
ShowWhite(i,j);
else/*按下格子周围有地雷*/
{
sprintf(randmineNUM,"%d",Num);/*输出当前格子周围的雷数*/
setcolor(RED);
outtextxy(195+j*20,95+i*20,randmineNUM);
mineNUM--;
}
MouseOn();
Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/
if(mineNUM1)/*胜利了*/
{
GameWin();
break;
}
}
}
}
}
if(RightPress())/*鼠标右键键盘按下*/
{
MouseGetXY();
if(MouseX190MouseX390MouseY90MouseY290)/*当前鼠标位置在格子范围内*/
{
j=(MouseX-190)/20;/*x坐标*/
i=(MouseY-90)/20;/*y坐标*/
MouseOff();
if(Mine[i][j].flag==0Mine[i][j].num!=0)/*本来没红旗现在显示红旗*/
{
DrawRedflag(i,j);
Mine[i][j].flag=1;
}
else
if(Mine[i][j].flag==1)/*有红旗标志再按右键就红旗消失*/
{
DrawEmpty(i,j,0,8);
Mine[i][j].flag=0;
}
}
MouseOn();
sleep(1);
}
}
}
c++ 扫雷 点一个开一片的递归函数//俺学数据结构写的..
#include iostream.h
#include stdlib.h
#include time.h
#include iomanip.h
#definem 12 //范围为[m-2][n-2]
#definen 12
int a[m][n]={0},count=15;
int mark[m][n]={0};//标记矩阵
int flag=0;//游戏失败时flag 标记为一
void init(){
int k1,k2,count1=0,sum,i,j;
srand(time(0));
while(count1count){// 安放count个炸药
k1=rand()%(m-2)+1;
k2=rand()%(m-2)+1;
if(a[k1][k2]==0){
a[k1][k2]=-15;
count1++;
}
}
for(i=1;im-1;i++){//寻找每个点周围的雷数
for(j=1;jn-1;j++){
sum=0;
if(a[i][j]==0){
for(int i1=-1;i12;i1++)
for(int j1=-1;j12;j1++){
if(a[i+i1][j+j1]==-15)//周围八个格子如果有雷就 加
sum++;
}
a[i][j]=sum;
}
}
}
for(i=0;im;i++)//初始化外围
a[0][i]=-i;
for(i=0;in;i++)
a[i][0]=-i;
}
void show(int row,int col){//显示矩阵
int i,j;
if(flag==0){
for(i=0;icol-1;i++)
coutsetw(4)i;
coutendl;
for(i=1;irow-1;i++){
coutsetw(4)a[0][i];
for(j=1;jcol-1;j++){
if(mark[i][j]==0)
coutsetw(4)'X';
else
coutsetw(4)a[i][j];
}
coutendl;
}
}
if(flag==1){
for(i=0;irow-1;i++){
for(j=0;jcol-1;j++){
if(a[i][j]==-15)
coutsetw(4)'';
else
coutsetw(4)a[i][j];
}
coutendl;
}
}
}
void search(int row,int col){//利用递归求0的位置
if(row0col0rowm-1coln-1){
if(a[row][col]==0mark[row][col]==0){
mark[row][col]=1;
for(int i=-1;i2;i++)
for(int j=-1;j2;j++)
search(row+i,col+j);
}
else
if(a[row][col]0mark[row][col]==0)
mark[row][col]=1;
else
if(a[row][col]==-15)
return;
}
}
int win(){
for(int i=1;im-1;i++)
for(int j=1;jm-1;j++){
if(a[i][j]!=-15mark[i][j]==0)
return 0;
}
return 1;
}
void playsweep(){
init();
cout"ok1"endl;
show(m,n);
int row,col;
cout"请输入横,纵坐标"endl;
cinrowcol;
while(1){
if(a[row][col]==-15){
system("cls");
flag=1;