⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.htm

📁 中国象棋人工智能
💻 HTM
📖 第 1 页 / 共 5 页
字号:
             chessObj.style.left = event.x-chessObj.l;
             chessObj.style.top = event.y-chessObj.t;
             //isDrag
          
         // if(Math.abs( event.y-yy) >=50 || Math.abs(event.x-xx) >=50){isDrag=true;}else{isDrag=false;}
          //window.status=isDrag;
           }
            }
//抬起
    allChess[i].onmouseup=function MouseUp(){
    if(whosTurn!="w"){return false;}
    //if(!isDrag){gogo(xx,yy);chessObj=null;return false;}      
            if(chessObj!=null){             
             yyy= 50* Math.round(parseInt(chessObj.style.top)/50 )-20;
             xxx= 50* Math.round(parseInt(chessObj.style.left)/50 )-20;
             //window.status=" " + xxx +" "+ yyy;
             chessObj.releaseCapture();
             //chessObj.style.top =yyy;
             //chessObj.style.left =xxx;
             var ok=false;
             if(((xxx-xx)!=0 || (yyy-yy)!=0) && xxx<=380 && yyy<=430 && xxx>=-20 && yyy>=-20)
             {
                     if(rule(chessObj.innerText,xx,yy,xxx,yyy)  )
                     {
                         ok=true;
                            var XXX=xxx;
                            var YYY=yyy;
                            var XX=xx;
                            var YY=yy;
                         
                         
                         // gogo(xxx,yyy);//走过去
                        
                        if (getQ_xy(xxx,yyy) ==""){
                           getMove(chessObj,XX,YY,XXX,YYY);
                          gogo(xxx,yyy);//走过去
                          
                         }
                         else{
                             var deadChessId=getQ_xy(XXX,YYY);
                             var deadChess=document.getElementById(deadChessId);
                             getMove(chessObj,XX,YY,XXX,YYY);
                             eat(deadChessId,XXX,YYY);                  
                         }
                        think();
                         
                          
                     }
               }
            if(!ok){gogo(xx,yy);}                     
             chessObj=null;
            
             }
             //selectNull();
            }
        }
    }
 
    
 function think()
 { 
                 whosTurn="b";
                 selectNull();  
                    var fen=getPosition();
                    var cmd="position fen " + fen + " b - - 0 2"+ "\n";
                    
                   // 判断长捉长将,三步必须变着;
                   //alert(moveArray + ":"+moveArray.length);
                   var Len=moveArray.length;
                   if( moveArray.length>6 && (Len % 2 ==0) )
                   {                        
                     if((moveArray[Len-1] +  moveArray[Len-2])== (moveArray[Len-3] +  moveArray[Len-4]) )
                     {
                         if((moveArray[Len-3] +  moveArray[Len-4])== (moveArray[Len-5] +  moveArray[Len-6]) )
                        {                                                         
                                Timming();
                                cmd+="banmoves " + moveArray[Len-1] + "\n";                           
                        }
                     }
                        //if(moveArray)
                   }
                   //延迟30秒后如果没应着就算你赢了。
                   //在黑方走棋的时候不允许点悔棋按钮。
                   RetractChess.disabled=true;
                   timeOut =window.setTimeout("Timming()",1000 * 30);
                    PageMethods("blackMove","","bestmove", cmd,1000);
                    ppp.innerHTML="这步棋走的好!笨狼正在思考,请稍候!~~";
 }
 function  Timming()
 {
        //增加难度;
  PageMethods("addTime","","",1000);
     //如果服务器半分钟没做出反映自动判负。
     if(window.confirm("笨狼想不出对策,算你赢了!重来吗?"))
  {     
      window.location.reload();
  }
 }
  function   isChessRed(chessObj)
  {
    return (chessObj.fillColor=="red");
  }

  function autoMove(objId,x2,y2)
  {
    var moveChess=document.getElementById(objId ); 
    moveChess.style.top=y2;
    moveChess.style.left=x2; 
    
    myColor= "red" ;
    enemyColor="gray";
    whosTurn="w";
    ppp.innerHTML="后悔了吧?现在该你红棋走了,请拖动棋子";
    
  }
 function displayChineseMoves()
 {
      qqq.value="";
     for(i=0;i<moveChineseArray.length;i++)
     {
        if(i % 2 ==0){qqq.value +="第"+ parseInt (i/2 + 1)+ "步:" + moveChineseArray[i]+ "  ";}else{qqq.value +=moveChineseArray[i]+ "\n";}
        
     }
 } 
 function Retract()
{   
     
    if(RetractArray.length>0)
    {
       RetractOne();
       RetractOne(); 
       displayChineseMoves();
   }
   else
   {
        alert("目前回到最原始状态了,没棋可悔了!~~");
   }
   
}
function Change()
{
    var Len=moveArray.length;
    if(Len>=2 && (Len % 2==0))
    {
        var lastMove=moveArray[Len-1];
        RetractOne();
        displayChineseMoves();
        whosTurn="b";
        selectNull();     
        var fen=getPosition();
        var cmd="position fen " + fen + " b - - 0 2"+ "\n";
        cmd+="banmoves " + lastMove+ "\n";    
        //alert(cmd); 
        timeOut =window.setTimeout("Timming()",1000 * 30);
        RetractChess.disabled=true;
        PageMethods("blackMove","","bestmove", cmd,3000);
        ppp.innerHTML="要变着,笨狼需要多思考,可能找不到变着,请稍候!~~";
    }
    else
    {
        alert("无着可变!~~");
    }
}
function RetractOne()
{
    
    var str=RetractArray[RetractArray.length-1];
    var arr=str.split(" ");  
    if(arr.length==6)
    {
        autoMove(arr[0],arr[1],arr[2]);
        autoMove(arr[3],arr[4],arr[5]);
    }
    if(arr.length==3)
    {
        autoMove(arr[0],arr[1],arr[2]);
    }
    RetractArray.pop();
    moveChineseArray.pop();
    moveArray.pop();
}

  
   //以下是得到棋谱部分  
