快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

c语言扫雷递归展开函数 扫雷数组c语言最简单代码

C语言编一个9*9的扫雷游戏程序,跟网上那些不一样,求大神给个正确的答案

太复杂,我分成几部分试着做一下

专注于为中小企业提供成都网站设计、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业合阳免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

首先是画棋盘,定义两个二维数组来表示每个棋子的状态和棋子周围的雷数,用于显示。

//画棋盘 a表示棋子是否已被翻开,b表示附近的雷数

bool MakeMap(bool a[9][9],int b[9][9])

{

int i=0,j=0;

for(i=0;i9;i++)

{

for(j=0;j9;j++)

{

if(a[i][j]) printf("%d ",b[i][j]);

else printf("# ");

}

printf("\n");

}

return true;

}

C语言扫雷点到空白地方一次打开一大片的算法求解

能把代码再多给点吗?

那8个递归其实可以用两个for来做的

void ClickBlank(int x, int y) {

int i, j;

if (isBlank(x, y)) {

ShowAroundBlock(x, y);

for (i = -1; i = 1; i++) {

for (j = -1; j = 1; j++) {

if (i == 0  j == 0) continue;

ClickBlank(x + i, y + j);

}

}

}

}

而且你应该设访问标记,已经ClickBlank的格子不应再调用ClickBlank

c++ 扫雷 点一个开一片的递归函数

//俺学数据结构写的..

#include iostream.h

#include stdlib.h

#include time.h

#include iomanip.h

#define m 12 //范围为[m-2][n-2]

#define n 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;

show(m,n);

cout"game over"endl;

break;

}

search(row,col);

system("cls");

show(m,n);

if(flag==1){

cout"zhongdan"endl;

break;

}

if(win()){

cout"youwin"endl;

break;

}

cout"请输入横,纵坐标"endl;

while(1){

cinrowcol;

if(mark[row][col]==0)

break;

cout"坐标错误,请从新输入"endl;

}

if(a[row][col]==-15){

system("cls");

flag=1;

show(m,n);

cout"game over"endl;

break;

}

}

}

void main(){

playsweep();

}


名称栏目:c语言扫雷递归展开函数 扫雷数组c语言最简单代码
文章路径:http://6mz.cn/article/ddoicde.html

其他资讯