backsword通过本文主要向大家介绍了canvas实现动画,canvas实现画图,canvas中国地图,canvas游戏开发,canvas等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
效果如下:

代码如下:
<!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: #EAC591;
}
#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/1.9.1/jquery.min.js"></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?args.chunk:50;
// this.radius =args&&args.radius?args.radius:23;
// this.CandidateCircleR =args&&args.ccr?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:"馬"}
var Elephant_b1 = {x:3,y:1,text:"象"}
var Scholar_b1 = {x:4,y:1,text:"士"}
var Boss_b = {x:5,y:1,text:"将"}
var Scholar_b2 = {x:6,y:1,text:"士"}
var Elephant_b2 = {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_b2,
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_r2,
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);
}
// 更新棋局
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>");
});
}
// 画横线
obj.drawRowLine = function(){
for(var i =1;i<=10;i++){
this.drawLine(1,i,9,i);
}
}
// 画竖线
obj.drawColLine = function(){
for(var i =1;i<=9;i++){
this.drawLine(i,1,i,10);
}
}
// 画直线
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();
}
// 画#
obj.drawsharpS = function(){
this.round(2,3);
this.round(8,3);
this.round(1,4);
this.round(3,4);
this.round(5,4);
this.round(7,4);
this.round(9,4);
this.round(2,8);
this.round(8,8);
this.round(1,7);
this.round(3,7);
this.round(5,7);
this.round(7,7);
this.round(9,7);
}
// 画单个#
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){
// 左上
this.ctx.moveTo(x0-5,y0-10);
this.ctx.lineTo(x0-5,y0-5);
this.ctx.lineTo(x0-10,y0-5);
// 左下
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){
// 右上
this.ctx.moveTo(x0+5,y0-10);
this.ctx.lineTo(x0+5,y0-5);
this.ctx.lineTo(x0+10,y0-5);
// 右下
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();
}
// 画X
obj.drawX = function(){
this.drawLine(4,1,6,3,0.5);
this.drawLine(4,3,6,1,0.5);
this.drawLine(4,8,6,10,0.5);
this.drawLine(4,10,6,8,0.5);
}
// 画楚河/漢界
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)-5, 20);
this.ctx.fillText(this.text_arr[i], this.chunk*(i+1)-5, this.chunk*10+30+10);
}
}
// 画棋子形状
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();
}
// 画棋子文字
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);
}
// 增加点击事件
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

