html制作象棋教程入门教程,canvas 纯js 绘制中国象棋棋盘

chess();functionchess(){

let canvas= document.getElementById("chess");

let chess= canvas.getContext("2d");

let width=chess.canvas.width;

let height=chess.canvas.height;//单边长

let sidelen = 24;//左侧长度 = 竖直方向

let leftside = 4*sidelen;//顶部长度 = 水平方向

let topside = 8*sidelen;

chess.lineWidth= 2;for(let i=0; i<2; i++){

chess.save();

// 旋转平移得到下半部分

chess.rotate(i*Math.PI);

chess.translate(-i*(topside+sidelen/4-chess.lineWidth),-i*(2*leftside+sidelen));

//画一半的矩形框

drawChessRect(chess,sidelen);//画十字格

for(let x =0; x<5; x++){

drawTen(chess,sidelen/4,Math.PI/2,4,sidelen,x);

}for(let y =0; y<2; y++){

drawTenOther(chess,sidelen/4,Math.PI/2,4,sidelen,y);

}//米字格

drawMi(chess,sidelen);

chess.restore();

}

chess.font= "bold "+(sidelen/2+2)+"px microsoft yahei";

let fontArr = ["楚","河","汉","界"];//楚河 是 -Math.PI 旋转; 汉界 是 Math.PI 的旋转

for(let i=0; i

chess.save();

chess.beginPath();

chess.rotate(-Math.PI/2);

chess.translate(-5*sidelen,0);

chess.fillText(fontArr[i],4,sidelen*(1+2*i));

chess.closePath();

chess.restore();

}else{

chess.save();

chess.beginPath();

chess.rotate(Math.PI/2);

chess.translate(leftside,-topside);//因为此处 i 的取值是 2,3;会造成误差。所以要-2处理

chess.fillText(fontArr[i],6,sidelen*(1+2*(i-2)));

chess.closePath();

chess.restore();

}

}

}//米字格

functiondrawMi(ctx,sidelen){

ctx.save();

ctx.translate(3*sidelen,0);for(let i=0; i<2; i++){

ctx.rotate(i*Math.PI/2);

ctx.translate(0,-i*2*sidelen);

ctx.beginPath();

ctx.moveTo(0,0);

ctx.lineTo(2*sidelen,2*sidelen);

ctx.stroke();

ctx.closePath();

}

ctx.restore();

}//矩形框

functiondrawChessRect(ctx,len){

ctx.translate(2,2);for(let i=0; i<8;i++){for(let j=0; j<4; j++){

ctx.strokeRect(i*len,j*len,len,len);

}

}

}//十字格 drawMi 循环 5

functiondrawTen(ctx,milen,angle,minum,sidelen,x){

ctx.save();

ctx.translate(x*2*sidelen,3*sidelen);for(let i=0; i

drawTenLine(ctx,angle*i,milen);

}

ctx.restore();

}//十字格 循环 2 ;因为translate 无规律

functiondrawTenOther(ctx,milen,angle,minum,sidelen,y){

ctx.save();

ctx.translate((y*6+1)*sidelen,2*sidelen);for(let i=0; i

drawTenLine(ctx,angle*i,milen);

}

ctx.restore();

}//十字格线条

functiondrawTenLine(ctx,angle,milen){

ctx.save();

ctx.beginPath();

ctx.rotate(angle);

ctx.translate(ctx.lineWidth+1,ctx.lineWidth+1);

ctx.moveTo(milen,0);

ctx.lineTo(0,0);

ctx.lineTo(0,milen);

ctx.stroke();

ctx.closePath();

ctx.restore();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值