Chess : Game : Page Components JAVASCRIPT DHTML TUTORIALS


JAVASCRIPT DHTML TUTORIALS » Page Components » Game »

 

Chess



<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==&& 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==&& 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 < )?"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 (!waitdocument.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_jumpsfirst(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 (!kp_nw=false;
if (!kp_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))==&& !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-!= fy||
((isking(player_from)) && (ty > fy && ty-!= fy|| (ty < fy && ty+!= fy)) ||
((tx > fx &&  tx-!= fx|| (tx < fx && tx+!= 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 >= && y3 <= 7)?true:false;
on_x=(x3 >= && 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 >= && y2 <= 7)?true:false;
on_x=(x2 >= && 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 >= && y1 <= 7)?true:false;
on_x=(x1 >= && 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_goreturn 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"!= -1cntr2a++;
if (t3[i].indexOf("uk"!= -1cntr2k++;
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 > 0jump(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&&!dkjto_se=false;
if (!k&&!dkjto_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; j++){
if (get_best_choice[i][j]){
cntr6[i]++;
}
}
marker[i]=(cntr6[i>= 0)?"L":"";
best_choice[i]=ini[i]+marker[i];
}
for (i=0; i < best_choice.length; i++){
 if (best_choice[i].indexOf("L"!= -1){
 cntr7++;
 better[cntr7]=best_choice[i];
 }
}
if (cntr7 >= 0pick=better[Math.floor(Math.random()*better.length)]
else pick=ini[Math.floor(Math.random()*ini.length)]
if (pick!=""draw_jump(pick,ini.length);
}
function draw_jump(pick,c){
cntr2a--;
stick=false;
kng="";
from=pick.substring(0,2);
over=pick.substring(2,4);
to=pick.substring(4,6);
id(from);
draw(from,n+"h.gif");
if (n=="c"&&to.charAt(0)==0) {kng="k";stick=true}
setTimeout('draw(to,n+kng+"h.gif");draw(from,"f.gif");draw(over,"f.gif")',500);
setTimeout('draw(to,n+kng+".gif");',998);
new_piece=new Array();
new_piece[0]=to;
if (cntr2a==0setTimeout("win1()",1000);
else if (!sticksetTimeout("jump(new_piece)",1000);
else setTimeout("comp_reset()",1000);
}
function win1(){
document.info.disp.value="Game over! I win.";
computer_go=false;
game_over=true;
return false;
}
function best_single_move(piece){
dir(piece);
nw="b";
ne="b";
se="b";
sw="b";
mnw1=(c1(nw1,"f"&& c2(nw2,"u"))?true:false;
mne1=(c1(ne1,"f"&& c2(ne2,"u"))?true:false;
mse1=(c1(se1,"f"&& !c1(se2,"uk"))?true:false;
msw1=(c1(sw1,"f"&& !c1(sw2,"uk"))?true:false;
nw1a=false;nw1x=false;nwt=false; nwb=false;
ne1a=false;ne1x=false;net=false; neb=false;
se1a=false;se1x=false;set=false; seb=false;
sw1a=false;sw1x=false;swt=false; swb=false;
bot=(piece.charAt(0)==7)?true:false;
//Rubbish coding but works!

//##################
if (c3(nw3,"u"&& nw3[0]==&& nw3[1]==0)
{mnw1=true;nw="a"
if (k && c1(nw1,"f"&& c2(nw2,"u"&& c1(nw_l,"f"&& c1(w2,"u"&& w2[0]!=&& w2[1]!=0
{mnw1=true;nw="a"
if (c1(nw1,"f"&& c2(nw2,"u"&& c3(w2,"c"&& c1(nw_r,"f"&& c3(n2,"u"&& n2[0]!=&& n2[1]!=7)
{mnw1=true;nw="a"
if (c1(nw1,"f"&& c3(w2,"u"&& c1(nw_l,"f"&& nw1[0]==0)
{mnw1=true;nw="a"}
if (c1(nw1,"f"&& nw1[1]==&& c2(nw2,"u"&& c1(nw_r,"f"&& c3(n2,"u"))
{mnw1=true;nw="a"}
if (k && c1(nw1,"f"&& c2(nw2,"u"&& c1(nw_l,"f"&& nw2[1]!=&& c3(w2,"u"&& w2[0]!=&& c3(n2,"c"))
{mnw1=true;nw="a"
if ((c1(nw_l,"f"|| c1(nw_r,"f") ) && c1(nw1,"f"&& c2(nw2,"u"&& c3(w2,"u"&& c3(n2,"u"))
{mnw1=true;nw="t";nwb=true}
if (nw=="a"||nw=="t"nw1a=true;
if (!nw1a){
if ((c3(ne1,"u")&&c1(sw1,"f")&&c1(nw1,"f")&&c2(nw2,"u")&&c2(n2,"u")&&!c1(w2,"uk")) ||
(c1(se1,"uk")&&c1(nw1,"f")&&c2(nw2,"u")&&!c1(w2,"uk")&&c2(n2,"u")) ||
(c1(sw1,"uk")&&c1(ne1,"f")&&c2(nw2,"u")&&!c1(w2,"uk")&& c2(n2,"u")))
{mnw1=true;nw=(k)?"e":"d";nw1x=true}
}
if (k){
if ((c3(sw1,"u"&& sw1[0]==|| c3(ne1,"u"&& ne1[1]==7&& 
c1(nw1,"f"&& c2(nw2,"u"&& !c1(w2,"uk"&& c2(n2,"u"))
nwt=true;
}


//#######################
if (c3(ne_l,"u"&& ne_l[0]==&& ne_l[1]==0)
{mne1=true;ne="a"}
if (k && c1(ne1,"f"&& c2(ne2,"u"&& c1(ne_r,"f"&& c1(e2,"u"&& e2[1]!=7
{mne1=true;ne="a"
if (c1(ne1,"f"&& c2(ne2,"u"&& c3(e2,"c"&& c1(ne_l,"f"&& c3(n2,"u"&& n2[0]!=&& n2[1]!=0)
{mne1=true;ne="a"
if (c1(ne1,"f"&& ne1[0]==&& c1(ne_r,"f"&& c3(e2,"u"&& e2[1]!=7)
{mne1=true;ne="a"}
if (c1(ne1,"f"&& ne1[1]==&& c2(ne2,"u"&& c1(ne_l,"f"&& c3(n2,"u"&& n2[0]!=0)
{mne1=true;ne="a"}
if (k && c1(ne1,"f"&& c2(ne2,"u"&& c1(ne_r,"f"&& c3(e2,"u"&& e2[0]!=&& c3(n2,"c"))
{mne1=true;ne="a"}
if ((c1(ne_l,"f"|| c1(ne_r,"f")) && c1(ne1,"f"&& c2(ne2,"u"&& c3(e2,"u"&& c3(n2,"u"))
{mne1=true;ne="t";neb=true}
if (ne=="a"||ne=="t"ne1a=true;
if (!ne1a){
if ((c3(nw1,"u")&&c1(se1,"f")&&c1(ne1,"f")&&c2(ne2,"u")&&c2(n2,"u")&&!c1(e2,"uk")) ||
(c1(sw1,"uk")&&c1(ne1,"f")&&c2(ne2,"u")&&!c1(e2,"uk")&&c2(n2,"u")) ||
(c1(se1,"uk")&&c1(nw1,"f")&&c2(ne2,"u")&&!c1(e2,"uk")&&c2(n2,"u")))
{mne1=true;ne=(k)?"e":"d";ne1x=true}
}
if (k){
if ((c3(se1,"u"&& se1[0]==|| c3(nw1,"u"&& nw1[1]==0&& 
c1(ne1,"f"&& c2(ne2,"u"&& !c1(e2,"uk"&& c2(n2,"u"))
net=true;
}

//#########
if (c1(se1,"f"&& c1(se2,"u"&& c1(se3,"f"&& se2[1]!=&& !c1(s2,"uk"&& !c1(e2,"uk"))
{mse1=true;se="a"}
if (c2(e2,"u"&& c1(se1,"f"&& c1(se_l,"f"&& c3(s2,"u"&& !c1(se2,"uk"&& s2[1]!=0)
{mse1=true;se="a"}
if (c1(se1,"f"&& se1[1]==&& c1(se_l,"f"&& c3(s2,"u"))
{mse1=true;se="a"}
if (piece.charAt(1)!=0&&c1(se1,"f")&&c1(se_l,"f")&&c2(se2,"u")&&!c1(e2,"f")&&c3(s2,"u"))
{mse1=true;se="a"}
if (c1(se1,"f"&& c1(se2,"u"&& c1(se3,"f"&& !c1(s2,"f"&& c3(e2,"u"&& e2[0]!=&& e2[1]!=7)
{mse1=true;se="a"}
if ((c1(se_l,"f"|| c1(ne_x,"f")) && c1(se1,"f"&& !c1(se2,"uk"&& c3(e2,"u"&& c3(s2,"u"))
{mse1=true;se="t";seb=true;}
if (se=="a"||se=="t"se1a=true;
if (!se1a){
if ((c1(se1,"f")&&c3(nw1,"u")&&!c1(se2,"uk")&&c2(e2,"u")&&!c1(s2,"uk")) ||
(c1(se1,"f")&&c1(sw1,"uk")&&c1(ne1,"f")&&c2(e2,"u")&&!c1(s2,"uk")&&!c1(se2,"uk")))
{mse1=true;se=(k)?"e":"d";se1x=true}
se_e=(c1(ne1,"uk")&&c1(sw1,"f")&&c1(se1,"f")&&!c1(se2,"uk"))?true:false;
if ((se_e)&&((!c1(e2,"f")&&!c1(s2,"f"))||(!c3(e2,"u")&&!c1(s2,"uk"))))
{mse1=true;se=(k)?"e":"d";se1x=true}
}
if (k){
if  (((sw1[1]==&& c3(sw1,"u")) || (ne1[0]==&& c3(ne1,"u"))) &&
c2(e2,"u"&& c1(se1,"f"&& !c1(se2,"uk"&& !c1(s2,"uk"))
set=true;
}

//##############################
if (k && c3(nw_x,"u"&& nw_x[0]==&& nw_x[1]==0)
{msw1=true;sw="a"}
if (c1(sw1,"f"&& c1(sw2,"u"&& c1(sw3,"f"&& sw2[1]!=&& !c1(s2,"uk"&& !c1(w2,"uk"))
{msw1=true;sw="a"}
if (c2(w2,"u"&& c1(sw1,"f"&& c1(sw_r,"f"&& c3(s2,"u"&& !c1(sw2,"uk"&& s2[0]!=7)
{msw1=true;sw="a"}
if (c1(sw1,"f"&& !c1(sw2,"uk"&& c1(sw3,"f"&& c2(s2,"f"&& c3(w2,"u"&& w2[1]!=&& w2[0]!=0)
{msw1=true;sw="a"}
if (c1(sw1,"f"&& sw1[1]==&& c3(s2,"u"&& c1(sw_r,"f"&& s2[0]!=7)
{msw1=true;sw="a"}
if (c1(sw1,"f"&& c2(sw2,"u"&& c3(s2,"u"&& c1(sw_r,"f"&& s2[0]!=&& c2(w2,"f"))
{msw1=true;sw="a"}
if ((c1(sw_r,"f"|| c1(nw_x,"f")) && c1(sw1,"f"&& !c1(sw2,"uk"&& c3(s2,"u"&& c3(w2,"u"))
{msw1=true;sw="t";swb=true}
if (sw=="a"||sw=="t"sw1a=true;
if (!sw1a){
if ((c1(sw1,"f")&&c3(ne1,"u")&&!c1(sw2,"uk")&& c2(w2,"u")&&!c1(s2,"uk")) ||
(c1(sw1,"f")&&c1(se1,"uk")&&c1(nw1,"f")&&c2(w2,"u")&&!c1(s2,"uk")&&!c1(sw2,"uk")))
{msw1=true;sw=(k)?"e":"d";sw1x=true}
sw_e=(c1(nw1,"uk")&&c1(se1,"f")&&c1(sw1,"f")&&!c1(sw2,"uk"))?true:false;
if ((sw_e)&&((!c1(w2,"f")&&!c1(s2,"f"))||(!c3(w2,"u")&&!c1(s2,"uk"))))
{msw1=true;sw=(k)?"e":"d";sw1x=true}
}
if (k){
if (((se1[1]==7&&c3(se1,"u"))||(nw1[0]==0&&c3(nw1,"u")))&&
c2(w2,"u")&&c1(sw1,"f")&&!c1(sw2,"uk")&&!c1(s2,"uk"))
swt=true;
}

if (nw1a){if (ne1x || se1x || sw1x){mnw1=true;nw="$"}}
if (ne1a){if (nw1x || se1x || sw1x){mne1=true;ne="$"}}
if (se1a){if (nw1x || ne1x || sw1x){mse1=true;se="$"}}
if (sw1a){if (nw1x || ne1x || se1x){msw1=true;sw="$"}}
if (nwb){if (ne1x || se1x || sw1x){mnw1=true;nw="%"}}
if (neb){if (nw1x || se1x || sw1x){mne1=true;ne="%"}}
if (seb){if (nw1x || ne1x || sw1x){mse1=true;se="%"}}
if (swb){if (nw1x || ne1x || se1x){msw1=true;sw="%"}}
if (nwt){if (ne1x || se1x || sw1x){mnw1=true;nw="L"}}
if (net){if (nw1x || se1x || sw1x){mne1=true;ne="L"}}
if (set){if (nw1x || ne1x || sw1x){mse1=true;se="L"}}
if (swt){if (nw1x || ne1x || se1x){msw1=true;sw="L"}}


//Try to keep bottom pieces in place unless all remaining whites are kings.
if (cntr2a!=cntr2k){
if (bot && !k && nw!="a" && ne!="a"){
if (c1(nw1,"u")) {mne1=true;ne="~"}
if (!c1(n2,"uk")) {mnw1=true;nw="y"}
if (!c1(n2,"uk"&& !c1(nw1,"u")) {mne1=true;ne="y"}
}
if (bot && !k && nw=="a"){if (c1(e2,"f")){mnw1=true;nw="z"}}
if (bot && !k && ne=="a"){if (c1(w2,"f")){mne1=true;ne="z"}}
}

if (c3(nw1,"c")&&c3(nw2,"u")){mne1=false;mse1=false;msw1=false}
if (c3(ne1,"c")&&c3(ne2,"u")){mnw1=false;mse1=false;msw1=false}
if (c3(se1,"c")&&c1(se2,"uk")){mnw1=false;mne1=false;msw1=false}
if (c3(sw1,"c")&&c1(sw2,"uk")){mnw1=false;mne1=false;mse1=false}
not_safe=(!mnw1&&!mne1&&!mse1&&!msw1)?true:false;
if (not_safe && c1(nw1,"f")) {mnw1=true;nw="z"}
if (not_safe && c1(ne1,"f")) {mne1=true;ne="z"}
if (not_safe && c1(se1,"f"&& k) {mse1=true;se="z"}
if (not_safe && c1(sw1,"f"&& k) {msw1=true;sw="z"}
if (c1(nw1,"f"&& c3(nw2,"u")) {mnw1=true;nw="z"}
if (c1(nw1,"f"&& c1(w2,"uk"&& c1(n2,"f")) {mnw1=true;nw="z"}
if (c1(nw1,"f"&& c1(w2,"f"&& c3(n2,"u")) {mnw1=true;nw="z"}
if (c1(ne1,"f"&& c3(ne2,"u")) {mne1=true;ne="z"}
if (c1(ne1,"f"&& c1(e2,"uk"&& c1(n2,"f")) {mne1=true;ne="z"}
if (c1(ne1,"f"&& c1(e2,"f"&& c3(n2,"u")) {mne1=true;ne="z"}
if (c1(se1,"f"&& c1(se2,"uk")) {mse1=true;se="z"}
if (c1(se1,"f"&& c1(s2,"uk"&& c1(e2,"f")) {mse1=true;se="z"}
if (c1(se1,"f"&& c3(e2,"u"&& c1(s2,"f")) {mse1=true;se="z"}
if (c1(sw1,"f"&& c1(sw2,"uk")) {msw1=true;sw="z"}
if (c1(sw1,"f"&& c1(s2,"uk"&& c1(w2,"f")) {msw1=true;sw="z"}
if (c1(sw1,"f"&& c3(w2,"u"&& c1(s2,"f")) {msw1=true;sw="z"}
if (!kmse1=false;
if (!kmsw1=false;
if (!c1(nw1,"f")) mnw1=false;
if (!c1(ne1,"f")) mne1=false;
if (!c1(se1,"f")) mse1=false;
if (!c1(sw1,"f")) msw1=false;
m_nw1=(mnw1)?nw1[0]+""+nw1[1]+nw:"";
m_ne1=(mne1)?ne1[0]+""+ne1[1]+ne:"";
m_se1=(mse1)?se1[0]+""+se1[1]+se:"";
m_sw1=(msw1)?sw1[0]+""+sw1[1]+sw:"";
ini_to=new Array(m_nw1,m_ne1,m_se1,m_sw1);
//alert(piece+'n'+ini_to)
return ini_to;
}
function block(piece){
dir(piece);
at_nw=(c3(nw1,"u"&& c1(se1,"f"))?true:false;
a_fnw0=(at_nw && c3(se2,"c"))?(se2[0]+""+se2[1])+"-"+(se1[0]+""+se1[1]):"*"
a_fnw1=(at_nw && c3(s2,"c"&& c2(e2,"u"))?(s2[0]+""+s2[1])+"-"+(se1[0]+""+se1[1]):"*";
a_fnw2=(at_nw && c1(e2,"ck"&& !c1(s2,"uk"))?(e2[0]+""+e2[1])+"-"+(se1[0]+""+se1[1]):"*";
at_ne=(c3(ne1,"u"&& c1(sw1,"f"))?true:false;
a_fne0=(at_ne && c3(sw2,"c"))?(sw2[0]+""+sw2[1])+"-"+(sw1[0]+""+sw1[1]):"*"
a_fne1=(at_ne && c3(s2,"c"&& c2(w2,"u"))?(s2[0]+""+s2[1])+"-"+(sw1[0]+""+sw1[1]):"*";
a_fne2=(at_ne && c1(w2,"ck"&& !c1(s2,"uk"))?(w2[0]+""+w2[1])+"-"+(sw1[0]+""+sw1[1]):"*";
at_se=(c1(se1,"uk"&& c1(nw1,"f"))?true:false;
a_fse0=(at_se && c1(nw2,"ck"))?(nw2[0]+""+nw2[1])+"-"+(nw1[0]+""+nw1[1]):"*"
a_fse1=(at_se && c3(w2,"c"&& c2(n2,"u"))?(w2[0]+""+w2[1])+"-"+(nw1[0]+""+nw1[1]):"*";
a_fse2=(at_se && c1(n2,"ck"&& !c1(w2,"uk"))?(n2[0]+""+n2[1])+"-"+(nw1[0]+""+nw1[1]):"*";
at_sw=(c1(sw1,"uk"&& c1(ne1,"f"))?true:false;
a_fsw0=(at_sw && c1(ne2,"ck"))?(ne2[0]+""+ne2[1])+"-"+(ne1[0]+""+ne1[1]):"*"
a_fsw1=(at_sw && c3(e2,"c"&& c2(n2,"u"))?(e2[0]+""+e2[1])+"-"+(ne1[0]+""+ne1[1]):"*";
a_fsw2=(at_sw && c1(n2,"ck"&& !c1(e2,"uk"))?(n2[0]+""+n2[1])+"-"+(ne1[0]+""+ne1[1]):"*";
_block=new Array();
_block[0]=new Array(a_fnw0,a_fnw1,a_fnw2)
_block[1]=new Array(a_fne0,a_fne1,a_fne2)
_block[2]=new Array(a_fse0,a_fse1,a_fse2)
_block[3]=new Array(a_fsw0,a_fsw1,a_fsw2)
return _block;
}
function do_it(p){
pick="";
singles_die_first=new Array();
sdf=-1;
if (o[12]){
for (i=0; i < p.length; i++)
if (!isking(p[i].substring(0,2)) && p[i].charAt(0!= 7){
sdf++;
singles_die_first[sdf]=p[i];
}
}
if (sdf >= 0)
pick=singles_die_first[Math.floor(Math.random()*singles_die_first.length)];
else
pick=p[Math.floor(Math.random()*p.length)];
move_it(pick);
return false;
}
function single_move(piece){
to=new Array();
o=new Array();
g=new Array();
for (i=0; i < 13; i++){
o[i]=false;
g[i]=-1;
}
//do long way, easier to keep track of what's what!
mu=new Array();Q_u=new Array();uc=new Array();
m$=new Array();Q_$=new Array();$c=new Array();
mr=new Array();Q_r=new Array();rc=new Array();
me=new Array();Q_e=new Array();ec=new Array();
md=new Array();Q_d=new Array();dc=new Array();
mt=new Array();Q_t=new Array();tc=new Array();
ma=new Array();Q_a=new Array();ac=new Array();
mf=new Array();Q_f=new Array();fc=new Array();
mb=new Array();Q_b=new Array();bc=new Array();
my=new Array();Q_y=new Array();yc=new Array();
ml=new Array();Q_l=new Array();lc=new Array();
mz=new Array();Q_z=new Array();zc=new Array();
for (i=0; i < piece.length; i++){
uc[i]=-1;$c[i]=-1;rc[i]=-1;ec[i]=-1;dc[i]=-1;tc[i]=-1;
ac[i]=-1;fc[i]=-1;bc[i]=-1;yc[i]=-1;lc[i]=-1;zc[i]=-1;
}
for (i=0; i < piece.length; i++){
best_single_move(piece[i]);
to[i]=ini_to;
}
m_t_b=new Array();
for (i=0; i < piece.length; i++){
block(piece[i]);
m_t_b[i]=_block;
}
Q_c=new Array();
for (i=0; i < m_t_b.length; i++){
for (j=0; j < m_t_b[i].length; j++){
for (k=0; k < m_t_b[i][j].length; k++){

/*
Prevents red bottoms moving to block...hmmm. Not sure!
&& m_t_b[i][j][k].charAt(0)!=7)
*/
if (m_t_b[i][j][k].indexOf("*"== -1){
g[5]++;
Q_c[g[5]]=m_t_b[i][j][k];
}
}
}
}
for (i=0; i < to.length; i++){
mu[i]=new Array();m$[i]=new Array();mr[i]=new Array();
me[i]=new Array();md[i]=new Array();mt[i]=new Array();
ma[i]=new Array();mf[i]=new Array();mb[i]=new Array();
my[i]=new Array();ml[i]=new Array();mz[i]=new Array();
for (j=0; j < to[i].length; j++){
if (to[i][j].indexOf("%"!= -1){
g[0]++;uc[i]++;mu[i][uc[i]]=piece[i]+'-'+to[i][j];Q_u[g[0]]=mu[i][uc[i]]}
if (to[i][j].indexOf("$"!= -1){
g[1]++;$c[i]++;m$[i][$c[i]]=piece[i]+'-'+to[i][j];Q_$[g[1]]=m$[i][$c[i]]}
if (to[i][j].indexOf("L"!= -1){
g[2]++;rc[i]++;mr[i][rc[i]]=piece[i]+'-'+to[i][j];Q_r[g[2]]=mr[i][rc[i]]}
if (to[i][j].indexOf("e"!= -1){
g[3]++;ec[i]++;me[i][ec[i]]=piece[i]+'-'+to[i][j];Q_e[g[3]]=me[i][ec[i]]}
if (to[i][j].indexOf("d"!= -1){
g[4]++;dc[i]++;md[i][dc[i]]=piece[i]+'-'+to[i][j];Q_d[g[4]]=md[i][dc[i]]}
if (to[i][j].indexOf("t"!= -1){
g[6]++;tc[i]++;mt[i][tc[i]]=piece[i]+'-'+to[i][j];Q_t[g[6]]=mt[i][tc[i]]}
if (to[i][j].indexOf("a"!= -1){
g[7]++;ac[i]++;ma[i][ac[i]]=piece[i]+'-'+to[i][j];Q_a[g[7]]=ma[i][ac[i]]}
if (to[i][j].indexOf("^"!= -1){
g[8]++;fc[i]++;mf[i][fc[i]]=piece[i]+'-'+to[i][j];Q_f[g[8]]=mf[i][fc[i]]}
if (to[i][j].indexOf("b"!= -1){
g[9]++;bc[i]++;mb[i][bc[i]]=piece[i]+'-'+to[i][j];Q_b[g[9]]=mb[i][bc[i]]}
if (to[i][j].indexOf("y"!= -1){
g[10]++;yc[i]++;my[i][yc[i]]=piece[i]+'-'+to[i][j];Q_y[g[10]]=my[i][yc[i]]}
if (to[i][j].indexOf("~"!= -1){
g[11]++;lc[i]++;ml[i][lc[i]]=piece[i]+'-'+to[i][j];Q_l[g[11]]=ml[i][lc[i]]}
if (to[i][j].indexOf("z"!= -1){
g[12]++;zc[i]++;mz[i][zc[i]]=piece[i]+'-'+to[i][j];Q_z[g[12]]=mz[i][zc[i]]}
}
}
for (i=0; i < 13; i++){
if (g[i>= 0o[i]=true;
}
if (o[0]) do_it(Q_u)
else if (o[1]) do_it(Q_$)
else if (o[2]) do_it(Q_r);  
else if (o[3]) do_it(Q_e);
else if (o[4]) do_it(Q_d);  
else if (o[5]) do_it(Q_c);     
else if (o[6]) do_it(Q_t);     
else if (o[7]) do_it(Q_a);    
else if (o[8]) do_it(Q_f);       
else if (o[9]) do_it(Q_b);       
else if (o[10]) do_it(Q_y);      
else if (o[11]) do_it(Q_l);      
else if (o[12]) do_it(Q_z);      
else
alert("Something wrong if you see this.");
game_over=true;
return false;
}
}
function move_it(pick){
kng="";
pick=pick.split('-');
from=pick[0];
to=pick[1].substring(0,2);
id(from);
draw(from,n+"h.gif");
if (n=="c"&&to.charAt(0)==0kng="k";
setTimeout('draw(to,n+kng+"h.gif");draw(from,"f.gif")',500);
setTimeout('draw(to,n+kng+".gif");comp_reset()',1000);
}

function comp_reset(){
eval(dum);
computer_go=false;
stuck();
if (plc < 1){
game_over=true;
document.info.disp.value="Game over! I win, you can't move.";
}
else{
document.info.disp.value="OK. It's your turn.";
}
}
function toss(){
if (tossed){
document.info.bttn.value="New Game";
return false;
}
else{
who=new Array("White","Red");
who_first=who[Math.floor(Math.random()*who.length)]
document.info.disp.value=who_first+" goes first.";
document.info.bttn.value="New Game";
if (who_first=="Red"setTimeout("computer()",500);
tossed=true;
}
}
document.info.disp.value="You are white. Click button.";
if (!document.layers){
document.info.disp.style.borderWidth = "px";
document.info.bttn.style.borderWidth = "px";
}
</script>
</body>
</html>
           
       

Download : Download nav_draughts.zip nav_draughts.zip


-

Leave a Comment / Note


 
Verification is used to prevent unwanted posts (spam). .

Follow Navioo On Twitter

JAVASCRIPT DHTML TUTORIALS

 Navioo Page Components
» Game