function getMove(chessObj,x1,y1,x2,y2)
{
    var deadId=getQ_xy(x2,y2);
    if(deadId=="")
    {
        RetractArray.push( chessObj.id + " "   + x1 + " " + y1 ) ;
    }
    else
    {
        RetractArray.push( chessObj.id + " "  + x1 + " " + y1 + " " + deadId + " "  + x2 + " " + y2) ;
    }
    var chessName= chessObj.innerText.replace(/ /ig,"");
    
    var re=chessName  ;
    
    var isRed=isChessRed(chessObj );
    var moveCode="";
    if(isRed){
        moveCode=String.fromCharCode(65+(x1+20)/50) + ((y1+20)/50) + String.fromCharCode(65+(x2+20)/50)  + ((y2+20)/50);
    }
    else{
        moveCode=String.fromCharCode(97+(x1+20)/50) + ((y1+20)/50) + String.fromCharCode(97+(x2+20)/50)  + ((y2+20)/50);
    }     
    moveArray.push(moveCode);
    var arr=new Array("一","二","三","四","五","六","七","八","九");
    
    if(y1==y2)  {     
        if(isRed) { re+=  arr[8-(x1+20)/50];}else{re+=1+(x1+20)/50;}
    }
    
    if(y1>y2 ) {  
        if(isRed){  re+=arr[8-(x1+20)/50]  ;}else{re+=1+(x1+20)/50;}
    }
    if(y1<y2)  {         
        if(isRed) {  re+=arr[8-(x1+20)/50]  ;}else{ re+=1+(x1+20)/50 ;}
     }
     
     
    for(i=-20;i<=480;i+=50)
    {
        var tempObjId=getQ_xy(x1,i);
         if(tempObjId!="")
         {
            var tempObj=document.getElementById(getQ_xy(x1,i));
            
            if((tempObj.id!=chessObj.id) && (tempObj.fillColor==chessObj.fillColor) &&  (tempObj.innerText==chessObj.innerText))
            {
                
                if( isRed && i<y1 || (!isRed && i>y1) ) {re="前" + chessName;}else { re="后" + chessName;}
                break;
            }
        }
    }
    
    //下边是后续部分
    if(y1==y2)  {     
        if(isRed){re+= "平" + arr[8-(x2+20)/50];} else{re+= "平" + (1+(x2+20)/50);}
    }
    
    if(y1>y2 ) {  
        if(isRed)
        {    
           if(x1==x2){ re+=  "进" + arr[Math.abs(y2-y1)/50-1];}else{re+=  "进" + arr[ 8-(x2+20)/50];}
        } 
        else
        {
            if(x1==x2){ re+= "退" + Math.abs(y2-y1)/50;}else{re+=  "退" + (1+(x2+20)/50);}
        }
    }
    if(y1<y2)  {         
        if(isRed)
        {    
            
            if(x1==x2){ re+= "退" + arr[Math.abs(y2-y1)/50-1];}else{re+=  "退" + arr[ 8-(x2+20)/50];}
        } 
        else
        {
            if(x1==x2){re+= "进" + Math.abs(y2-y1)/50;}else{re+=  "进" + ( 1+(x2+20)/50 );}
        }
     }
     moveChineseArray.push(re);
     displayChineseMoves();
    //if(!isRed){ re+= "<br/>"}else{ re+= "&nbsp;&nbsp;&nbsp;&nbsp;"}
  

}
 //以下是得到棋盘状态部分 

 function getPosition() 
 {
    var re="";    
    var last=0;
    for(y=-20 ;y<=430;y+=50)    
    {     
      for(x=-20 ;x<=380;x+=50)
        {
            
            if(getQ_xy(x,y)!="")
            {
                var obj=document.getElementById(getQ_xy(x,y));               
                var chessName=obj.innerText.replace(/ /ig,&apos;&apos;);
                 //rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR 
                switch (chessName){
              case "车":
               chessName="r";
               break; 
              case "马":
               chessName="n";
               break;  
              case "象":  
               chessName="b";
               break;
              case "相":  
               chessName="b";
               break; 
              case "士":  
               chessName="a";
               break;
              case "仕":  
               chessName="a";
               break; 
              case "将":  
               chessName="k";
               break; 
              case "帅":  
               chessName="k";
               break;
              case "炮":  
               chessName="c";
               break; 
              case "兵":  
               chessName="p";
               break; 
              case "卒":  
               chessName="p";
               break;   
             }
             if(obj.fillColor=="red")
             {
                 chessName=chessName.toUpperCase();
             }
             if(last>0)
                {
                    re+=last;
                    last=0;
                 }
                re+=chessName;
                obj.innerText.replace(/ /ig,&apos;&apos;);                
                last=0;
            }
            else
            {
                last++;                
            }

        }
        if(last>0)
        {
                re+=last;
                last=0;
        }
        re+="/";
    }
    re = re.substring(0,re.length-1) ;
     
    return  re;
 }
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -