<!--
/***   JSオセロ-COM  Ver 1.00  By ルーチェ   ***/
/***   Copyright (C) 2001 ruche.            ***/
/***   add fix by hzk 2007                  ***/


//各種変数
flag = true;
player = 1;
pnlnum = new Array(4, 2, 2);
pnlcol = new Array('green', 'black', 'white');

//状態保持配列変数設定
// 0 => 無し, 1 => 黒, -1 => 白
stat = new Array(7);
for (i = 0; i <= 7; i++) {
	stat[i] = new Array(0, 0, 0, 0, 0, 0, 0, 0);
}
stat[3][3] = 1;
stat[3][4] = 2;
stat[4][3] = 2;
stat[4][4] = 1;

//クリック時処理
function rev(X, Y)
{
	if (!flag || stat[X][Y] != 0) { return; }
	flag = false;

	num = revnum(X, Y, true);
	if (num == 0) {
		flag = true;
		return;
	}

	stat[X][Y] = player;
	document.all('p' + X + Y).style.color = pnlcol[player];

	pnlnum[0]++;
	pnlnum[player] += 1 + num;
	pnlnum[(player == 1) ? 2 : 1] -= num;

	if (pnlnum[0] >= 64 || pnlnum[1] <= 0 || pnlnum[2] <= 0) {
		winner = (pnlnum[1] > pnlnum[2]) ? '黒の勝ち！' : '白の勝ち！';
		if (pnlnum[1] == pnlnum[2]) { winner = '引き分け'; }
		alert('黒が' + pnlnum[1] + '枚\n白が' + pnlnum[2] + '枚\nの' + Math.abs(pnlnum[1]-pnlnum[2]) + '枚差によって、' + winner);
if (pnlnum[1]-pnlnum[2] >0){
//  alert('万歳！');
  rank();
} 
		return;
	}

	player = (player == 1) ? 2 : 1;
	if (pass()) {
		player = (player == 1) ? 2 : 1;

		if (pass()) {
			alert('黒も白も置く場所が無いので試合終了です');

			winner = (pnlnum[1] > pnlnum[2]) ? '黒の勝ち！' : '白の勝ち！';
			if (pnlnum[1] == pnlnum[2]) { winner = '引き分け'; }
			alert('黒が' + pnlnum[1] + '枚\n白が' + pnlnum[2] + '枚\nの' + Math.abs(pnlnum[1]-pnlnum[2]) + '枚差によって、' + winner);
if (pnlnum[1]-pnlnum[2] >0){
//  alert('万歳！！');
  rank();
} 			return;
		}

		alert(((player == 1) ? '白' : '黒') + 'は置く場所が無いのでパスします');
	}

	document.all("navi").innerHTML = (player == 1) ? '黒' : '白';
	document.all("navi").style.color = pnlcol[player];

	if (player == 2) { complay(); }
	flag = true;
}

//反転数取得、及び反転処理
function revnum(cx, cy, revflag)
{
	num = 0;

	num += pnlrev(cx, cy,  0, -1, revflag);
	num += pnlrev(cx, cy,  1, -1, revflag);
	num += pnlrev(cx, cy,  1,  0, revflag);
	num += pnlrev(cx, cy,  1,  1, revflag);
	num += pnlrev(cx, cy,  0,  1, revflag);
	num += pnlrev(cx, cy, -1,  1, revflag);
	num += pnlrev(cx, cy, -1,  0, revflag);
	num += pnlrev(cx, cy, -1, -1, revflag);

	return num;
}

//パネル反転
function pnlrev(x, y, sx, sy, revflag)
{
	n = 0;

	while (1) {
		x += sx; y += sy;

		if (x < 0 || 7 < x || y < 0 || 7 < y || stat[x][y] == 0) { return 0; }
		if (stat[x][y] == player) {
			if (n == 0) { return 0; }
			if (revflag) {
				for (i = 1; i <= n; i++) {
					x -= sx; y -= sy;
					stat[x][y] = player;
					document.all('p' + x + y).style.color = pnlcol[player];
				}
			}
			return n;
		}

		n++;
	}
}

//パス判定
function pass()
{
	for (i = 0; i <= 7; i++) {
		for (j = 0; j <= 7; j++) {
			if (stat[i][j] == 0) {
				if (revnum(i, j, false) > 0) { return false; }
			}
		}
	}

	return true;
}

//コンピュータ時間稼ぎ
function complay()
{
	// 0.5 〜 1.5 秒
	setTimeout("comgo()", 500 + Math.floor(Math.random() * 1000));
}

//コンピュータプレイ
function comgo()
{
	getnum = 0;
	getX = new Array();
	getY = new Array();
	XYnum = 0;

	//角(最優先)
	if (stat[0][0] == 0 && revnum(0, 0, false) > getnum) {
		getnum = revnum(0, 0, false);
		getX[0] = 0; getY[0] = 0;
		XYnum = 1;
	}
	if (stat[7][0] == 0 && revnum(7, 0, false) > getnum) {
		getnum = revnum(7, 0, false);
		getX[0] = 7; getY[0] = 0;
		XYnum = 1;
	}
	if (stat[0][7] == 0 && revnum(0, 7, false) > getnum) {
		getnum = revnum(0, 7, false);
		getX[0] = 0; getY[0] = 7;
		XYnum = 1;
	}
	if (stat[7][7] == 0 && revnum(7, 7, false) > getnum) {
		getnum = revnum(7, 7, false);
		getX[0] = 7; getY[0] = 7;
		XYnum = 1;
	}

	//角以外(最も多く取れる中からランダム)
	if (getnum == 0) {
		for (i = 0; i <= 7; i++) {
			for (j = 0; j <= 7; j++) {
				if (stat[i][j] == 0) {
					if (revnum(i, j, false) > getnum) {
						getnum = revnum(i, j, false);
						getX = new Array(); getX[0] = i;
						getY = new Array(); getY[0] = j;
						XYnum = 1;
					}
					else if (revnum(i, j, false) == getnum) {
						getX[XYnum] = i;
						getY[XYnum] = j;
						XYnum++;
					}
				}
			}
		}
	}

	setnum = Math.floor(Math.random() * XYnum);
	flag = true;
	rev(getX[setnum], getY[setnum]);
}
//-->