var Board = new Array(91); var ScoreEBW = new Array(3); var ValidPos = new Array(81); var ValidCnt; var NTurn; var mColor; var GameRec = ''; var timerID = 0; var Vect = [-10, -9, -8, -1, 1, 8, 9, 10]; var PieceChar = ['.', '*', 'O']; var isIE = (navigator.appName == 'Microsoft Internet Explorer'); if (isIE) { document.write(''); } initBoard(); //// function preloadImages() { (new Image()).src = 'PieceF1.gif'; (new Image()).src = 'PieceF2.gif'; (new Image()).src = 'PieceT1.gif'; (new Image()).src = 'PieceT2.gif'; (new Image()).src = 'PieceS2.gif'; } function initBoard() { var i; for (i = 0; i <= 90; ++i) if ((i < 10) || (i > 80) || (i % 9 == 0)) Board[i] = -1; else Board[i] = 0; Board[40] = 2; Board[41] = 1; Board[49] = 1; Board[50] = 2; NTurn = mColor = 1; } function examinePos(n) { var i, p, v; if (Board[n] != 0) return 0; for (i = 0; i < 8; ++i) { v = Vect[i]; p = n + v; if (Board[p] == 3 - NTurn) { do { p += v; } while (Board[p] == 3 - NTurn); if (Board[p] == NTurn) return 1; } } return 0; } function setPieceImg(id, pfx, c) { var img = $('i' + id); img.src = pfx + c + '.gif'; img.alt = PieceChar[c]; } function updateScore(fdisp) { var i, c, e; ScoreEBW[0] = ScoreEBW[1] = ScoreEBW[2] = 0; ValidCnt = 0; for (i = 10; i <= 80; ++i) { c = Board[i]; if (c >= 0) { ValidPos[i] = e = examinePos(i); ValidCnt += e; ++ScoreEBW[c]; if (fdisp) setPieceImg(i, 'ajax/PieceL', c); } } $('score').innerHTML = ScoreEBW[1] + ':' + ScoreEBW[2]; if (ScoreEBW[0] == 60) { $('newbtn').value = 'Change'; } else { $('newbtn').value = 'New Game'; } } function clickSound() { if (isIE) { $('soundeffect').src = 'click.au'; } else { // http://www.boutell.com/newfaq/creating/scriptsound.html // var se = $('soundeffect'); // if (se.Play) // se.Play(); // else if (se.DoPlay) // se.DoPlay(); // http://www.phon.ucl.ac.uk/home/mark/audio/play.htm // $('ranking').innerHTML = ''; } } function performMove(n) { var i, j, p, v, s; for (i = 10; i <= 80; ++i) { if (Board[i] > 0) { s = $('i' + i).src; if (s.indexOf('PieceF') >= 0) { $('i' + i).src = s.replace('PieceF', 'PieceL'); } } } if (n) { for (i = 0; i < 8; ++i) { v = Vect[i]; p = n + v; if (Board[p] == 3 - NTurn) { j = 0; do { ++j; p += v; } while (Board[p] == 3 - NTurn); if (Board[p] == NTurn) { do { p -= v; Board[p] = NTurn; setPieceImg(p, 'ajax/PieceF', NTurn); } while (--j); } } } Board[n] = NTurn; setPieceImg(n, 'ajax/PieceL', NTurn); clickSound(); GameRec += 'abcdefgh'.charAt((n % 9) - 1) + Math.floor(n / 9); } NTurn = 3 - NTurn; } function gameSet() { var my, opp, s; my = ScoreEBW[mColor]; opp = ScoreEBW[3 - mColor]; if ((opp == 0) && (my != 64)) { my = 63; } else if ((my == 0) && (opp != 64)) { opp = 63; } my -= opp; s = '/cgi-bin/user/okuhara/brevrank.pl?s=' + my; if (my >= 63) s += '&t=' + GameRec; // else // s += '&b=' + escape(navigator.userAgent.replace(/\s/g, '+')); ajax.update(s, 'ranking'); } function comResponse(s) { var img; var comMv = parseInt(s); if (isNaN(comMv)) return; if (comMv != 0) { if (ValidPos[comMv] == 0) return; } else { if (ValidCnt != 0) return; } clearTimeout(timerID); timerID = 0; performMove(comMv); updateScore(false); setPieceImg('oturn', 'ajax/PieceS', 0); if ((ScoreEBW[0] == 0) || ((comMv == 0) && (ValidCnt == 0))) { gameSet(); return; } $('passbtn').disabled = (ValidCnt != 0); setPieceImg('mturn', 'ajax/PieceS', NTurn); } function sendRequest() { var s = '/cgi-bin/user/okuhara/breversi.pl?m=0&p='; var i; for (i = 10; i <= 80; ++i) if (i % 9) s += Board[i]; s += '+' + NTurn; timerID = setTimeout("sendRequest()", 15000); // in case of comm error ajax.get(s, comResponse); } function comRequest(n) { $('passbtn').disabled = true; setPieceImg('mturn', 'ajax/PieceS', 0); if ((ScoreEBW[0] == 0) || ((n == 0) && (ValidCnt == 0))) { gameSet(); return; } setPieceImg('oturn', 'ajax/PieceS', NTurn); timerID = setTimeout("sendRequest()", 1000); // sleep 1 sec } function cClick(n) { if ((timerID != 0) || ((n != 0) && (ValidPos[n] == 0))) return; // invalid move performMove(n); updateScore(false); comRequest(n); } function cOver(n) { if ((NTurn == mColor) && (ValidPos[n] != 0)) $('i' + n).src = 'ajax/PieceT' + NTurn + '.gif'; } function cOut(n) { if ((NTurn == mColor) && (ValidPos[n] != 0)) $('i' + n).src = 'ajax/PieceL0.gif'; } function newbtnClick() { if (timerID) { clearTimeout(timerID); timerID = 0; } if (ScoreEBW[0] == 60) { // Change mColor = 2; comRequest(0); } else { // New initBoard(); updateScore(true); setPieceImg('oturn', 'ajax/PieceS', 0); setPieceImg('mturn', 'ajax/PieceS', 1); GameRec = ''; $('ranking').innerHTML = ' '; } }