zoukankan      html  css  js  c++  java
  • HTML5学习总结——canvas绘制象棋(canvas绘图)

    一、HTML5学习总结——canvas绘制象棋

    1、第一次:canvas绘制象棋(笨方法)示例代码

      1 <!DOCTYPE html>
      2 <html>
      3 
      4     <head>
      5         <meta charset="UTF-8">
      6         <title>canvas绘图_象棋棋盘</title>
      7     </head>
      8 
      9     <body>
     10         <canvas id="canvas1" width="805" height="905">不支持Canvas</canvas>
     11         <script type="text/javascript">
     12             //棋盘外框
     13             var canvas1 = document.getElementById("canvas1");
     14             var ctx = canvas1.getContext("2d");
     15             ctx.lineWidth = 5;
     16             ctx.strokeStyle = "brown";
     17             ctx.strokeRect(3, 3, 800, 900)
     18                 //此方法用来画棋盘线
     19             function LineDrawing(mx, my, lx, ly) {
     20                 ctx.beginPath();
     21                 ctx.moveTo(mx, my);
     22                 ctx.lineTo(lx, ly);
     23                 ctx.stroke();
     24             };
     25             //棋盘列上半部分
     26             ctx.lineWidth = 2;
     27             LineDrawing(100, 5, 100, 400);
     28             LineDrawing(200, 5, 200, 400);
     29             LineDrawing(300, 5, 300, 400);
     30             //斜线
     31             LineDrawing(300, 5, 500, 200);
     32             LineDrawing(400, 5, 400, 400);
     33             LineDrawing(500, 5, 500, 400);
     34             //反斜线
     35             LineDrawing(500, 5, 300, 200);
     36             LineDrawing(600, 5, 600, 400);
     37             LineDrawing(700, 5, 700, 400);
     38             LineDrawing(100, 5, 100, 400);
     39             LineDrawing(100, 5, 100, 400);
     40 
     41             //棋盘列下半部分
     42             LineDrawing(100, 500, 100, 900);
     43             LineDrawing(200, 500, 200, 900);
     44             LineDrawing(300, 500, 300, 900);
     45             //斜线
     46             LineDrawing(300, 900, 500, 700);
     47             LineDrawing(400, 500, 400, 900);
     48             LineDrawing(500, 500, 500, 900);
     49             //反斜线
     50             LineDrawing(500, 900, 300, 700);
     51             LineDrawing(600, 500, 600, 900);
     52             LineDrawing(700, 500, 700, 900);
     53             //棋盘行
     54             LineDrawing(5, 100, 800, 100);
     55             LineDrawing(5, 200, 800, 200);
     56             LineDrawing(5, 300, 800, 300);
     57             LineDrawing(5, 400, 800, 400);
     58             LineDrawing(5, 500, 800, 500);
     59             LineDrawing(5, 600, 800, 600);
     60             LineDrawing(5, 700, 800, 700);
     61             LineDrawing(5, 800, 800, 800);
     62 
     63             //中心点一(100,200)
     64             //左上
     65             LineDrawing(90, 170, 90, 190);
     66             LineDrawing(90, 190, 70, 190);
     67             //右上
     68             LineDrawing(110, 170, 110, 190);
     69             LineDrawing(110, 190, 130, 190);
     70             //左下
     71             LineDrawing(90, 230, 90, 210);
     72             LineDrawing(90, 210, 70, 210);
     73             //右下
     74             LineDrawing(110, 230, 110, 210);
     75             LineDrawing(110, 210, 130, 210);
     76             //中心点二(700,200)
     77             //左上
     78             LineDrawing(690, 170, 690, 190);
     79             LineDrawing(690, 190, 670, 190);
     80             //右上
     81             LineDrawing(710, 170, 710, 190);
     82             LineDrawing(710, 190, 730, 190);
     83             //左下
     84             LineDrawing(690, 230, 690, 210);
     85             LineDrawing(690, 210, 670, 210);
     86             //右下
     87             LineDrawing(710, 230, 710, 210);
     88             LineDrawing(710, 210, 730, 210);
     89             //中心点三(0,300)
     90             //右上
     91             LineDrawing(20, 270, 20, 290);
     92             LineDrawing(20, 290, 40, 290);
     93             //右下
     94             LineDrawing(20, 330, 20, 310);
     95             LineDrawing(20, 310, 40, 310);
     96             //中心点四(200,300)
     97             //左上
     98             LineDrawing(190, 270, 190, 290);
     99             LineDrawing(190, 290, 170, 290);
    100             //右上
    101             LineDrawing(210, 270, 210, 290);
    102             LineDrawing(210, 290, 230, 290);
    103             //左下
    104             LineDrawing(190, 330, 190, 310);
    105             LineDrawing(190, 310, 170, 310);
    106             //右下
    107             LineDrawing(210, 330, 210, 310);
    108             LineDrawing(210, 310, 230, 310);
    109             //中心点五(400,300)
    110             //左上
    111             LineDrawing(390, 270, 390, 290);
    112             LineDrawing(390, 290, 370, 290);
    113             //右上
    114             LineDrawing(410, 270, 410, 290);
    115             LineDrawing(410, 290, 430, 290);
    116             //左下
    117             LineDrawing(390, 330, 390, 310);
    118             LineDrawing(390, 310, 370, 310);
    119             //右下
    120             LineDrawing(410, 330, 410, 310);
    121             LineDrawing(410, 310, 430, 310);
    122             //中心点六(600,300)
    123             //左上
    124             LineDrawing(590, 270, 590, 290);
    125             LineDrawing(590, 290, 570, 290);
    126             //右上
    127             LineDrawing(610, 270, 610, 290);
    128             LineDrawing(610, 290, 630, 290);
    129             //左下
    130             LineDrawing(590, 330, 590, 310);
    131             LineDrawing(590, 310, 570, 310);
    132             //右下
    133             LineDrawing(610, 330, 610, 310);
    134             LineDrawing(610, 310, 630, 310);
    135             //中心点七(800,300)
    136             //左上
    137             LineDrawing(790, 270, 790, 290);
    138             LineDrawing(790, 290, 770, 290);
    139             //左下
    140             LineDrawing(790, 330, 790, 310);
    141             LineDrawing(790, 310, 770, 310);
    142             //中心点八——对应中心点七(800,600)
    143             //左上
    144             LineDrawing(790, 570, 790, 590);
    145             LineDrawing(790, 590, 770, 590);
    146             //左下
    147             LineDrawing(790, 630, 790, 610);
    148             LineDrawing(790, 610, 770, 610);
    149             //中心点九——对应中心点六(600,600)
    150             //左上
    151             LineDrawing(590, 570, 590, 590);
    152             LineDrawing(590, 590, 570, 590);
    153             //右上
    154             LineDrawing(610, 570, 610, 590);
    155             LineDrawing(610, 590, 630, 590);
    156             //左下
    157             LineDrawing(590, 630, 590, 610);
    158             LineDrawing(590, 610, 570, 610);
    159             //右下
    160             LineDrawing(610, 630, 610, 610);
    161             LineDrawing(610, 610, 630, 610);
    162             //中心点十——对应中心点五(400,600)
    163             //左上
    164             LineDrawing(390, 570, 390, 590);
    165             LineDrawing(390, 590, 370, 590);
    166             //右上
    167             LineDrawing(410, 570, 410, 590);
    168             LineDrawing(410, 590, 430, 590);
    169             //左下
    170             LineDrawing(390, 630, 390, 610);
    171             LineDrawing(390, 610, 370, 610);
    172             //右下
    173             LineDrawing(410, 630, 410, 610);
    174             LineDrawing(410, 610, 430, 610);
    175             //中心点十一——对应中心点四(200,600)
    176             //左上
    177             LineDrawing(190, 570, 190, 590);
    178             LineDrawing(190, 590, 170, 590);
    179             //右上
    180             LineDrawing(210, 570, 210, 590);
    181             LineDrawing(210, 590, 230, 590);
    182             //左下
    183             LineDrawing(190, 630, 190, 610);
    184             LineDrawing(190, 610, 170, 610);
    185             //右下
    186             LineDrawing(210, 630, 210, 610);
    187             LineDrawing(210, 610, 230, 610);
    188             //中心点十二——对应中心点三(0,600)
    189             //右上
    190             LineDrawing(20, 570, 20, 590);
    191             LineDrawing(20, 590, 40, 590);
    192             //右下
    193             LineDrawing(20, 630, 20, 610);
    194             LineDrawing(20, 610, 40, 610);
    195             //中心点十三——对应中心点二(700,500)
    196             //左上
    197             LineDrawing(690, 670, 690, 690);
    198             LineDrawing(690, 690, 670, 690);
    199             //右上
    200             LineDrawing(710, 670, 710, 690);
    201             LineDrawing(710, 690, 730, 690);
    202             //左下
    203             LineDrawing(690, 730, 690, 710);
    204             LineDrawing(690, 710, 670, 710);
    205             //右下
    206             LineDrawing(710, 730, 710, 710);
    207             LineDrawing(710, 710, 730, 710);
    208             //中心点十四——对应中心点一(100,500)
    209             //左上
    210             LineDrawing(90, 670, 90, 690);
    211             LineDrawing(90, 690, 70, 690);
    212             //右上
    213             LineDrawing(110, 670, 110, 690);
    214             LineDrawing(110, 690, 130, 690);
    215             //左下
    216             LineDrawing(90, 730, 90, 710);
    217             LineDrawing(90, 710, 70, 710);
    218             //右下
    219             LineDrawing(110, 730, 110, 710);
    220             LineDrawing(110, 710, 130, 710);
    221             //字体填充:楚河 汉界    
    222             //设置线宽
    223             ctx.lineWidth = 1;
    224             //绘制文字
    225             ctx.font = "60px microsoft yahei";
    226             ctx.save();//保存点
    227             //将坐标中心作为起启点
    228             ctx.translate(canvas1.width / 2, canvas1.height / 2);
    229             var radian = Math.PI / 2; // 弧度制
    230             ctx.rotate(radian); // 旋转画布绘制刻度
    231             //填充
    232             ctx.fillText("", -30, -270);
    233             ctx.fillText("", -30, -150);
    234             ctx.restore();//恢复到保存点
    235             ctx.save();
    236             //将坐标中心作为起启点
    237             ctx.translate(canvas1.width / 2, canvas1.height / 2);
    238             var radian = Math.PI / -2; 
    239             ctx.rotate(radian); 
    240             ctx.fillText("", -30, -270);
    241             ctx.fillText("", -30, -150);
    242             ctx.restore();
    243         </script>
    244     </body>
    245 </html>
    View Code

    运行结果:

    小结: 刚刚学习了canvas,做了一个简单的示例,希望能巩固一下自己所学的知识,从上面的代码可以看出存在很多不足的地方,比如:代码冗余,绘制棋盘的方法也不是很好,虽然功能是实现了,但作为一名写程序的程序员我们要追求完美,不是吗?,所以我又分析了一下我写的代码,发现有很多可以改进的地方比如:绘制棋盘的方法可以用循环来做相对好一些,下面是我的第二次代码改进。

    2、第二次:canvas绘制象棋(改进)示例代码

      1 <!DOCTYPE html>
      2 <html>
      3 
      4     <head>
      5         <meta charset="UTF-8">
      6         <title>canvas绘图_象棋棋盘</title>
      7     </head>
      8 
      9     <body>
     10         <canvas id="canvas1" width="805" height="905">不支持Canvas</canvas>
     11         <script type="text/javascript">
     12             //棋盘外框
     13             var canvas1 = document.getElementById("canvas1");
     14             var ctx = canvas1.getContext("2d");
     15             ctx.lineWidth = 5;
     16             ctx.strokeStyle = "brown";
     17             ctx.strokeRect(3, 3, 800, 900)
     18 
     19             //此方法用来画棋盘线
     20             function LineDrawing(mx, my, lx, ly) {
     21                 ctx.beginPath();
     22                 ctx.moveTo(mx, my);
     23                 ctx.lineTo(lx, ly);
     24                 ctx.stroke();
     25             };
     26 
     27             //棋盘行
     28             function row() {
     29                 for(var i = 100; i <= 800; i += 100) {
     30                     ctx.beginPath();
     31                     ctx.moveTo(5, i);
     32                     ctx.lineTo(800, i);
     33                     ctx.stroke();
     34                 }
     35             }
     36             row();
     37             //棋盘列
     38             function cols() {
     39                 for(var i = 100; i <= 700; i += 100) {
     40                     ctx.beginPath();
     41                     ctx.moveTo(i, 5);
     42                     ctx.lineTo(i, 900);
     43                     ctx.stroke();
     44                 }
     45                 //清除指定的矩形区域
     46                 ctx.clearRect(5, 402, 795, 95);
     47                 //斜线
     48                 LineDrawing(300, 5, 500, 200);
     49                 LineDrawing(300, 705, 500, 900);
     50                 //反斜线
     51                 LineDrawing(500, 5, 300, 200);
     52                 LineDrawing(500, 705, 300, 900);
     53             }
     54             cols();
     55 
     56             function center(x, y) {
     57                 //中心点一(100,200)
     58                 //左上
     59                 LineDrawing(x - 10, y - 30, x - 10, y - 10);
     60                 LineDrawing(x - 10, y - 10, x - 30, y - 10);
     61                 //右上
     62                 LineDrawing(x + 10, y - 30, x + 10, y - 10);
     63                 LineDrawing(x + 10, y - 10, x + 30, y - 10);
     64                 //左下
     65                 LineDrawing(x - 10, y + 30, x - 10, y + 10);
     66                 LineDrawing(x - 10, y + 10, x - 30, y + 10);
     67                 //右下
     68                 LineDrawing(x + 10, y + 30, x + 10, y + 10);
     69                 LineDrawing(x + 10, y + 10, x + 30, y + 10);
     70             }
     71 
     72             //中心点一(100,200)
     73             center(100, 200);
     74             //中心点二(700,200)
     75             center(700, 200);
     76             //中心点三(5,300)
     77             center(5, 300);
     78             //中心点四(200,300)
     79             center(200, 300);
     80             //中心点五(400,300)
     81             center(400, 300);
     82             //中心点六(600,300)
     83             center(600, 300);
     84             //中心点七(800,300)
     85             center(800, 300);
     86             //中心点八(800,600)
     87             center(800, 600);
     88             //中心点九(600,600)
     89             center(600, 600);
     90             //中心点十(400,600)
     91             center(400, 600);
     92             //中心点十一(200,600)
     93             center(200, 600);
     94             //中心点十二(5,600)
     95             center(5, 600);
     96             //中心点十三(700,700)
     97             center(700, 700);
     98             //中心点十四(100,700)
     99             center(100, 700);
    100             //字体填充:楚河 汉界    
    101             //设置线宽
    102             ctx.lineWidth = 1;
    103             //绘制文字
    104             ctx.font = "60px microsoft yahei";
    105             ctx.save(); //保存点
    106             //将坐标中心作为起启点
    107             ctx.translate(canvas1.width / 2, canvas1.height / 2);
    108             var radian = Math.PI / 2; // 弧度制
    109             ctx.rotate(radian); // 旋转画布绘制刻度
    110             //填充
    111             ctx.fillText("", -30, -270);
    112             ctx.fillText("", -30, -150);
    113             ctx.restore(); //恢复到保存点
    114             ctx.save();
    115             //将坐标中心作为起启点
    116             ctx.translate(canvas1.width / 2, canvas1.height / 2);
    117             var radian = Math.PI / -2; 
    118             ctx.rotate(radian); // 旋转画布绘制刻度
    119             ctx.fillText("", -30, -270);
    120             ctx.fillText("", -30, -150);
    121             ctx.restore();
    122         </script>
    123     </body>
    124 
    125 </html>
    View Code

    运行结果:

    小结: 经过一番改进,代码从原来的245行代码减少到了125行,代码冗余和方法使用的问题解决了,那么是不是完事了呢?我再次检查了一下我写的代码,发现还是有改进的地方,就是JavaScript脚本写的比较乱,定义的方法变量都暴露都直接暴露在window下有可能与别的js冲突,可以进行简单封装,下面是我的第三次代码改进。

    3、第三次:canvas绘制象棋(封装JavaScript)示例代码

      1 <!DOCTYPE html>
      2 <html>
      3 
      4     <head>
      5         <meta charset="UTF-8">
      6         <title>canvas绘图_象棋盘</title>
      7     </head>
      8 
      9     <body>
     10         <canvas id="canvas1" width="805" height="905">不支持Canvas</canvas>
     11         <script type="text/javascript">
     12             var object = {
     13                 //初始化
     14                 init: function() {
     15                     //棋盘外框
     16                     var canvas1 = document.getElementById("canvas1");
     17                     this.ctx = canvas1.getContext("2d");
     18                     this.ctx.lineWidth = 5;
     19                     this.ctx.strokeStyle = "brown";
     20                     this.ctx.strokeRect(3, 3, 800, 900);
     21 
     22                     this.row();
     23                     this.cols();
     24                     this.drawFont();
     25                     //中心点一(100,200)
     26                     this.center(100, 200);
     27                     //中心点二(700,200)
     28                     this.center(700, 200);
     29                     //中心点三(5,300)
     30                     this.center(5, 300);
     31                     //中心点四(200,300)
     32                     this.center(200, 300);
     33                     //中心点五(400,300)
     34                     this.center(400, 300);
     35                     //中心点六(600,300)
     36                     this.center(600, 300);
     37                     //中心点七(800,300)
     38                     this.center(800, 300);
     39                     //中心点八(800,600)
     40                     this.center(800, 600);
     41                     //中心点九(600,600)
     42                     this.center(600, 600);
     43                     //中心点十(400,600)
     44                     this.center(400, 600);
     45                     //中心点十一(200,600)
     46                     this.center(200, 600);
     47                     //中心点十二(5,600)
     48                     this.center(5, 600);
     49                     //中心点十三(700,700)
     50                     this.center(700, 700);
     51                     //中心点十四(100,700)
     52                     this.center(100, 700);
     53 
     54                 },
     55                 //此方法用来画棋盘线
     56                 LineDrawing: function(mx, my, lx, ly) {
     57                     this.ctx.beginPath();
     58                     this.ctx.moveTo(mx, my);
     59                     this.ctx.lineTo(lx, ly);
     60                     this.ctx.stroke();
     61                 },
     62                 //棋盘行
     63                 row: function() {
     64                     for(var i = 100; i <= 800; i += 100) {
     65                         this.ctx.beginPath();
     66                         this.ctx.moveTo(5, i);
     67                         this.ctx.lineTo(800, i);
     68                         this.ctx.stroke();
     69                     }
     70                 },
     71                 //棋盘列
     72                 cols: function() {
     73                     for(var i = 100; i <= 700; i += 100) {
     74                         this.ctx.beginPath();
     75                         this.ctx.moveTo(i, 5);
     76                         this.ctx.lineTo(i, 900);
     77                         this.ctx.stroke();
     78                     }
     79                     //清除指定的矩形区域
     80                     this.ctx.clearRect(5, 402, 795, 95);
     81                     //斜线
     82                     this.LineDrawing(300, 5, 500, 200);
     83                     this.LineDrawing(300, 705, 500, 900);
     84                     //反斜线
     85                     this.LineDrawing(500, 5, 300, 200);
     86                     this.LineDrawing(500, 705, 300, 900);
     87                 },
     88                 //坐标的中心点
     89                 center: function(x, y) {
     90                     this.ctx.lineWidth = 5;
     91                     //中心点一(100,200)
     92                     //左上
     93                     this.LineDrawing(x - 10, y - 30, x - 10, y - 10);
     94                     this.LineDrawing(x - 10, y - 10, x - 30, y - 10);
     95                     //右上
     96                     this.LineDrawing(x + 10, y - 30, x + 10, y - 10);
     97                     this.LineDrawing(x + 10, y - 10, x + 30, y - 10);
     98                     //左下
     99                     this.LineDrawing(x - 10, y + 30, x - 10, y + 10);
    100                     this.LineDrawing(x - 10, y + 10, x - 30, y + 10);
    101                     //右下
    102                     this.LineDrawing(x + 10, y + 30, x + 10, y + 10);
    103                     this.LineDrawing(x + 10, y + 10, x + 30, y + 10);
    104                 },
    105                 drawFont: function() {
    106                     this.ctx.lineWidth = 1;
    107                     //绘制文字
    108                     this.ctx.font = "60px microsoft yahei";
    109                     this.ctx.save(); //保存点
    110                     //将坐标中心作为起启点
    111                     this.ctx.translate(canvas1.width / 2, canvas1.height / 2);
    112                     var radian = Math.PI / 2; // 弧度制 Math.PI=π
    113                     this.ctx.rotate(radian); // 旋转画布绘制刻度
    114                     //填充
    115                     
    116                     this.ctx.fillText("", -30, -270);
    117                     this.ctx.fillText("", -30, -150);
    118                     this.ctx.restore(); //恢复到保存点
    119                     this.ctx.save();
    120                     //将坐标中心作为起启点
    121                     this.ctx.translate(canvas1.width / 2, canvas1.height / 2);
    122                     var radian = Math.PI / -2; 
    123                     this.ctx.rotate(radian);
    124                     this.ctx.fillText("", -30, -270);
    125                     this.ctx.fillText("", -30, -150);
    126                     this.ctx.restore();
    127                 }
    128             };
    129             object.init();
    130         </script>
    131     </body>
    132 </html>
    View Code

    运行结果:

    小结:经过简单封装后的代码,在整个window对象中只暴露object对象,这样看起来就比较好一些了,到现在为止这个简单的示例就可以说是做完了,深呼了口气,终于做完了,然后,再次看了下这个棋盘,发现好像还缺了点什么东西,对,此刻我意识到了,是缺了点东西,象棋...象棋,只有棋盘没有棋子怎么行?然后又做了一些改进,下面是我的第四次代码改进。

    4、第四次:canvas绘制象棋(封装JavaScript)+绘制棋子示例代码

      1 <!DOCTYPE html>
      2 <html>
      3 
      4     <head>
      5         <meta charset="UTF-8">
      6         <title>canvas绘图_象棋盘</title>
      7     </head>
      8 
      9     <body>
     10         <canvas id="canvas1" style="background-color:burlywood" width="1005" height="1105">不支持Canvas</canvas>
     11         <img src="../img/blue-ju.gif" id="ju" hidden="hidden" />
     12         <img src="../img/blue-ma.gif" id="ma" hidden="hidden" />
     13         <img src="../img/blue-xiang.gif" id="xiang" hidden="hidden" />
     14         <img src="../img/blue-shi.gif" id="shi" hidden="hidden" />
     15         <img src="../img/blue-jiang.gif" id="jiang" hidden="hidden" />
     16         <img src="../img/blue-pao.gif" id="pao" hidden="hidden" />
     17         <img src="../img/blue-bing.gif" id="bing" hidden="hidden" />
     18 
     19         <img src="../img/red-ju.gif" id="r_ju" hidden="hidden" />
     20         <img src="../img/red-ma.gif" id="r_ma" hidden="hidden" />
     21         <img src="../img/red-xiang.gif" id="r_xiang" hidden="hidden" />
     22         <img src="../img/red-shi.gif" id="r_shi" hidden="hidden" />
     23         <img src="../img/red-jiang.gif" id="r_jiang" hidden="hidden" />
     24         <img src="../img/red-pao.gif" id="r_pao" hidden="hidden" />
     25         <img src="../img/red-bing.gif" id="r_bing" hidden="hidden" />
     26         <script type="text/javascript">
     27             var object = {
     28                 //初始化
     29                 init: function() {
     30                     //棋盘外框
     31                     var canvas1 = document.getElementById("canvas1");
     32                     this.ctx = canvas1.getContext("2d");
     33                     this.ctx.lineWidth = 5;
     34                     this.ctx.strokeStyle = "brown";
     35                     this.ctx.strokeRect(100, 100, 800, 900);
     36 
     37                     this.row();
     38                     this.cols();
     39                     this.drawFont();
     40                     //注意:现在的原点中心为(100,100),所以下面的所有坐标在原来的基础上加(x+100,y+100);
     41                     //中心点一(1000,200)
     42                     this.center(200, 300);
     43                     //中心点二(700,200)
     44                     this.center(800, 300);
     45                     //中心点三(5,300)
     46                     this.center(105, 400);
     47                     //中心点四(200,300)
     48                     this.center(300, 400);
     49                     //中心点五(400,300)
     50                     this.center(500, 400);
     51                     //中心点六(600,300)
     52                     this.center(700, 400);
     53                     //中心点七(800,300)
     54                     this.center(900, 400);
     55                     //中心点八(800,600)
     56                     this.center(900, 700);
     57                     //中心点九(600,600)
     58                     this.center(700, 700);
     59                     //中心点十(400,600)
     60                     this.center(500, 700);
     61                     //中心点十一(200,600)
     62                     this.center(300, 700);
     63                     //中心点十二(5,600)
     64                     this.center(105, 700);
     65                     //中心点十三(700,700)
     66                     this.center(800, 800);
     67                     //中心点十四(100,700)
     68                     this.center(200, 800);
     69 
     70                     //必须当页面中的图片资源加载成功,再画棋子
     71                     window.onload = function() {
     72                         //棋子图片
     73                         var ju = document.getElementById("ju");
     74                         var ma = document.getElementById("ma");
     75                         var xiang = document.getElementById("xiang");
     76                         var shi = document.getElementById("shi");
     77                         var jiang = document.getElementById("jiang");
     78                         var bing = document.getElementById("bing");
     79                         var pao = document.getElementById("pao");
     80 
     81                         var r_ju = document.getElementById("r_ju");
     82                         var r_ma = document.getElementById("r_ma");
     83                         var r_xiang = document.getElementById("r_xiang");
     84                         var r_shi = document.getElementById("r_shi");
     85                         var r_jiang = document.getElementById("r_jiang");
     86                         var r_bing = document.getElementById("r_bing");
     87                         var r_pao = document.getElementById("r_pao");
     88                         //将棋子图像绘制到画布上
     89                         object.ctx.drawImage(ju, 50, 50, 100, 100);
     90                         object.ctx.drawImage(ma, 150, 50, 100, 100);
     91                         object.ctx.drawImage(xiang, 250, 50, 100, 100);
     92                         object.ctx.drawImage(shi, 350, 50, 100, 100);
     93                         object.ctx.drawImage(jiang, 450, 50, 100, 100);
     94                         object.ctx.drawImage(shi, 550, 50, 100, 100);
     95                         object.ctx.drawImage(xiang, 650, 50, 100, 100);
     96                         object.ctx.drawImage(ma, 750, 50, 100, 100);
     97                         object.ctx.drawImage(ju, 850, 50, 100, 100);
     98                         object.ctx.drawImage(pao, 150, 250, 100, 100);
     99                         object.ctx.drawImage(pao, 750, 250, 100, 100);
    100                         object.ctx.drawImage(bing, 50, 350, 100, 100);
    101                         object.ctx.drawImage(bing, 250, 350, 100, 100);
    102                         object.ctx.drawImage(bing, 450, 350, 100, 100);
    103                         object.ctx.drawImage(bing, 650, 350, 100, 100);
    104                         object.ctx.drawImage(bing, 850, 350, 100, 100);
    105 
    106                         object.ctx.drawImage(r_ju, 50, 950, 100, 100);
    107                         object.ctx.drawImage(r_ma, 150, 950, 100, 100);
    108                         object.ctx.drawImage(r_xiang, 250, 950, 100, 100);
    109                         object.ctx.drawImage(r_shi, 350, 950, 100, 100);
    110                         object.ctx.drawImage(r_jiang, 450, 950, 100, 100);
    111                         object.ctx.drawImage(r_shi, 550, 950, 100, 100);
    112                         object.ctx.drawImage(r_xiang, 650, 950, 100, 100);
    113                         object.ctx.drawImage(r_ma, 750, 950, 100, 100);
    114                         object.ctx.drawImage(r_ju, 850, 950, 100, 100);
    115                         object.ctx.drawImage(r_pao, 150, 750, 100, 100);
    116                         object.ctx.drawImage(r_pao, 750, 750, 100, 100);
    117                         object.ctx.drawImage(r_bing, 50, 650, 100, 100);
    118                         object.ctx.drawImage(r_bing, 250, 650, 100, 100);
    119                         object.ctx.drawImage(r_bing, 450, 650, 100, 100);
    120                         object.ctx.drawImage(r_bing, 650, 650, 100, 100);
    121                         object.ctx.drawImage(r_bing, 850, 650, 100, 100);
    122 
    123                     }
    124                 },
    125                 //此方法用来画棋盘线
    126                 LineDrawing: function(mx, my, lx, ly) {
    127                     this.ctx.beginPath();
    128                     this.ctx.moveTo(mx, my);
    129                     this.ctx.lineTo(lx, ly);
    130                     this.ctx.stroke();
    131                 },
    132                 //棋盘行
    133                 row: function() {
    134                     for(var i = 200; i <= 900; i += 100) {
    135                         this.ctx.beginPath();
    136                         this.ctx.moveTo(105, i);
    137                         this.ctx.lineTo(900, i);
    138                         this.ctx.stroke();
    139                     }
    140                 },
    141                 //棋盘列
    142                 cols: function() {
    143                     for(var i = 200; i <= 800; i += 100) {
    144                         this.ctx.beginPath();
    145                         this.ctx.moveTo(i, 105);
    146                         this.ctx.lineTo(i, 1000);
    147                         this.ctx.stroke();
    148                     }
    149                     //清除指定的矩形区域
    150                     //this.ctx.clearRect(5, 402,795, 95);
    151                     this.ctx.clearRect(102.5, 502, 795, 95);
    152                     //斜线
    153                     this.LineDrawing(400, 105, 600, 300);
    154                     this.LineDrawing(400, 805, 600, 1000);
    155                     //反斜线
    156                     this.LineDrawing(600, 105, 400, 300);
    157                     this.LineDrawing(600, 805, 400, 1000);
    158                 },
    159                 //坐标的中心点
    160                 center: function(x, y) {
    161                     this.ctx.lineWidth = 5;
    162                     //中心点一(100,200)
    163                     //左上
    164                     this.LineDrawing(x - 10, y - 30, x - 10, y - 10);
    165                     this.LineDrawing(x - 10, y - 10, x - 30, y - 10);
    166                     //右上
    167                     this.LineDrawing(x + 10, y - 30, x + 10, y - 10);
    168                     this.LineDrawing(x + 10, y - 10, x + 30, y - 10);
    169                     //左下
    170                     this.LineDrawing(x - 10, y + 30, x - 10, y + 10);
    171                     this.LineDrawing(x - 10, y + 10, x - 30, y + 10);
    172                     //右下
    173                     this.LineDrawing(x + 10, y + 30, x + 10, y + 10);
    174                     this.LineDrawing(x + 10, y + 10, x + 30, y + 10);
    175                 },
    176                 drawFont: function() {
    177                     this.ctx.lineWidth = 1;
    178                     //绘制文字
    179                     this.ctx.font = "60px microsoft yahei";
    180                     this.ctx.save(); //保存点
    181                     //将坐标中心作为起启点
    182                     this.ctx.translate(canvas1.width / 2, canvas1.height / 2);
    183                     var radian = Math.PI / 2; // 弧度制 Math.PI=π
    184                     this.ctx.rotate(radian); // 旋转画布绘制刻度
    185                     //填充
    186                     this.ctx.fillText("", -30, -270);
    187                     this.ctx.fillText("", -30, -150);
    188                     this.ctx.restore(); //恢复到保存点
    189                     this.ctx.save();
    190                     //将坐标中心作为起点
    191                     this.ctx.translate(canvas1.width / 2, canvas1.height / 2);
    192                     var radian = Math.PI / -2;
    193                     this.ctx.rotate(radian);
    194                     this.ctx.fillText("", -30, -270);
    195                     this.ctx.fillText("", -30, -150);
    196                     this.ctx.restore();
    197                 }
    198             };
    199             object.init();
    200         </script>
    201     </body>
    202 
    203 </html>
    View Code

    运行结果如下:

    小结:上面只是在原来的基础上添加了绘制棋子的代码,看到这个效果,感觉算是看到象棋的影子了,通过这个简单的示例,我总结了一下:就是做任何事情都要追求完美,先把功能做好后,再考虑代码优化、美化界面。上面的示例若有不足之处,欢迎大家批评指正!谢谢。

     二、示例下载

    GitHub下载地址:https://github.com/SeeYouBug2/Canvas-Draw-Chess.git

    三、了解更多canvas的知识

    HTML5 学习笔记(四)——canvas绘图、WebGL、SVG

    如果觉得文章对您有用,请点个推荐,如果觉得喜欢请随意打赏。您的支持将鼓励我继续创作!谢谢!
    打赏支持
    +

    (^_^)感谢您的支持(^_^)

    微信支付
    支付宝支付
    作者: seeyoubug 点击这里给我发消息
    版权声明:本人博客中若是转载博客,文章底部会给出原文链接,版权归原作者所有,其余均为原创博客,版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Java第一次作业——Java语言基础
    P田日志<1>
    没解决的问题-git连接失败
    解决每次centos7执行java --version git --version等命令时都要重新source /etc/profile后才能执行,否则找不到命令-转载
    【Linux】VMware虚拟机中如何配置静态IP-转载
    Parallels Desktop 16 破解版 出现网络初始化失败和不能连接USB设备解决方法-转载
    Ubuntu安装git时出错,git-compat-util.h:280:25: fatal error: openssl/ssl.h: 没有那个文件或目录-转载
    遇到的问题29
    解决Idea 导入maven工程编译 Error running 'tms [clean]': Cannot run program "C:Program FilesJavajdk --转载
    jenkins执行shell命令时,提示“Command not found”处理方法-需要在jenkins调用shell脚本的最前面加一行脚本, #!/bin/bash -ilex-------转载
  • 原文地址:https://www.cnblogs.com/SeeYouBug/p/html_canvas_seeyoubug.html
Copyright © 2011-2022 走看看