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

📄 1.htm

📁 中国象棋人工智能
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SuperDullWolfChess._Default" %>

<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
    <style>
        v\:*
        {
            behavior: url(#default#VML);
        }
        body
        {
            background-color: DarkGoldenrod;
            margin-left: 10px;
            margin-top: 10px;
        }
        oval
        {
            position: absolute;
        }
    </style>

    <script language="javascript" type="text/javascript" src="Ajax.js">
    </script>

    <script language="javascript" type="text/javascript">
    var name = navigator.appName;
   
if(name!="Microsoft Internet Explorer"){
 
alert("由于采用了无图片VML技术,所以请使用IE浏览器访问本页");
}

   var chessObj;

var myColor="red";
var enemyColor="gray";
var qiNum=32;//棋子数量
var qID="";
var qName="";
var xx=0;//起点坐标
var yy=0;
var xxx=0;//终点坐标
var yyy=0;
var step=0;
var eatNum=0;
var eatNumRed=0;
var whosTurn="w";
 //显示中国棋谱的数组
 var moveChineseArray=new Array(); 
 //用来判断长将长捉的历史步数  
 var moveArray=new Array(); 
 //用来回退棋子的数组。
 var RetractArray=new Array(); 
  //悔棋
  //悔棋时候走的棋
 
  //*******以下是选择棋子和目标部分**********

function sel(obj){ 
//如果手中无棋,选中棋子,否则确定目标点
 
 if(obj.fillColor != myColor ) {
  return;
 }
 // if(qID!="" && qID!=obj.id){
  
 // target();
 // }

 //selectNull();
 if(obj.strokeWeight==1){
  obj.style.zIndex=5;
  obj.strokeWeight=2;
  obj.strokeColor="Navy" ;
  qID=obj.id;
  qName=obj.innerText.replace(/(^\s*)|(\s*$)/g,"");
  xx=parseInt(obj.style.left);
  yy=parseInt(obj.style.top);
 } 
 //window.event.cancelBubble=true;
// ppp.innerText=xx+":"+yy;
}
function setSel(obj,tempX,tempY){ 
//如果手中无棋,选中棋子,否则确定目标点
 
  if(qID!="" && qID!=obj.id){
  
  setTarget(tempX,tempY);
  }

 //selectNull();
 if(obj.strokeWeight==1){
  obj.style.zIndex=5;
  obj.strokeWeight=2;
  obj.strokeColor="Navy" ;
  qID=obj.id;
  qName=obj.innerText.replace(/(^\s*)|(\s*$)/g,"");
  xx=parseInt(obj.style.left);
  yy=parseInt(obj.style.top);
 }  
// ppp.innerText=xx+":"+yy;
}

function target(){ 
//选中目标
    
    if(whosTurn !="w" ){return;}
   if(qID=="" ){return;}
  if(!rule(qName,xx,yy,tempX,tempY)){return;}
  if( tempX<-20 ||tempX > 380){return;}
  if(tempY<-20||tempY>430){return;}
  if(objId==qID){return;}
  if(tempX==xx && tempY==yy){return;}
 var tempX=(parseInt(event.clientX) - 62) / 50; 
 var tempY=(parseInt(event.clientY) - 62) / 50;
 tempX=(50 * Math.round(tempX)) -20;
 tempY=(50 * Math.round(tempY)) -20; 
 var objId=getQ_xy(tempX,tempY);
// ppp.innerText= tempX.toString() + ":" + tempY.toString(); 

 xxx=tempX;
 yyy=tempY;
 if (objId ==""){ 
     //alert(1);
     getMove(document.getElementById(qID),xx,yy,xxx,yyy);
  gogo(xxx,yyy);//走过去
  selectNull();    
  think();
 }
 else{
  if(document.getElementById(getQ_xy(xxx,yyy)).fillColor != myColor){
      getMove(document.getElementById(qID),xx,yy,xxx,yyy);
   eat(getQ_xy(xxx,yyy),xxx,yyy);
   selectNull();    
   think();
  }
 }  
 
}
 
function setTarget(tempX,tempY){ 
//选中目标
 
 //ppp.innerText= tempX.toString() + ":" + tempY.toString(); 
 if(qID=="" || rule(qName,xx,yy,tempX,tempY)==false || (tempX<-20 ||tempX > 380||tempY<-20||tempY>430) ){
  return;
 }
 xxx=tempX;
 yyy=tempY;
 if (getQ_xy(xxx,yyy) ==""){
  gogo(xxx,yyy);//走过去
 }
 else{
  if(document.getElementById(getQ_xy(xxx,yyy)).fillColor != myColor){
   eat(getQ_xy(xxx,yyy),xxx,yyy);
  }
 }  
 
}

function selectNull(){
  for(i=1 ;i<=qiNum;i++){
   document.getElementById("q" + i).strokeWeight=1;
   document.getElementById("q" + i).style.zIndex=3;
   document.getElementById("q" + i).strokeColor="black" ;   
  }
  qID=""; 
  qName=""; 
  xx=0;
  yy=0;
  xxx=0;
  yyy=0;
}
//********以下是走棋和杀棋部分********

function gogo(x,y){
 if (qID !=""){ 
  var obj=document.getElementById(qID);  
  obj.style.left=x;
  obj.style.top=y;
  obj.style.zIndex=3; 
  //selectNull(); 
 }
}

function eat(deadID,x,y){
//吃掉对方棋子
 eatNum+=1;
 var obj=document.getElementById(deadID);
 obj.style.top=(eatNum-1) * 50;
 obj.style.left=500;
 //document.getElementById(deadID).style.display="none";
 gogo(x,y);//走过去 
 if(isKing(deadID)){
  if(window.confirm("你取得了胜利!重来吗?"))
  {
      window.location.reload();
  }
  
 }
}


//*********以下是行棋规则部分*************
//走棋规则
function rule(chessName,x1,y1,x2,y2){ 
    var targetChessId=getQ_xy(x2,y2); 
    if(targetChessId!="")
    {
        var targetChess =document.getElementById(targetChessId);
        if(targetChess.fillColor==myColor)
        {
            gogo(x1,y1);
            return(false); 
        }
    }
 var rtn=false; 
 chessName=chessName.replace(/ /ig,"");
 switch (chessName){
  case "车":
   rtn=ruleChe(x1,y1,x2,y2);
   break; 
  case "马":
   rtn=ruleMa(x1,y1,x2,y2);
   break;  
  case "象":  
   rtn=ruleXiang(x1,y1,x2,y2);
   break;
  case "相":  
   rtn=ruleXiang(x1,y1,x2,y2);
   break; 
  case "士":  
   rtn=ruleShi(x1,y1,x2,y2);
   break;
  case "仕":  
   rtn=ruleShi(x1,y1,x2,y2);
   break; 
  case "将":  
   rtn=ruleJiang(x1,y1,x2,y2);
   break; 
  case "帅":  
   rtn=ruleJiang(x1,y1,x2,y2);
   break;
  case "炮":  
   rtn=rulePao(x1,y1,x2,y2);
   break; 
  case "兵":  
   rtn=ruleBing(x1,y1,x2,y2);
   break; 
  case "卒":  
   rtn=ruleBing(x1,y1,x2,y2);
   break;
  default:
   rtn=false;
   break; 
 }
  
 return(rtn); 
}
//车的走法
function ruleChe(x1,y1,x2,y2){
 var rtn=false;
 //1,面积是0
 var area=getArea(x1,y1,x2,y2); 
 if(area==0){
  //2,前进路上无其他子 
  if((( isX(x1,y1,x2,y2) ) && (getQ_x(x1,x2,y1) =="") )||(( !isX(x1,y1,x2,y2) ) && (getQ_y(y1,y2,x1) =="") ) ){
   rtn=true;
  }
 }   
 return(rtn);
}
//马的走法
function ruleMa(x1,y1,x2,y2){

 var rtn=false;
 //1,面积是50 * 100  
 var area=getArea(x1,y1,x2,y2); 
 if(area==5000 ){  
  //2,长轴上无子
   if ( ( (isX(x1,y1,x2,y2)==true) && (getQ_xy((x1+x2)/2,y1)=="") ) || ( (isX(x1,y1,x2,y2)==false) &&  ( getQ_xy(x1,(y2+y1)/2)=="")  )){
    rtn=true;
   }
 }
 return(rtn);
}
//象的走法
function ruleXiang(x1,y1,x2,y2){
 var rtn=false; 
 //1,面积是100 * 100 而且不是大飞
 var area=getArea(x1,y1,x2,y2); 
 if(area==10000 && (Math.abs((y1-y2))==Math.abs((x1-x2)))){
  //2,不过河y2>=230
  if(y2>=230){ 
   //3,无象眼(x2+x1)/2,(y2+y1)/2位置无棋子   
   if(getQ_xy((x2+x1)/2,(y2+y1)/2)==""){
    rtn=true;
   }
  }
 }
 return(rtn);
}
//士的走法
function ruleShi(x1,y1,x2,y2){

 var rtn=false;
 //1,面积是50*50
 var area=getArea(x1,y1,x2,y2); 
 if(area==2500 ){
  //2,不出9宫x2(130-230)y2(330-430) 
  if(x2>=130 && x2<=230 && y2>=330 && y2<=430){
   rtn=true;
  }
 }
 return(rtn);
}
//将的走法
function ruleJiang(x1,y1,x2,y2){

 var rtn=false;
 //1,某方向只走一格 
 if(isSingle(x1,y1,x2,y2)){
 //2,不出9宫x2(130-230)y2(330-430)
  if(x2>=130 && x2<=230 && y2>=330 && y2<=430){
   rtn=true;
  }
 }
 //3,照面可以笑杀:在y轴和对方老将中间无棋
 //如果是老将,并且满足车的走法
 var tempID=getQ_xy(x2,y2);
 if(isKing(tempID) && ruleChe(x1,y1,x2,y2)){
   
   
   rtn=true;
   
 
 }
 return(rtn);
}
//炮的走法
function rulePao(x1,y1,x2,y2){
 var rtn=false;
 //0,满足车的走法,并且目标点没有棋子
 if(ruleChe(x1,y1,x2,y2)==true && getQ_xy(x2,y2)==""){
 rtn=true;
 }
 else{ 
  //或者满足下面走法:
  //1,面积是0
  var area=getArea(x1,y1,x2,y2); 
  if(area==0 ){
  //2,目标位置是敌人
   var tempID=getQ_xy(x2,y2);

⌨️ 快捷键说明

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