扫雷——关于展开空格的算法

关于展开空格的算法

第一种:
方法的相互调用
达到递归的效果

//打开盒子
	public  boolean  click(int x,int y) {
	if(grid[x][y].isType()) {
		//盒子类已经打开
		return true;
	}else {
		if(grid[x][y].getContent()=='*') {
			//是雷直接显示
			show();
			return false;
		}else {
			if(grid[x][y].getContent()==' ') {
				//是空格
				grid[x][y].setType(true);
					clickBlank(x,y);
					return true;
			}else {
				//是数字
				grid[x][y].setType(true);
				return true;
			}
		}		
	}
}
//判断空白的格子
public void  clickBlank(int x,int y) {
	if(x-1>-1&&x-1<9&&grid[x-1][y].getContent()!='*') {
		click(x-1,y);
	}
	if(x+1>-1&&x+1<9&&grid[x+1][y].getContent()!='*') {
		click(x+1,y);
	}
	if(y-1>-1&&y-1<9&&grid[x][y-1].getContent()!='*') {
		click(x,y-1);
	}
	if(y+1>-1&&y+1<9&&grid[x][y+1].getContent()!='*') {
		click(x,y+1);
	}
}

第二种方法:
递归调用。达到遍历效果。将相连的空格全部展示
//打开盒子方法

public  void   click(int x,int y) {
	if(!grid[x][y].isType()) {
		if(grid[x][y].getContent()=='*'){
			grid[x][y].setType(true);
			//雷的处理
		}else {if(grid[x][y].getContent()==' '){
			grid[x][y].setType(true);
			if(x-1>-1&&x-1<9&&grid[x-1][y].getContent()!='*') {
				click(x-1,y);		
			}
			if(x+1>-1&&x+1<9&&grid[x+1][y].getContent()!='*') {
				click(x+1,y);
			}
			if(y-1>-1&&y-1<9&&grid[x][y-1].getContent()!='*') {
				click(x,y-1);
			}
			if(y+1>-1&&y+1<9&&grid[x][y+1].getContent()!='*') {
				click(x,y+1);
			}			
		}else {
			grid[x][y].setType(true);
		}
	}}
}

你可能感兴趣的