public class Kyokumen{
	private int [][][] masu = new int[8][8][3];
	private int turn;
	public Kyokumen(){
		stoneInit();
		turnInit();
	}
	public void stoneInit(){
		for(int i = 0;i < 8;i++){
			for(int j = 0;j < 8;j++){
				masu[i][j][0] = 0;
				if(i == 3 && j == 3 || i == 4 && j == 4){
					masu[i][j][0] = 1;
				}
				if(i == 3 && j == 4 || i == 4 && j == 3){
					masu[i][j][0] = 2;
				}
				masu[i][j][1] = 0;
			}
		}
	}
	public void turnInit(){
		turn = 1;
	}
	public Kyokumen(int [][][] masu,int turn){
		this.masu = masu;
		this.turn = turn;
	}
	public void placeSyori(int i,int j){
		masu[i][j][0] = turn;
		for(int m = 0;m < 8;m++){
			for(int n = 0;n < 8;n++){
				masu[m][n][1] = 0;
			}
		}
		masu[i][j][1] = 1;
	}
	public int [] placeAbleCheck(int px,int py,int dx,int dy,int t){
		int [] check = new int[2];
		check[0] = check[1] = 0;
		int i = px + dx;
		int j = py + dy;
		if(i >= 0 && i < 8 && j >= 0 && j < 8 && masu[i][j][0] == 3 - t){
			i = i + dx;
			j = j + dy;
			while(i >= 0 && i < 8 && j >= 0 && j < 8 && masu[i][j][0] == 3 - t){
				i = i + dx;
				j = j + dy;
			}
			if(i >= 0 && i < 8 && j >= 0 && j < 8 && masu[i][j][0] == t){
				check[0] = 1;
				check[1] = (i - dx) * 10 + (j - dy);
			}
		}
		return check;
	}
	public boolean noPlaceCheck(int t){
		for(int i = 0;i < 8;i++){
			for(int j = 0;j < 8;j++){
				if(masu[i][j][0] == 0){
					for(int k = 0;k < 9;k++){
						if(k != 4){
							int [] check = placeAbleCheck(i,j,k / 3 - 1,k % 3 - 1,t);
							if(check[0] == 1){
								return false;
							}
						}
					}
				}
			}
		}
		return true;
	}
	public void henkan(int siten,int syuten,int dx,int dy,int turn){
		int fx = siten / 10;
		int fy = siten % 10;
		int tx = syuten / 10;
		int ty = syuten % 10;
		int i = fx + dx;
		int j = fy + dy;
		while(i != tx + dx || j != ty + dy){
			masu[i][j][0] = turn;
			i = i + dx;
			j = j + dy;
		}
	}
	public int stoneCount(int turn){
		int cnt = 0;
		for(int j = 0;j < 8;j++){
			for(int k = 0;k < 8;k++){
				if(masu[j][k][0] == (turn + 1)){
					cnt++;
				}
			}
		}
		return cnt;
	}
	public boolean masuPlaceCheck(int x,int y,int t){
		if(masu[x][y][0] == 0){
			for(int k = 0;k < 9;k++){
				if(k != 4){
					int [] check = placeAbleCheck(x,y,k / 3 - 1,k % 3 - 1,t);
					if(check[0] == 1){
						return true;
					}
				}
			}
		}
		return false;
	}
	public int getTurn(){
		return turn;
	}
	public void setTurn(int turn){
		this.turn = turn;
	}
	public int getothersideTurn(){
		return 3 - turn;
	}
	public void othersidesetTurn(){
		turn = getothersideTurn();
	}
	public int specialgetMasu(int x,int y,int kind){
		return masu[x][y][kind];
	}
	public void specialsetMasu(int x,int y,int kind,int atai){
		masu[x][y][kind] = atai;
	}
}