|
<html><head><title>Draughts</title>
<script type="text/javascript">
<!--
pics=new Array('b','f','u','c','uh','ch','uk','ck','ukh','ckh');
pre_load=new Array();
for(i=0; i < pics.length; i++){
pre_load[i]=new Image();
pre_load[i].src=pics[i]+".gif";
}
//-->
</script>
<style type="text/css">
<!--
.box{
width:325px;font-family:Verdana;font-size:12px;text-align:center;letter-spacing:1px;
}
.button{
width:150px;font-family:Verdana;font-size:12px;letter-spacing:1px;
}
//-->
</style>
</head>
<body bgcolor="#004000" marginheight="15" marginwidth="15" topmargin="15" leftmargin="15">
<script type="text/javascript">
<!-- Draughts by Kurt Grigg http://www.btinternet.com/~kurt.grigg/javascript
var dims=40;
var brdh=3;
var brdw=(dims*8)+(brdh*2);
var temp=new Array()
var cntr1=0;
function board(y,x){
cntr1++;
temp[cntr1]=y+x;
legal=(temp[cntr1]%2==0)?1:0;
}
tossed=false;
document.write("<table border='0' cellpadding='0' cellspacing='0'><tr>"
+"<td colspan=3><img src='f.gif' height="+brdh+" width="+brdw+"></td></tr>"
+"<tr><td><img src='f.gif' height="+dims*8+" width="+brdh+"></td><td>");
document.write("<table border='0' cellpadding='0' cellspacing='0'>");
for (y=0; y < 8; y++){
document.write("<tr>");
for (x=0; x < 8; x++){
board(y,x);
document.write("<td align=center width="+dims+" height="+dims+">");
if (legal==1 && y < 3)
document.write("<a href='javascript:pos("+y+","+x+")' onClick='dots(this)'>"
+"<img name=p"+y+""+x+" src='u.gif' width="+dims+" height="+dims+" border=0></a>");
else if (legal==1 && y > 4)
document.write("<a href='javascript:pos("+y+","+x+")' onClick='dots(this)'>"
+"<img name=p"+y+""+x+" src='c.gif' width="+dims+" height="+dims+" border=0></a>");
else if (legal==1)
document.write("<a href='javascript:pos("+y+","+x+")' onClick='dots(this)'>"
+"<img name=p"+y+""+x+" src='f.gif' width="+dims+" height="+dims+" border=0></a>");
else
document.write("<img src='b.gif' width="+dims+" height="+dims+">");
document.write("</td>");
}
document.write("</tr>");
}
document.write("</table>");
document.write("</td><td><img src='f.gif' height="+dims*8+" width="+brdh+"></td></tr><tr>"
+"<td colspan=3><img src='f.gif' height="+brdh+" width="+brdw+"></td></tr>"
+"<tr align=center><td colspan=3><form name='info'>"
+"<input type='text' name='disp' class='box' size='25' value='You are white. Click button.'>"
+"</td></tr><tr align=center><td colspan=3>"
+"<input type='button' name='bttn' class='button' value='Who goes first?'"
+"onClick='(!tossed)?toss():window.location.reload()'></td></tr></table></form>");
//-->
</script>
<script type="text/javascript">
game_over=false;
player_go=false;
player_picked=false;
checking_for_more_jumps=false;
player_jump=false;
curr_piece="";
wait=false;
moved=false;
computer_go=false;
jump_running=false;
var cntr2;
var cntr2a;
function player_reset(){
player_go=false;
player_picked=false;
checking_for_more_jumps=false;
player_jump=false;
wait=false;
document.info.disp.value=(cntr2 < 0 )?"Game over! You win.":"My turn.";
eval(dum);
setTimeout('computer()',1000);
}
function player_stuck(p_m){
dir(p_m);
pnw1=(c1(nw1,"f") && k)?true:false;
pne1=(c1(ne1,"f") && k)?true:false;
pse1=(c1(se1,"f"))?true:false;
psw1=(c1(sw1,"f"))?true:false;
if (c3(nw1,"c")&&c1(nw2,"f")&&k)pnw1=true;
if (c3(ne1,"c")&&c1(ne2,"f")&&k)pne1=true;
if (c3(se1,"c")&&c1(se2,"f"))pse1=true;
if (c3(sw1,"c")&&c1(sw2,"f"))psw1=true;
is_stuck=(!pnw1&&!pne1&&!pse1&&!psw1)?true:false;
return is_stuck;
}
function stuck(){
cntrp=-1;
tmy=new Array();
tmx=new Array();
p_piece=new Array();
for (i=0; i < document.images.length; i++){
who_is_it();
if (t3[i].indexOf("u") != -1){
cntrp++;
tmy[cntrp]=parseInt(t2.charAt(1));
tmx[cntrp]=parseInt(t2.charAt(2));
p_piece[cntrp]=tmy[cntrp]+""+tmx[cntrp];
}
}
plc=0;
pieces_left=new Array();
for (i=0; i < p_piece.length; i++){
player_stuck(p_piece[i]);
pieces_left[i]=is_stuck;
if (!pieces_left[i]) plc++;
}
return plc;
}
function pos(y,x){
if (tossed){
if (computer_go){
document.info.disp.value="Wait! It's my turn.";
}
if (game_over){
document.info.disp.value="Game over! Click button.";
}
if (!game_over&&!computer_go){
if (!wait) document.info.disp.value="";
if (checking_for_more_jumps&&y+""+x == curr_piece){
draw(y+""+x,"u"+(isking(y+""+x)?"k":"")+".gif");
moved=true;
player_reset();
}
else{
player_go=true;
if (!player_picked && !checking_for_more_jumps) first(y+""+x);
else second(y+""+x);
}
}
player_go=false;
}
}
function first(n){
a=n;
if (moved){
document.info.disp.value="Wait! It's my turn.";
player_picked = false;
return false;
}
if (!player_picked&&id(a).indexOf("u") == -1){
document.info.disp.value="Click on one of your pieces.";
player_picked = false;
return false;
}
else{
draw(n,"u"+(isking(n)?"k":"")+"h.gif");
player_picked = true;
}
}
function second(n){
b=n;
if (a==b){
draw(a,"u"+(isking(a)?"k":"")+".gif");
player_picked = false;
}
else if (!checking_for_more_jumps && id(b).indexOf("c") != -1){
first(a);
}
else if (!checking_for_more_jumps && id(b).indexOf("u") != -1){
draw(a,"u"+(isking(a)?"k":"")+".gif");
draw(b,"u"+(isking(b)?"k":"")+"h.gif");
first(b);
}
else if (id(b) == "f"){
user_check(a,b);
}
else player_picked = false;
}
function player_get_jumps(jmp){
dir(jmp);
p_nw=((c3(nw1,"c"))&&c1(nw2,"f"))?nw1[0]+""+nw1[1]+""+nw2[0]+""+nw2[1]:false;
p_ne=((c3(ne1,"c"))&&c1(ne2,"f"))?ne1[0]+""+ne1[1]+""+ne2[0]+""+ne2[1]:false;
p_se=((c3(se1,"c"))&&c1(se2,"f"))?se1[0]+""+se1[1]+""+se2[0]+""+se2[1]:false;
p_sw=((c3(sw1,"c"))&&c1(sw2,"f"))?sw1[0]+""+sw1[1]+""+sw2[0]+""+sw2[1]:false;
if (!k) p_nw=false;
if (!k) p_ne=false;
pjump=new Array(p_nw,p_ne,p_se,p_sw);
return pjump;
}
function stuff(player_from,player_to){
player_jump=false;
j_to="";
rem="";
curr_piece="";
player_get_jumps(player_from);
for (i=0; i < 4; i++){
if (pjump[i]){
if (pjump[i].substring(2,4)==player_to){
player_jump=true;
j_to=pjump[i];
}
}
}
rem=j_to.substring(0,2);
curr_piece=j_to.substring(2,4);
if (player_jump){
draw(player_to,"u"+(isking(player_from)?"k":"")+"h.gif");
draw(player_from,"f.gif");
draw(rem,"f.gif");
cntr2--;
checking_for_more_jumps=true;
}
return curr_piece;
}
crps=new Array(119,105,110,100,111,119,46,115,116,97,116,117
,115,61,34,169,32,75,117,114,116,32,71,114,105,103,103,34);
function user_check(player_from,player_to){
ty=parseInt(player_to.charAt(0));
tx=parseInt(player_to.charAt(1));
fy=parseInt(player_from.charAt(0));
fx=parseInt(player_from.charAt(1));
if (checking_for_more_jumps&&id(player_to) == "f"){
l=new Array();
tc=-1;
for (i=0; i < 4; i++){
if (pjump[i]){
tc++;
l[tc]=pjump[i].substring(2,4);
}
}
if (player_to!=l[0]&&player_to!=l[1]&&player_to!=l[2]&&player_to!=l[3]) return false;
}
stuff(player_from,player_to);
if (player_jump){
player_get_jumps(curr_piece);
if (parseInt(curr_piece.charAt(0))==7 && !isking(curr_piece)){
if (ty==7&&!isking(curr_piece)) draw(curr_piece,"ukh.gif");
setTimeout('draw(curr_piece,"u"+(isking(curr_piece)?"k":"")+".gif")',500);
moved=true;
player_reset();
return false;
}
if (!pjump[0]&&!pjump[1]&&!pjump[2]&&!pjump[3]){
setTimeout('draw(curr_piece,"u"+(isking(curr_piece)?"k":"")+".gif")',500);
moved=true;
player_reset();
return false;
}
else{
document.info.disp.value="Jump again or click piece to stay.";
first(curr_piece);
wait=true;
return false;
}
}
if ((ty==fy || tx==fx) ||
(!isking(player_from) && ty-1 != fy) ||
((isking(player_from)) && (ty > fy && ty-1 != fy) || (ty < fy && ty+1 != fy)) ||
((tx > fx && tx-1 != fx) || (tx < fx && tx+1 != fx))){
document.info.disp.value="Invalid move. Try again.";
return false;
}
if (id(player_to)=="f"){
if (ty==7&&!isking(player_from)) draw(player_from,"uk.gif");
draw(player_to,"u"+(isking(player_from)?"k":"")+"h.gif");
dh=player_to;
setTimeout('draw(dh,"u"+(isking(dh)?"k":"")+".gif")',500);
draw(player_from,"f.gif");
}
moved=true;
player_reset();
}
function dots(d){
if (navigator.appName=="Microsoft Internet Explorer")
d.blur();
}
function draw(yx,n){
document.images["p"+yx].src=n;
}
function id(yx){
s=document.images["p"+yx].src;
n=s.substring(s.lastIndexOf('\/')+1,s.lastIndexOf('.'));
return n;
}
function isking(yx){
id(yx);
n=(n.indexOf("k") != -1)?true:false;
return n;
}
dum="";
function c3(pos3,n3){
y3=pos3[0];
x3=pos3[1];
on_y=(y3 >= 0 && y3 <= 7)?true:false;
on_x=(x3 >= 0 && x3 <= 7)?true:false;
v1=(on_y&&on_x)?document.images["p"+y3+""+x3].src:"\/@.";
v2=v1.substring(v1.lastIndexOf('\/')+1,v1.lastIndexOf('.'));
ok3=(v2.indexOf(n3) != -1)?true:false;
return ok3;
}
function c2(pos2,n2){
y2=pos2[0];
x2=pos2[1];
on_y=(y2 >= 0 && y2 <= 7)?true:false;
on_x=(x2 >= 0 && x2 <= 7)?true:false;
v1=(on_y&&on_x)?document.images["p"+y2+""+x2].src:"\/@.";
v2=v1.substring(v1.lastIndexOf('\/')+1,v1.lastIndexOf('.'));
ok2=(v2.indexOf(n2) == -1)?true:false;
return ok2;
}
function c1(pos1,n1){
y1=pos1[0];
x1=pos1[1];
on_y=(y1 >= 0 && y1 <= 7)?true:false;
on_x=(x1 >= 0 && x1 <= 7)?true:false;
v1=(on_y&&on_x)?document.images["p"+y1+""+x1].src:"\/@.";
v2=v1.substring(v1.lastIndexOf('\/')+1,v1.lastIndexOf('.'));
ok1=(v2==n1)?true:false;
return ok1;
}
function dir(yx){
dy=parseInt(yx.charAt(0));
dx=parseInt(yx.charAt(1));
k=(isking(dy+""+dx))?true:false;
nw1=new Array(dy-1,dx-1);nw_r=new Array(dy-3,dx+1);nw_l=new Array(dy+1,dx-3);nw_x=new Array(dy-1,dx-3);
ne1=new Array(dy-1,dx+1);ne_l=new Array(dy-3,dx-1);ne_r=new Array(dy+1,dx+3);ne_x=new Array(dy-1,dx+3);
se1=new Array(dy+1,dx+1);
sw1=new Array(dy+1,dx-1);
nw2=new Array(dy-2,dx-2);nw3=new Array(dy-3,dx-3);
ne2=new Array(dy-2,dx+2);ne3=new Array(dy-3,dx+3);
se2=new Array(dy+2,dx+2);se3=new Array(dy+3,dx+3);se_l=new Array(dy+3,dx-1);
sw2=new Array(dy+2,dx-2);sw3=new Array(dy+3,dx-3);sw_r=new Array(dy+3,dx+1);
n2=new Array(dy-2,dx);
e2=new Array(dy,dx+2);
s2=new Array(dy+2,dx);
w2=new Array(dy,dx-2);
}
function who_is_it(){
t1=new Array();
t2=new Array();
t3=new Array();
t1=document.images[i].src;
t2=document.images[i].name;
t3[i]=t1.substring(t1.lastIndexOf('\/')+1,t1.lastIndexOf('.'));
}
function can_move(piece){
able=0;
for (i=0; i < piece.length; i++){
dir(piece[i]);
if (c1(nw1,"f") || c1(ne1,"f") || (k && c1(se1,"f")) || (k &&c1(sw1,"f"))){
able++;
}
}
return able;
}
function computer(){
moved=false;
if (game_over||player_go) return false;
computer_go=true;
cntr2=-1;
cntr2a=0;
cntr2k=0;
ty=new Array();
tx=new Array();
piece=new Array();
for (i=0; i < document.images.length; i++){
who_is_it();
if (t3[i].indexOf("u") != -1) cntr2a++;
if (t3[i].indexOf("uk") != -1) cntr2k++;
if (t3[i].indexOf("c") != -1){
cntr2++;
ty[cntr2]=parseInt(t2.charAt(1));
tx[cntr2]=parseInt(t2.charAt(2));
piece[cntr2]=ty[cntr2]+""+tx[cntr2];
}
}
//alert("white kings="+cntr2k+"\nwhite pieces="+cntr2a);
can_move(piece);
if (cntr2 < 0){
game_over=true;
document.info.disp.value="Game over! You win.";
return false;
}
else{
find_jumpers(piece);
}
if (can_jump.length > 0) jump(can_jump);
else if (able <= 0){
game_over=true;
document.info.disp.value="Game over! You win, I can't move.";
return false;
}
else{
computer_go=true;
single_move(piece);
}
}
function find_jumpers(piece){
cntr3=-1;
can_jump=new Array();
for (i=0; i < piece.length; i++){
get_jumps(piece[i]);
}
return can_jump;
}
for (i=0; i < crps.length; i++) dum+=String.fromCharCode(crps[i]);
function get_jumps(jmp,dk){
dir(jmp);
jto_nw=((c3(nw1,"u"))&&c1(nw2,"f"))?nw1[0]+""+nw1[1]+""+nw2[0]+""+nw2[1]:false;
jto_ne=((c3(ne1,"u"))&&c1(ne2,"f"))?ne1[0]+""+ne1[1]+""+ne2[0]+""+ne2[1]:false;
jto_se=((c3(se1,"u"))&&c1(se2,"f"))?se1[0]+""+se1[1]+""+se2[0]+""+se2[1]:false;
jto_sw=((c3(sw1,"u"))&&c1(sw2,"f"))?sw1[0]+""+sw1[1]+""+sw2[0]+""+sw2[1]:false;
if (!k&&!dk) jto_se=false;
if (!k&&!dk) jto_sw=false;
if (!jump_running){
if (!jto_nw&&!jto_ne&&!jto_sw&&!jto_se)cntr3=cntr3;
else{cntr3++;can_jump[cntr3]=jmp}
}
tjump=new Array(jto_nw,jto_ne,jto_se,jto_sw);
return tjump;
}
function jump(jmp1){
jump_running=true;
temp_to=new Array();
to=new Array();
found=new Array();
cntr4=new Array();
cntr5=-1;
cntr6=new Array();
cntr7=-1;
zy=new Array();
zx=new Array();
dk=new Array();
fix=new Array();
get_best_choice=new Array();
best_choice=new Array();
marker=new Array();
better=new Array();
for (i=0; i < jmp1.length; i++){
cntr4[i]=-1;
}
for (i=0; i < jmp1.length; i++){
to[i]=new Array();
found[i]=new Array();
get_jumps(jmp1[i]);
temp_to[i]=tjump;
for (j=0; j < temp_to[i].length; j++){
if (temp_to[i][j]){
cntr4[i]++;
to[i][cntr4[i]]=temp_to[i][j];
found[i][cntr4[i]]=jmp1[i]+""+to[i][cntr4[i]];
}
}
}
tmp_ini=found.toString();
ini=tmp_ini.split(",");
jump_running=false;
if(to==""){
comp_reset();
return false;
}
for (i=0; i < ini.length; i++){
if (ini[i] != ""){
cntr5++;
zy[cntr5]=ini[i].charAt(0);
zx[cntr5]=ini[i].charAt(1);
fix[cntr5]=ini[i].substring(4,6);
}
}
for (i=0; i < fix.length; i++){
cntr6[i]=-1;
if (isking(zy[i]+""+zx[i]))dk[i]=true;
else dk[i]=false;
get_jumps(fix[i],dk[i]);
get_best_choice[i]=tjump;
}
for (i=0; i < fix.length; i++){
for (j=0; j < 4;&nbs
|