codice:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Toledo JavaScript Chess Game</title>
<style type="text/css">
#chessboard {
border-collapse: collapse;
width: 600px;
height: 600px;
border: 0;
margin-left: auto;
margin-right: auto;
}
#chessboard tr td.blackCell, #chessboard tr td.whiteCell {
width: 11%;
height: 11%;
font-size: 52px;
line-height: 42px;
text-align: center;
font-family: Times New Roman;
}
#chessboard tr th.topHeader {
width: 11%;
height: 6%;
}
#chessboard tr th.leftHeader {
width: 6%;
height: 11%;
}
.blackCell {
background-color: #cccccc;
}
#angle, #promotion {
height: 6%;
}
#promotion {
padding-left: 24px;
}
#angle, #rightBorder {
width: 6%;
}
#chessboard tr th, .angle, #rightBorder, #promotion{
overflow: visible;
background-color: #ce5c00;
color: #f9ac6d;
font-family: Arial;
font-size: 100%;
}
</style>
</head>
<body>
<script type="text/javascript">
// (c)2009 Oscar Toledo G.
var B, i, y, u, b, I = [], G = 120, x = 10, z = 15, M = 1e4, l = [5, 3, 4, 6, 2, 4, 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 13, 11, 12, 14, 10, 12, 11, 13, 0, 99, 0, 306, 297, 495, 846, - 1, 0, 1, 2, 2, 1, 0, - 1, - 1, 1, - 10, 10, - 11, - 9, 9, 11, 10, 20, - 9, - 11, - 10, - 20, - 21, - 19, - 12, - 8, 8, 12, 19, 21];
function X(w, c, h, e, S, s) {
var t, o, L, E, d, O = e, N =- M * M, K = 78 - h << x, p, g, n, m, A, q, r, C, J, a = y ?- x : x;
y ^= 8;
G++;
d = w || s && s >= h && X(0, 0, 0, 21, 0, 0) > M;
do {
if (o = I[p = O]) {
q = o & z^y;
if (q < 7) {
A = q--& 2 ? 8 : 4;
C = o - 9 & z ? [53, 47, 61, 51, 47, 47][q] : 57;
do {
r = I[p += l[C]];
if (!w | p === w) {
g = q | p + a - S ? 0 : S;
if (!r & (!!q | A < 3 ||!!g) || (r + 1 & z^y) > 9 && q | A > 2) {
if (m =!(r - 2 & 7)) { return(y ^= 8, I[G--] = O, K); }
J = n = o & z;
E = I[p - a] & z;
t = q | E - 7 ? n : (n += 2, 6^y);
while (n <= t) {
L = r ? l[r & 7 | 32] - h - q : 0;
if (s) { L += (1 - q ? l[(p - p % x) / x + 37] - l[(O - O % x) / x + 37] + l[p % x + 38] * (q ? 1 : 2) - l[O % x + 38] + (o & 16) / 2 : !!m * 9) + (!q?!(I[p - 1]^n) + !(I[p + 1]^n) + l[n & 7 | 32] - 99 + !!g * 99 + (A < 2) : 0) + !(E^y^9); }
if (s > h || 1 < s & s === h && L > z | d) {
I[p] = n, I[O] = m ? (I[g] = I[m], I[m] = 0) : g ? I[g] = 0 : 0;
L -= X(s > h | d ? 0 : p, L - N, h + 1, I[G + 1], J = q | A > 1 ? 0 : p, s);
if (!(h || s - 1 | B - O | i - n | p - b | L <- M)) { return(G--, u = J); }
J = q - 1 | A < 7 || m ||!s | d | r | o < z || X(0, 0, 0, 21, 0, 0) > M;
I[O] = o;
I[p] = r;
m ? (I[m] = I[g], I[g] = 0) : g ? I[g] = 9^y : 0;
}
if (L > N) {
I[G] = O;
if (s > 1) {
if (h && c - L < 0) { return(y ^= 8, G--, L); }
if (!h) { i = n, B = O, b = p; }
}
N = L;
}
n += J || (g = p, m = p < O ? g - 3 : g + 2, I[m] < z | I[m + O - p] || I[p += p - O]) ? 1 : 0;
}
}
}
}
while (!r & q > 2 || (p = O, q | A > 2 | o > z & !r && ++C * --A));
}
}
}
while (++O > 98 ? O = 20 : e - O);
return(y ^= 8, G--, N + M * M && N >- K + 1924 | d ? N : 0);
}
B = i = y = u = 0;
while (B++ < 120) { I[B - 1] = B % x ? B / x % x < 2 | B % x < 2 ? 7 : B / x & 4 ? 0 : l[i++] | 16 : 7; }
a = "<table id=\"chessboard\"><tbody><tr><td class=\"angle\"><\/td><th class=\"topHeader\">a<\/th><th class=\"topHeader\">b<\/th><th class=\"topHeader\">c<\/th><th class=\"topHeader\">d<\/th><th class=\"topHeader\">e<\/th><th class=\"topHeader\">f<\/th><th class=\"topHeader\">g<\/th><th class=\"topHeader\">h<\/th><td id=\"rightBorder\" rowspan=\"9\"><\/th><\/tr>";
for (B = 0; B < 8; B++) { for (a += "<tr><th class=\"leftHeader\">" + String(B + 1) + "<\/th>", i = 21; i < 29; i++) { a += "<td onclick=Y(" + (B * x + i) + ") id=o" + (B * x + i) + " class=\"" + (i + B & 1 ? "whiteCell" : "blackCell") + "\">"; } }
a += "<tr><td id=\"promotion\" colspan=\"9\">Promote to: <select id=\"t\"><option value=\"Q\">Queen<\/option><option value=\"R\">Rook<\/option><option value=\"B\">Bishop<\/option><option value=\"N\">Knight<\/option><\/select><\/td><td class=\"angle\"> <\/td><\/tr><\/tbody><\/table>"
document.write(a);
function W() {
var pieceId;
for (p = 21; p < 99; p += p % x - 8 ? 1 : 3) { pieceId = (I[p] & z) - 1; document.getElementById("o" + p).innerHTML = I[p] === 0 ? "" : "b" + "231822212019171216151413".substr((parseInt(pieceId/8)*6+pieceId%8)*2, 2) + ";"; }
B = 0;
}
W();
function Z(s, y) { document.getElementById("o" + s).style.backgroundColor = y ? "#4cff4c" : ""; }
function Y(s) {
i = (I[s]^y) & z;
if (i > 8) {
if (B) { Z(B, 0); }
Z(B = s, 1);
}
else if (B && i < 9) {
Z(b = s, 1);
i = I[B] & z;
if ((i & 7) === 1 & (b < 29 | b > 90)) { i = 14 - document.getElementById("t").selectedIndex^y; }
X(0, 0, 0, 21, u, 1);
Z(B, 0);
Z(b, 0);
W();
if (y) { window.setTimeout("X(0,0,0,21,u,2/*ply*/),X(0,0,0,21,u,1),W()", 250); }
}
}
</script>
If you want to play with black's pieces, click this
<input type="button" value="button" onclick="window.setTimeout('X(0,0,0,21,u,2),X(0,0,0,21,u,1),W()',250);">
to force a move. You will need to click every time after you do a move.</p>
</body>
</html>