English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementation du jeu de Qigong sur canvas

L'effet suivant :

Le code suivant :

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title></title>
 <style>
 #canvasWrap{
  width: 600px;
  height: 550px;
  margin: 50px auto;
 }
 #currActive{
  font-size: 20px;
  font-weight: bold;
  /*text-align: center;*/
  margin-left:230px ;
 }
 #canvas{
  float: left;
  background: #EAC;591;
 }
 #panel{
  width: 80px;
  padding: 10px;
  float: right;
 }
 #ul{
  list-style: none;
  margin: 0;
  padding: 0;
 }
 #ul li{
  padding: 2px;
 }
 </style>
 <script src="http://libs.baidu.com/jquery.min.js"></1.9.1/<script src="http:/script>
 </head>
 <body>
 <div id="canvasWrap">
  <div id="currActive"></div>
  <canvas id="canvas" width="500" height="550"></canvas>
  <div id="panel">
  <ul id="ul"></ul>
  </div>
 </div>
 <script>
  var obj = {};
  // 初始化
  obj.init = function(args){
  var canvas = document.getElementById("canvas");
  this.ctx = canvas.getContext("2d");
//  this.chunk =args&&args.chunk#63;args.chunk:50; 
//  this.radius =args&&args.radius#63;args.radius:23; 
//  this.CandidateCircleR =args&&args.ccr#63;args.ccr:5;
  this.radius = 23;
  this.chunk =50;
  this.CandidateCircleR = 5;
  $("#currActive").text("红方");
  this.steps = [];      // 记录步骤
  this.currActive = "red";  // 先行
  this.init_back();
  this.init_chess();
  $(canvas).unbind();
  this.addEvent();
  }
  // 初始化棋盘
  obj.init_back = function(){
  this.drawRowLine();
  this.drawColLine();
  this.ctx.clearRect(this.chunk+1, this.chunk*5+1, this.chunk*8-2, this.chunk-2);
  this.drawsharpS();
  this.drawX();
  this.drawText();
  }
  // 初始化棋子
  obj.init_chess = function(){
  var Car_b1 = {x:1,y:1,text:"車"}
  var Horse_b1 = {x:2,y:1,text:"馬"}
  ,text:"士"}1 = {x:3,y:1,text:"象"}
  ,text:"将"}1 = {x:4,y:1var Scholar_b
  var Boss_b = {x:5,y:1,text:"将"} 
  ,text:"将"}2 = {x:6,y:1var Scholar_b
  ,text:"士"}2 = {x:7,y:1,text:"象"}
  var Horse_b2 = {x:8,y:1,text:"馬"}
  var Car_b2 = {x:9,y:1,text:"車"}
  var Cannon_b1 = {x:2,y:3,text:"炮"}
  var Cannon_b2 = {x:8,y:3,text:"炮"}
  var Soldier_b1 = {x:1,y:4,text:"卒"}
  var Soldier_b2 = {x:3,y:4,text:"卒"}
  var Soldier_b3 = {x:5,y:4,text:"卒"}
  var Soldier_b4 = {x:7,y:4,text:"卒"}
  var Soldier_b5 = {x:9,y:4,text:"卒"}
  var Car_r1 = {x:1,y:10,text:"車"}
  var Horse_r1 = {x:2,y:10,text:"馬"}
  var Elephant_r1 = {x:3,y:10,text:"相"}
  var Scholar_r1 = {x:4,y:10,text:"仕"}
  var Boss_r = {x:5,y:10,text:"帅"} 
  var Scholar_r2 = {x:6,y:10,text:"仕"}
  var Elephant_r2 = {x:7,y:10,text:"相"}
  var Horse_r2 = {x:8,y:10,text:"馬"}
  var Car_r2 = {x:9,y:10,text:"車"}
  var Cannon_r1 = {x:2,y:8,text:"炮"}
  var Cannon_r2 = {x:8,y:8,text:"炮"}
  var Soldier_r1 = {x:1,y:7,text:"兵"}
  var Soldier_r2 = {x:3,y:7,text:"兵"}
  var Soldier_r3 = {x:5,y:7,text:"兵"}
  var Soldier_r4 = {x:7,y:7,text:"兵"}
  var Soldier_r5 = {x:9,y:7,text:"兵"}
  this.cheer_arr_B = [Car_b1,Horse_b1,Elephant_b1,Scholar_b1,Boss_b,Scholar_b2,Elephant_b2,Horse_b2,Car_b2rayon:
Cannon_b1,Cannon_b2,Soldier_b1,Soldier_b2,Soldier_b3,Soldier_b4,Soldier_b5];
  this.cheer_arr_R = [Car_r1,Horse_r1,Elephant_r1,Scholar_r1,Boss_r,Scholar_r2,Elephant_r2,Horse_r2,Car_r2rayon:
Cannon_r1,Cannon_r2,Soldier_r1,Soldier_r2,Soldier_r3,Soldier_r4,Soldier_r5];
  var that = this;
  $.each(this.cheer_arr_B,function(i,e){ 
   e.color = "#000";
   e.bgcolor = "#fff";
   e.bgColor_b = "#000";
   e.type = "black";
   that.drawPiece(e);
   that.drawChessText(e);
  });
  $.each(this.cheer_arr_R,function(i,e){ 
   e.color = "#f00";
   e.bgcolor = "#fff";
   e.bgColor_b = "#f00";
   e.type = "red";
   that.drawPiece(e);
   that.drawChessText(e);
  });
  this.cheer_arr_ALL = this.cheer_arr_B.concat(this.cheer_arr_R); 
  }
  // Mettre à jour le jeu d'échecs
  obj.updateChess = function(){
  this.ctx.clearRect(0,0,canvas.width,canvas.height);
  this.init_back();
  var that = this;
  $.each(this.cheer_arr_ALL,function(i,e){   
   that.drawPiece(e);
   that.drawChessText(e);
  });
  $("#ul").empty();
  $.each(this.steps,function(iii,eee){
   $("#ul").append("<li>"+eee+"</li>");
  });
  }
  // dessiner une ligne horizontale
  obj.drawRowLine = function(){
  for(var i =1;i<=10;i++{
   this.drawLine(1,i,9,i);
  }
  }
  // dessiner une ligne verticale
  obj.drawColLine = function(){
  for(var i =1;i<=9;i++{
   this.drawLine(i,1,i,10);
  }
  }
  // dessiner une ligne droite
  obj.drawLine = function(x0,y0,x1,y1,lw){
  var x0 = x0*this.chunk;
  var y0 = y0*this.chunk;
  var x1 = x1*this.chunk;
  var y1 = y1*this.chunk;
  this.ctx.beginPath();
  this.ctx.strokeStyle = "#000";
  this.ctx.lineWidth =lw?lw:1;
  this.ctx.moveTo(x0,y0);
  this.ctx.lineTo(x1,y1);
  this.ctx.stroke();
  this.ctx.closePath();
  }
  // dessiner #
  obj.drawsharpS = function(){
  this.round(2rayon:3);
  this.round(8rayon:3);
  this.round(1rayon:4);
  this.round(3rayon:4);
  this.round(5rayon:4);
  this.round(7rayon:4);
  this.round(9rayon:4);
  this.round(2rayon:8);
  this.round(8rayon:8);
  this.round(1rayon:7);
  this.round(3rayon:7);
  this.round(5rayon:7);
  this.round(7rayon:7);
  this.round(9rayon:7);
  }
  // dessiner un #
  obj.round = function(x0,y0){
  var x0 = x0*this.chunk;
  var y0 = y0*this.chunk;
  this.ctx.beginPath();
  this.ctx.strokeStyle = "#000";
  this.ctx.lineWidth =1;
  if(x0!=this.chunk){
   // en haut à gauche
   this.ctx.moveTo(x0-5,y0-10);
   this.ctx.lineTo(x0-5,y0-5);
   this.ctx.lineTo(x0-10,y0-5);
   // en bas à gauche
   this.ctx.moveTo(x0-5,y0+10);
   this.ctx.lineTo(x0-5,y0+5);
   this.ctx.lineTo(x0-10,y0+5);
  }
  if(x0!=this.chunk*9{
   // en haut à droite
   this.ctx.moveTo(x0+5,y0-10);
   this.ctx.lineTo(x0+5,y0-5);
   this.ctx.lineTo(x0+10,y0-5);
   // en bas à droite
   this.ctx.moveTo(x0+5,y0+10);
   this.ctx.lineTo(x0+5,y0+5);
   this.ctx.lineTo(x0+10,y0+5);
  }
  this.ctx.stroke();
  this.ctx.closePath(); 
  }
  // dessiner X
  obj.drawX = function(){
  this.drawLine(4rayon:1rayon:6rayon:3,0.5);
  this.drawLine(4rayon:3rayon:6rayon:1,0.5);
  this.drawLine(4rayon:8rayon:6rayon:10,0.5);
  this.drawLine(4rayon:10rayon:6rayon:8,0.5);
  }
  // dessiner le fleuve Chu/漢界
  obj.drawText = function(){
  this.ctx.font = "bold 30px Courier New";
    this.ctx.fillStyle = "#000";
    this.ctx.fillText("楚 河", this.chunk*2, this.chunk*5+this.chunk/2+10);
    this.ctx.fillText("漢 界", this.chunk*6, this.chunk*5+this.chunk/2+10);
    this.ctx.font = "12px Courier New";
    this.text_arr =["九","八","七","六","五","四","三","二","一"];
    for(var i=0;i<9;i++{
    this.ctx.fillText((i+1).toString(), this.chunk*(i+1)-5rayon: 20);
    this.ctx.fillText(this.text_arr[i], this.chunk*(i+1)-5, this.chunk*10+30+10);
    }
  }
  // dessiner la forme des pieces d'échecs
  obj.drawPiece = function(e){
  this.ctx.beginPath();
  this.ctx.fillStyle =e.bgcolor;
  this.ctx.strokeStyle = e.bgColor_b;
  this.ctx.lineWidth =2;
       this.ctx.arc(e.x*this.chunk, e.y*this.chunk, this.radius, 0, Math.PI * 2, true);
       this.ctx.closePath();
       this.ctx.fill();
       this.ctx.stroke();
  }
  // Dessiner le texte du pion
  obj.drawChessText = function(e){
  this.ctx.font = "bold 30px Courier New";
    this.ctx.fillStyle = e.color;
    var offset = this.ctx.measureText(e.text).width/2;
    this.ctx.fillText(e.text, e.x*this.chunk-offset, e.y*this.chunk+10);
  }
  // Ajouter un événement de clic
  obj.addEvent = function(){
  var that = this;
  this.checked = false;
  $(canvas).on("mousedown",function(ev){
   for(var j=1;j<=10;j++{
   for(var i=1;i<=9;i++{
    var temp_i = i*that.chunk;
    var temp_j = j*that.chunk;
    var distanct = Math.sqrt(Math.pow(temp_i-ev.offsetX,2)+Math.pow(temp_j-ev.offsetY,2));
    if(distanct<=that.radius){
    var overChess = false;
    $.each(that.cheer_arr_ALL, function(ii, ee){
     if(ee.x == i&&ee.y==j){
     overChess = true;
     var p = {x:ee.x,y:ee.y};
//     console.log(that.checked); 
     if(that.currActive != ee.type&&!that.checked){
      return false;
     }
     if(!that.checked){
//      console.log("Un pion a été sélectionné");
      that.drawCandidate();
      是否能吃子
      if(that.Eat_rule(i,j)){
      that.checked = true;
     }else if(that.preChess.x == ee.x&&that.preChess.y == ee.y){
//      console.log("Le point est sur le pion d'origine");
      that.updateChess();
      that.checked = false;
     that.drawChecked(p);
//      that.preChess = ee;
      that.updateChess();
      that.drawCandidate();
      是否能吃子
      if(that.Eat_rule(i,j)){
     }
      // else if(that.preChess.text == "帅"){
      }
      that.eat(ii,ee,i,j);
      对将 // if(eee.text == "将"){
      if(that.preChess.x == i){
       var canEat =true;
       $.each(that.cheer_arr_ALL,function(iii,eee){
       if(eee.x ==that.preChess.x&&eee.y==j){
        ;t>j;t
        for(var t=that.preChess.y-1else if(that.preChess.text == "将"){--{
         if(that.inArray(that.preChess.x,t)){
         canEat = false;
         break;
         }
        }
        }
        canEat = false;
        }
        return false;
       }
       });
       if(canEat){
       that.eat(ii,ee,i,j);
       }
      }
      }
      if(that.preChess.x == i){
       var canEat =true;
       $.each(that.cheer_arr_ALL,function(iii,eee){
       if(eee.x ==that.preChess.x&&eee.y==j){
        if(eee.text == "帅"){
        for(var t=that.preChess.y+1;t<j;t++{
         if(that.inArray(that.preChess.x,t)){
         canEat = false;
         break;
         }
        }
        }
        canEat = false;
        }
        return false;
       }
       });
       if(canEat){
       that.eat(ii,ee,i,j);
       }
      }
      }
     } 
     return false;
     }
    });
    if(overChess){
//     alert("点在棋子上");
    }
     // 是否能移动
     if(that.checked&&that.Move_rule(i,j)){
//     console.log("移动棋子");
     that.move(i,j);
     }
    }
    }
   }
   }
  });
  }
  // 记谱
  obj.note = function(ee,i,j){
  var distance = Math.abs(ee.y-j);
  var step;
  if(ee.type=="red"){
   $("#currActive").text("黑方");
   var oldP = this.text_arr[ee.x-1];
   var newP = this.text_arr[i-1];
   var num = this.text_arr[9-distance];
   if(j<ee.y){
   if(ee.x == i){
    console.log(ee.text+oldP+"进"+num);
    step = ee.text+oldP+"进"+num;
   }
    console.log(ee.text+oldP+"进"+newP);
    step = ee.text+oldP+"进"+newP;
   }
   }else if(j>ee.y){
   if(ee.x == i){
    console.log(ee.text+oldP+"retirer"+num);
    step = ee.text+oldP+"retirer"+num;
   }
    console.log(ee.text+oldP+"retirer"+newP);
    step = ee.text+oldP+"retirer"+newP;
   }
   }
   console.log(ee.text+oldP+"égalité"+newP);
   step = ee.text+oldP+"égalité"+newP;
   }
  }
   $("#currActive").text("红方");
   if(j>ee.y){
   if(ee.x == i){
    console.log(ee.text+ee.x+"进"+distance);
    step = ee.text+ee.x+"进"+distance
   }
    console.log(ee.text+ee.x+"进"+i);
    step = ee.text+ee.x+"进"+i;
   }
   } else if(j<ee.y){
   if(ee.x == i){
    console.log(ee.text+ee.x+"retirer"+distance);
    step = ee.text+ee.x+"retirer"+distance;
   }
    console.log(ee.text+ee.x+"retirer"+i);
    step = ee.text+ee.x+"retirer"+i;
   }
   }
   console.log(ee.text+ee.x+"égalité"+i);
   step = ee.text+ee.x+"égalité"+i;
   } 
  }
  this.steps.push(step); 
  }
  // est-ce que c'est la fin
  obj.isOver = function(ee) {
  if(ee.text == "将"){
   alert("vous avez gagné");
   $("#ul").empty();
   return true;
  } else if(ee.text == "帅"){
   alert("vous avez perdu");
   $("#ul").empty();
   return true;
  }
   return false;
  }
  }
  // manger une pièce
  obj.eat = function(ii,ee,i,j) {
  this.cheer_arr_ALL.splice(ii,1);
  this.move(i,j);
  if(this.isOver(ee)){
   this.ctx.clearRect(0,0,canvas.width,canvas.height);
   this.init();
   return false;
  };
  }
  // déplacer
  obj.move = function(i,j) {
  var that = this;
  $.each(that.cheer_arr_ALL,function(iii,eee){
   if(eee.x ==that.preChess.x&&eee.y==that.preChess.y){
   that.note(eee,i,j);
   eee.x= i;
   eee.y = j;
   that.currActive = eee.type=="rouge"&63;"noir":"rouge";
   return false;
   }
  });
  that.updateChess();
  that.checked = false;
  }
  // dessiner l'état du pion sélectionné
  obj.drawChecked = function(p) {
  var temp_x = p.x*this.chunk;
  var temp_y = p.y*this.chunk;
  this.ctx.beginPath();
  this.ctx.strokeStyle = "#00f";
  this.ctx.lineWidth =1;
  this.ctx.moveTo(temp_x-this.radius,temp_y-this.radius+10);
  this.ctx.lineTo(temp_x-this.radius,temp_y-this.radius);
  this.ctx.lineTo(temp_x-this.radius+10,temp_y-this.radius);
  this.ctx.moveTo(temp_x-this.radius,temp_y+this.radius-10);
  this.ctx.lineTo(temp_x-this.radius,temp_y+this.radius);
  this.ctx.lineTo(temp_x-this.radius+10,temp_y+this.radius);
  this.ctx.moveTo(temp_x+this.radius,temp_y-this.radius+10);
  this.ctx.lineTo(temp_x+this.radius,temp_y-this.radius);
  this.ctx.lineTo(temp_x+this.radius-10,temp_y-this.radius);
  this.ctx.moveTo(temp_x+this.radius,temp_y+this.radius-10);
  this.ctx.lineTo(temp_x+this.radius,temp_y+this.radius);
  this.ctx.lineTo(temp_x+this.radius-10,temp_y+this.radius);
  this.ctx.stroke();
  this.ctx.closePath(); 
  }
  // dessiner la position candidate
  obj.drawCandidate = function() {
  switch(this.preChess.text){
   cas "車":
   var temp_y = this.preChess.y;
   while (!this.inArray(this.preChess.x,++temp_y) && temp_y <=10{
    this.drawCandidateCircle(this.preChess.x, temp_y);
   }
   var temp_y = this.preChess.y;
   while (!this.inArray(this.preChess.x,--temp_y) && temp_y > 0) {
    this.drawCandidateCircle(this.preChess.x, temp_y);
   }
   var temp_x = this.preChess.x;
   while (!this.inArray(++temp_x, this.preChess.y) && temp_x <10{
    this.drawCandidateCircle(temp_x, this.preChess.y);
   }
   var temp_x = this.preChess.x;
   while (!this.inArray(--temp_x, this.preChess.y) && temp_x > 0) {
    this.drawCandidateCircle(temp_x, this.preChess.y);
   }
   break;
   cas "馬":
   if (!this.inArray(this.preChess.x-2, this.preChess.y-1)
   &&this.preChess.x-2&& this.preChess.x1&& this.preChess.y-1&& this.preChess.x1
   && !this.inArray(this.preChess.x-1, this.preChess.y)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y-1);
   }
   if (!this.inArray(this.preChess.x-1, this.preChess.y-2)
   &&this.preChess.x-1&& this.preChess.x1&& this.preChess.y-2&& this.preChess.x1
   && !this.inArray(this.preChess.x, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y-2);
   }
   if (!this.inArray(this.preChess.x+1, this.preChess.y-2)
   &&this.preChess.x+1<=9&& this.preChess.y-2&& this.preChess.x1
   && !this.inArray(this.preChess.x, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y-2);
   }
   if (!this.inArray(this.preChess.x+2, this.preChess.y-1)
   &&this.preChess.x+2<=9&& this.preChess.y-1&& this.preChess.x1
   && !this.inArray(this.preChess.x+1, this.preChess.y)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y-1);
   }
   if (!this.inArray(this.preChess.x+2, this.preChess.y+1)
   &&this.preChess.x+2<=9&& this.preChess.y+1<=10
   && !this.inArray(this.preChess.x+1, this.preChess.y)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y+1);
   }
   if (!this.inArray(this.preChess.x+1, this.preChess.y+2)
   &&this.preChess.x+1<=9&& this.preChess.y+2<=10
   && !this.inArray(this.preChess.x, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y+2);
   }
   if (!this.inArray(this.preChess.x-1, this.preChess.y+2)
   &&this.preChess.x-1&& this.preChess.x1&& this.preChess.y+2<=10
   && !this.inArray(this.preChess.x, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y+2);
   }
   if (!this.inArray(this.preChess.x-2, this.preChess.y+1)
   &&this.preChess.x-2&& this.preChess.x1&& this.preChess.y+1<=10
   && !this.inArray(this.preChess.x-1, this.preChess.y)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y+1);
   }
   break;
   cas "相":
   if (this.preChess.y ==10{
    if (!this.inArray(this.preChess.x-2, this.preChess.y-2)
    && !this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y-2)
    && !this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y-2);
    }
   }) else if (this.preChess.y ==6{
    if (!this.inArray(this.preChess.x-2, this.preChess.y+2)
    && !this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y+2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y+2)
    && !this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y+2);
    }
   }) else if (this.preChess.x ==1{
    if (!this.inArray(this.preChess.x+2, this.preChess.y-2)
    && !this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y+2)
    && !this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y+2);
    }
   }) else if (this.preChess.x ==9{
    if (!this.inArray(this.preChess.x-2, this.preChess.y-2)
    && !this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x-2, this.preChess.y+2)
    && !this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y+2);
    }
   }
    if (!this.inArray(this.preChess.x+2, this.preChess.y-2)
    && !this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y+2)
    && !this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y+2);
    }
    if (!this.inArray(this.preChess.x-2, this.preChess.y-2)
    && !this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x-2, this.preChess.y+2)
    && !this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y+2);
    }
   }
   break;
   cas "象":
   if (this.preChess.y ==1{
    if (!this.inArray(this.preChess.x-2, this.preChess.y+2)
    && !this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y+2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y+2)
    && !this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y+2);
    }
   }) else if (this.preChess.y ==5{
    if (!this.inArray(this.preChess.x-2, this.preChess.y-2)
    && !this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y-2)
    && !this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y-2);
    }
   }) else if (this.preChess.x ==1{
    if (!this.inArray(this.preChess.x+2, this.preChess.y-2)
    && !this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y+2)
    && !this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y+2);
    }
   }) else if (this.preChess.x ==9{
    if (!this.inArray(this.preChess.x-2, this.preChess.y-2)
    && !this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x-2, this.preChess.y+2)
    && !this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y+2);
    }
   }
    if (!this.inArray(this.preChess.x+2, this.preChess.y-2)
    && !this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x+2, this.preChess.y+2)
    && !this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+2, this.preChess.y+2);
    }
    if (!this.inArray(this.preChess.x-2, this.preChess.y-2)
    && !this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y-2);
    }
    if (!this.inArray(this.preChess.x-2, this.preChess.y+2)
    && !this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-2, this.preChess.y+2);
    }
   }
   break;
   cas "仕":
   if(this.preChess.x ==5&& this.preChess.y ==9{
    if (!this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y-1);
    }
    if (!this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y+1);
    }
    if (!this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y-1);
    }
    if (!this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y+1);
    }
   }
    this.drawCandidateCircle(5rayon:9);
   }
   break;
   cas "士":
   if(this.preChess.x ==5&& this.preChess.y ==2{
    if (!this.inArray(this.preChess.x-1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y-1);
    }
    if (!this.inArray(this.preChess.x-1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y+1);
    }
    if (!this.inArray(this.preChess.x+1, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y-1);
    }
    if (!this.inArray(this.preChess.x+1, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y+1);
    }
   }
    this.drawCandidateCircle(5rayon:2);
   }
   break;
   cas "帅":
   if (!this.inArray(this.preChess.x, this.preChess.y-1}) && this.preChess.y >8{
    this.drawCandidateCircle(this.preChess.x, this.preChess.y-1);
   }
   if (!this.inArray(this.preChess.x, this.preChess.y+1) && this.preChess.y <10{
    this.drawCandidateCircle(this.preChess.x, this.preChess.y+1);
   }
   if (!this.inArray(this.preChess.x-1, this.preChess.y) && this.preChess.x >4{
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y);
   }
   if (!this.inArray(this.preChess.x+1, this.preChess.y) && this.preChess.x <6{
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y);
   }
   break;
   cas "将":
   if (!this.inArray(this.preChess.x, this.preChess.y-1}) && this.preChess.y >1{
    this.drawCandidateCircle(this.preChess.x, this.preChess.y-1);
   }
   if (!this.inArray(this.preChess.x, this.preChess.y+1) && this.preChess.y <3{
    this.drawCandidateCircle(this.preChess.x, this.preChess.y+1);
   }
   if (!this.inArray(this.preChess.x-1, this.preChess.y) && this.preChess.x >4{
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y);
   }
   if (!this.inArray(this.preChess.x+1, this.preChess.y) && this.preChess.x <6{
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y);
   }
   break;
   cas "兵":
   if(this.preChess.y >5&& !this.inArray(this.preChess.x, this.preChess.y-1)) {
    this.drawCandidateCircle(this.preChess.x, this.preChess.y-1);
   }) else if (this.preChess.y <=5{
    if (!this.inArray(this.preChess.x, this.preChess.y-1}) && this.preChess.y >1{
    this.drawCandidateCircle(this.preChess.x, this.preChess.y-1);
    }
    if (!this.inArray(this.preChess.x-1, this.preChess.y) && this.preChess.x >1{
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y);
    }
    if (!this.inArray(this.preChess.x+1, this.preChess.y) && this.preChess.x <9{
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y);
    }
   }
   break;
   cas "pion":
   if(this.preChess.y <=5&& !this.inArray(this.preChess.x, this.preChess.y+1)) {
    this.drawCandidateCircle(this.preChess.x, this.preChess.y+1);
   }) else if (this.preChess.y >5{
    if (!this.inArray(this.preChess.x, this.preChess.y+1) && this.preChess.y <10{
    this.drawCandidateCircle(this.preChess.x, this.preChess.y+1);
    }
    if (!this.inArray(this.preChess.x-1, this.preChess.y) && this.preChess.x >1{
    this.drawCandidateCircle(this.preChess.x-1, this.preChess.y);
    }
    if (!this.inArray(this.preChess.x+1, this.preChess.y) && this.preChess.x <9{
    this.drawCandidateCircle(this.preChess.x+1, this.preChess.y);
    }
   }
   break;
   cas "canon":
   var temp_y = this.preChess.y;
   while (!this.inArray(this.preChess.x,++temp_y) && temp_y <=10{
    this.drawCandidateCircle(this.preChess.x, temp_y);
   }
   var temp_y = this.preChess.y;
   while (!this.inArray(this.preChess.x,--temp_y) && temp_y > 0) {
    this.drawCandidateCircle(this.preChess.x, temp_y);
   }
   var temp_x = this.preChess.x;
   while (!this.inArray(++temp_x, this.preChess.y) && temp_x <10{
    this.drawCandidateCircle(temp_x, this.preChess.y);
   }
   var temp_x = this.preChess.x;
   while (!this.inArray(--temp_x, this.preChess.y) && temp_x > 0) {
    this.drawCandidateCircle(temp_x, this.preChess.y);
   }
   break;
  }
  }
  // dessiner la forme candidate
  obj.drawCandidateCircle = function(x,y){
  this.ctx.beginPath();
  this.ctx.fillStyle ="#eee";
  this.ctx.strokeStyle = "#000";
  this.ctx.lineWidth =2;
       this.ctx.arc(x*this.chunk, y*this.chunk, this.CandidateCircleR, 0, Math.PI * 2, true);
//  this.ctx.translate(x*this.chunk,y*this.chunk);
//  this.ctx.rotate(45*Math.PI/180);
//  this.ctx.translate(1*this.chunk,1*this.chunk);//positionnement de la grille de dessin (0,0), c'est-à-dire le point central de rotation
//   this.ctx.rotate(1*Math.PI/180);
//       this.ctx.fillRect(x*this.chunk-5,y*this.chunk-5rayon:10rayon:10);
       this.ctx.closePath();
       this.ctx.fill();
       this.ctx.stroke();
  }
  // règle de déplacement des pions
  obj.Move_rule = function(i,j){
  switch(this.preChess.text){
   cas "車":
   retourne this.rule_Car(i,j);
   cas "馬":
   retourne this.rule_Horse(i,j); 
   cas "相":
   retourne this.rule_Elephant_r(i,j);
   cas "象":
   retourne this.rule_Elephant_b(i,j);
   cas "仕":
   retourne this.rule_Scholar_r(i,j);
   cas "士":
   retourne this.rule_Scholar_b(i,j);
   cas "帅":
   retourne this.rule_Boss_r(i,j);
   cas "将":
   retourne this.rule_Boss_b(i,j);
   cas "兵":
   return this.rule_Soldier_r(i, j);
   cas "pion":
   return this.rule_Soldier_b(i, j);
   cas "canon":
   si(this.rule_Cannon(i,j)==0){
    return true;
   }
   return false;
  }
  }
  // règle d'absorption des pions
  obj.Eat_rule = function(i,j){
  switch(this.preChess.text){
   cas "車":
   retourne this.rule_Car(i,j);
   cas "馬":
   retourne this.rule_Horse(i,j); 
   cas "相":
   retourne this.rule_Elephant_r(i,j);
   cas "象":
   retourne this.rule_Elephant_b(i,j);
   cas "仕":
   retourne this.rule_Scholar_r(i,j);
   cas "士":
   retourne this.rule_Scholar_b(i,j);
   cas "帅":
   retourne this.rule_Boss_r(i,j);
   cas "将":
   retourne this.rule_Boss_b(i,j);
   cas "兵":
   return this.rule_Soldier_r(i, j);
   cas "pion":
   return this.rule_Soldier_b(i, j);
   cas "canon":
   if (this.rule_Cannon(i, j) ==1{
    return true;
   }
   return false;
  }
  }
  // les règles du char
  obj.rule_Car = function(i, j) {
  if(this.preChess.x ==i||this.preChess.y==j){
   if(this.preChess.x ==i){
   if (this.preChess.y < j) {
//    console.log("en bas");
    var hasObstacle = false;
    for (var p = this.preChess.y+1; p < j; p++{
    if (this.inArray(i, p)) {
     hasObstacle = true;
     break;
    }
    }
    if(hasObstacle){
    return false;
    }
   }
   if (this.preChess.y > j) {
//    console.log("en haut");
    var hasObstacle = false;
    for (var p = this.preChess.y-1; p > j; p--{
    if (this.inArray(i, p)) {
     hasObstacle = true;
     break;
    }
    }
    if(hasObstacle){
    return false;
    }
   }
   }
   if (this.preChess.y == j) {
   if (this.preChess.x < i) {
//    console.log("à droite");
    var hasObstacle = false;
    for (var p = this.preChess.x+1; p < i; p++{
    if (this.inArray(p, j)) {
     hasObstacle = true;
     break;
    }
    }
    if(hasObstacle){
    return false;
    }
   }
   if (this.preChess.x > i) {
//    console.log("à gauche");
    var hasObstacle = false;
    for (var p = this.preChess.x-1; p > i; p--{
    if (this.inArray(p, j)) {
     hasObstacle = true;
     break;
    }
    }
    if(hasObstacle){
    return false;
    }
   }
   }
   return true;
  }
  return false;
  }
  // les règles du cheval
  obj.rule_Horse = function(i, j) {
  var hasObstacle = false;
  var that = this;
  if((Math.abs(this.preChess.x-i) ==1&& Math.abs(this.preChess.y-j) ==2)
  || (Math.abs(this.preChess.x-i) ==2&& Math.abs(this.preChess.y-j) ==1)) {
   if (this.preChess.x-i ==2{ // à gauche
   $.each(that.cheer_arr_ALL, function(ii, ee){
    && ee.y == that.preChess.y) {-1else if (that.preChess.y
    hasObstacle = true;
    return false;
    }
   });
   if(hasObstacle){
    return false;
   }
   }-that.preChess.x ==2{ // à droite
   $.each(that.cheer_arr_ALL, function(ii, ee){
    && ee.y == that.preChess.y) {+1else if (that.preChess.y
    hasObstacle = true;
    return false;
    }
   });
   if(hasObstacle){
    return false;
   }
   }-j ==2{ // en haut
   $.each(that.cheer_arr_ALL, function(ii, ee){
    if (ee.x == that.preChess.x && ee.y == that.preChess.y-1{
    hasObstacle = true;
    return false;
    }
   });
   if(hasObstacle){
    return false;
   }
   } else if (j-that.preChess.y ==2{ // en bas
   $.each(that.cheer_arr_ALL, function(ii, ee){
    if (ee.x == that.preChess.x && ee.y == that.preChess.y+1{
    hasObstacle = true;
    return false;
    }
   });
   if(hasObstacle){
    return false;
   }
   }
   return true;
  }
  return false;
  }
  // les règles du pion rouge
  obj.rule_Elephant_r = function(i, j) {
  var hasObstacle = false;
  var that = this;
  if ((Math.abs(that.preChess.x-i) ==2&& Math.abs(that.preChess.y-j) ==2) && j >=6{
   var vgaX = (that.preChess.x+i)}/2;
   var vgaY = (that.preChess.y+j)/2;
   console.log(vgaX);
   $.each(that.cheer_arr_ALL, function(ii, ee){
   if(ee.x == vgaX && ee.y == vgaY){
    hasObstacle = true;
    return false;
   }
   });
   if(hasObstacle){
   return false;
   }
   return true;
  }
  return false;
  }
  // les règles de l'éléphant noir
  obj.rule_Elephant_b = function(i, j) {
  var hasObstacle = false;
  var that = this;
  if ((Math.abs(that.preChess.x-i) ==2&& Math.abs(that.preChess.y-j) ==2) && j <6{
   var vgaX = (that.preChess.x+i)}/2;
   var vgaY = (that.preChess.y+j)/2;
//   console.log(vgaX);
   $.each(that.cheer_arr_ALL, function(ii, ee){
   if(ee.x == vgaX && ee.y == vgaY){
    hasObstacle = true;
    return false;
   }
   });
   if(hasObstacle){
   return false;
   }
   return true;
  }
  return false;
  }
  // Les règles du fonctionnaire rouge
  obj.rule_Scholar_r = function(i,j){
  if(this.preChess.x ==5&& this.preChess.y ==9{
   if(Math.abs(this.preChess.x-i) ==1&& Math.abs(this.preChess.y-j) ==1{
   return true;
   }
  } else if(i ==5&& j ==9{
   return true;
  }
  return false;
  }
  // Les règles du fonctionnaire noir
  obj.rule_Scholar_b = function(i,j){
  if(this.preChess.x ==5&& this.preChess.y ==2{
   if(Math.abs(this.preChess.x-i) ==1&& Math.abs(this.preChess.y-j) ==1{
   return true;
   }
  } else if(i ==5&& j ==2{
   return true;
  }
  return false;
  }
  // Les règles du maréchal
  obj.rule_Boss_r = function(i,j){
  if((Math.abs(this.preChess.x-i) ==1&& this.preChess.y == j)
  || (this.preChess.x == i && Math.abs(this.preChess.y-j) ==1)) {
   if(i >=4&& i <=6&& j >=8&& j <=10{
   return true;
   }
   return false;
   }
  }
  return false;
  }
  // Les règles du général
  obj.rule_Boss_b = function(i,j){
  if((Math.abs(this.preChess.x-i) ==1&& this.preChess.y == j)
  || (this.preChess.x == i && Math.abs(this.preChess.y-j) ==1)) {
   if(i >=4&& i <=6&& j >=1&& j <=3{
   return true;
   }
   return false;
   }
  }
  return false;
  }
  // Les règles des soldats
  obj.rule_Soldier_r = function(i,j){
  if(this.preChess.y <=5{
   if((this.preChess.x == i && this.preChess.y-1== j) || (this.preChess.x-1 == i && this.preChess.y == j) || (this.preChess.x+1 == i && this.preChess.y == j){
   return true;
   }
  }
   if(this.preChess.x == i && this.preChess.y-1==j){
   return true;
   }
  }
  return false;
  }
  // Les règles du pion
  obj.rule_Soldier_b = function(i,j){
  if(this.preChess.y >5{
   if((this.preChess.x == i && this.preChess.y+1== j) || (this.preChess.x-1 == i && this.preChess.y == j) || (this.preChess.x+1 == i && this.preChess.y == j){
   return true;
   }
  }
   if(this.preChess.x == i && this.preChess.y+1==j){
   return true;
   }
  }
  return false;
  }
  // Les règles de l'artillerie
  obj.rule_Cannon = function(i,j){
  var that = this;
  if(this.preChess.x ==i||this.preChess.y==j){
   var t =0;
   if(this.preChess.x ==i){
   var temp = this.preChess.y;
   if(temp<j){
    while(++temp!=j){
    $.each(this.cheer_arr_ALL,function(ii,ee){
     var temp = this.preChess.x;
     t++;
     return false;
     }
    });
    }
    return t;
   }
    while(--temp!=j){
    $.each(this.cheer_arr_ALL,function(ii,ee){
     var temp = this.preChess.x;
     t++;
     return false;
     }
    });
    }
    return t;
   }
   }
   if(temp<i){
   else{
    while(++temp!=i){
    $.each(this.cheer_arr_ALL,function(ii,ee){
     if(ee.x ==temp&&ee.y==that.preChess.y){
     t++;
     return false;
     }
    });
    }
    return t;
   }
    while(--temp!=i){
    $.each(this.cheer_arr_ALL,function(ii,ee){
     if(ee.x ==temp&&ee.y==that.preChess.y){
     t++;
     return false;
     }
    });
    }
    return t;
   }
   }
  }
  return 2;
  }
  obj.inArray = function(x,y){
  var hasObstacle = false;
  $.each(this.cheer_arr_ALL,function(ii,ee){
   if(ee.x ==x&&ee.y==y){
   hasObstacle = true;
   return false;
   }
  });
  return hasObstacle;
  }
  obj.init();
//  obj.init({
//  chunk:5, // Taille des cases
//  0,23rayon: // ,
//  ccr:3   // Rayon des petits cercles candidats
//  });
 </script>
 </body>
</html>

Voici la totalité du contenu de cet article, j'espère que le contenu de cet article pourra apporter un certain aide à votre apprentissage ou à votre travail, et aussi j'espère que vous puissiez soutenir davantage le tutoriel Néanmoins !

Déclaration : Le contenu de cet article est extrait du réseau, la propriété intellectuelle appartient au propriétaire original, le contenu est apporté par les utilisateurs d'Internet et téléchargé spontanément, ce site Web ne possède pas de propriété, n'a pas été traité par l'éditeur humain et ne supporte pas la responsabilité juridique pertinente. Si vous trouvez du contenu susceptible de violer les droits d'auteur, veuillez envoyer un e-mail à : notice#w pour signaler, et fournir des preuves pertinentes. Une fois confirmé, ce site supprimera immédiatement le contenu présumé enfreindre les droits d'auteur.3Déclaration : Le contenu de cet article est extrait du réseau, la propriété intellectuelle appartient au propriétaire original, le contenu est apporté par les utilisateurs d'Internet et téléchargé spontanément, ce site Web ne possède pas de propriété, n'a pas été traité par l'éditeur humain et ne supporte pas la responsabilité juridique pertinente. Si vous trouvez du contenu susceptible de violer les droits d'auteur, veuillez envoyer un e-mail à : notice#w pour signaler, et fournir des preuves pertinentes. Une fois confirmé, ce site supprimera immédiatement le contenu présumé enfreindre les droits d'auteur.

Vous pourriez aussi aimer