今天写了一个canvas画图的象棋 。js基础不行,只画了个图,以后补充。。。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>chess</title>
<style>
canvas{
display: block;
margin:50px auto;
border:1px solid #EAC591;
border-radius: 20px;
box-shadow:2px 2px 30px #080808;
}
</style>
</head>
<body>
<canvas id="canvas" width="460" height="510"></canvas>
<script>
var chess = {}
chess.init = function () {
//获取上下文
var canvas = document.getElementById("canvas");
this.ctx = canvas.getContext("2d");
//初始化
this.padding= 30; //预留外边框的空隙
this.cell= 50; //棋盘空隙
this.chessRadius= 20; //棋子半径
this.fontSize= 36; //棋子文字大小
this.width=400; //棋盘的宽度 50*8
this.height= 450; //棋盘高度 50*9
this.offsetWidth = 460;
this.offsetHeight = 510;
this.array = [
["车","马","相","士","将","士","相","马","车"],
[" "," "," "," "," "," "," "," "," "],
[" ","炮"," "," "," "," "," ","炮"," "],
["兵"," ","兵"," ","兵"," ","兵"," ","兵"],
[" "," "," "," "," "," "," "," "," "],
[" "," "," "," "," "," "," "," "," "],
["卒"," ","卒"," ","卒"," ","卒"," ","卒"],
[" ","炮"," "," "," "," "," ","炮"," "],
[" "," "," "," "," "," "," "," "," "],
["車","馬","象","仕","帅","仕","象","馬","車"] ]
this.init_back();
this.init_piece();
this.addEvent();
}
//棋盘初始化
chess.init_back =function () {
var p = this.padding;
var c = this.cell;
var w = this.width;
var h = this.height;
var ow =this.offsetWidth;
var oh = this.offsetHeight;
this.drawBg(0,0,ow,oh);
//画横线
for(var i=0;i<=9;i++){
this.drawLine(p,p+c*i,p+w,p+c*i)
}
//画上半部分竖线
for(var i =0;i<=8;i++){
this.drawLine(p+c*i,p,p+c*i,p+c*4)
}
//画下半部分竖线
for(var i =0;i<=8;i++){
this.drawLine(p+c*i,p +c*5,p+c*i,p+c*9)
}
//画上部分X
this.drawLine(p+c*3,p,p+c*5,p+c*2);
this.drawLine(p+c*5,p,p+c*3,p+c*2);
//画下部分X
this.drawLine(p+c*3,p+h,p+c*5,p+c*7);
this.drawLine(p+c*5,p+h,p+c*3,p+c*7);
//画#标记点
this.drawRound(p+c,p+c*2);
this.drawRound(p+c*7,p+c*2);
this.drawRound(p+c,p+c*7);
this.drawRound(p+c*7,p+c*7);
for(var i =0;i<=9;i++){
if(i%2!=1){
this.drawRound(p+c*i,p+c*3);
this.drawRound(p+c*i,p+c*6);
}
}
//画楚河汉界
this.drawText(p+c*2,p+c*4.5,"楚 河");
this.drawText(p+c*6,p+c*4.5,"汉 界"); } //棋子初始化
chess.init_piece = function () {
var p =this.padding;
var r = this.chessRadius;
var c = this.cell;
var a = this.array;
for(var i =0;i<a.length;i++){
for(var j=0;j<a[i].length;j++){
if(a[i][j] !=" "){
var t = a[i][j];
this.drawPiece(p+c*j,p+c*i,r,t);
}
}
}
}
//画背景
chess.drawBg =function (x,y,endX,endY) {
this.ctx.beginPath();
this.ctx.fillStyle = "#f9f9f9";
this.ctx.rect(x,y,endX,endY);
this.ctx.fill();
this.ctx.closePath();
} //画直线
chess.drawLine =function (x,y,endX,endY) {
this.ctx.beginPath();
this.ctx.lineWidth = 2;
this.ctx.strokeStyle = "#ff0000";
this.ctx.moveTo(x,y);
this.ctx.lineTo(endX,endY);
this.ctx.stroke();
this.ctx.closePath();
} //画标记点
chess.drawRound = function (x,y) {
var w = this.width;
var p = this.padding;
this.ctx.beginPath();
this.ctx.lineWidth = 2;
this.ctx.strokeStyle = "#ff0000"; if(x!=p){
//左上
this.ctx.moveTo(x-5,y-10);
this.ctx.lineTo(x-5,y-5);
this.ctx.lineTo(x-10,y-5);
//左下
this.ctx.moveTo(x-5,y+10);
this.ctx.lineTo(x-5,y+5);
this.ctx.lineTo(x-10,y+5);
}
if(x!=p+w){
//右上
this.ctx.moveTo(x+5,y-10);
this.ctx.lineTo(x+5,y-5);
this.ctx.lineTo(x+10,y-5);
//右下
this.ctx.moveTo(x+5,y+10);
this.ctx.lineTo(x+5,y+5);
this.ctx.lineTo(x+10,y+5); } this.ctx.stroke();
this.ctx.closePath();
} //写字
chess.drawText = function (x,y,name) {
this.ctx.font="28px 隶书"
this.ctx.fillStyle="#000";
this.ctx.textAlign="center";
this.ctx.textBaseline="middle";
this.ctx.fillText(name, x, y);
} //画单个棋子
chess.drawPiece =function (x,y,r,t) {
this.ctx.beginPath();
this.ctx.fillStyle = "#fff";
this.ctx.strokeStyle = "#ccc";
this.ctx.lineWidth =2;
this.ctx.arc(x,y,r,0,Math.PI*2,true);
this.ctx.fillText(t,x,y)
this.ctx.closePath();
this.ctx.fill();
this.ctx.stroke();
chess.drawText(x,y,t); } //画棋子的选中状态
chess.onPiece = function (x,y,r,t) {
this.ctx.beginPath();
this.ctx.strokeStyle ="#ff0000";
this.ctx.lineWidth =1;
this.ctx.moveTo(x-8,y-23);
this.ctx.lineTo(x-23,y-23);
this.ctx.lineTo(x-23,y-8); this.ctx.moveTo(x+8,y-23);
this.ctx.lineTo(x+23,y-23);
this.ctx.lineTo(x+23,y-8); this.ctx.moveTo(x-8,y+23);
this.ctx.lineTo(x-23,y+23);
this.ctx.lineTo(x-23,y+8); this.ctx.moveTo(x+8,y+23);
this.ctx.lineTo(x+23,y+23);
this.ctx.lineTo(x+23,y+8); this.ctx.stroke();
this.ctx.closePath(); this.ctx.beginPath();
this.ctx.fillStyle = "#fff";
this.ctx.strokeStyle = "#ccc";
this.ctx.lineWidth =2;
this.ctx.arc(x,y,r,0,Math.PI*2,true); this.ctx.shadowOffsetX = 1; // 阴影Y轴偏移
this.ctx.shadowOffsetY = 1; // 阴影X轴偏移
this.ctx.shadowBlur = 4; // 模糊尺寸
this.ctx.shadowColor = 'rgba(0, 0, 0, 1)'; // 颜色
this.ctx.fillText(t,x,y)
this.ctx.closePath();
this.ctx.fill();
this.ctx.stroke();
chess.drawText(x,y,t); } //增加点击事件
chess.addEvent = function () {
var _this = this;
canvas.addEventListener("click",function (event) {
var k = _this.getMousePos(event);
console.log(Math.round(k.x))
});
} //获取鼠标点击坐标
chess.getMousePos = function(event) {
var dx = canvas.getBoundingClientRect().left;
var dy = canvas.getBoundingClientRect().top;
var e = event || window.event;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
var x = e.pageX || e.clientX + scrollX;
var y = e.pageY || e.clientY + scrollY;
//alert('x: ' + x + '\ny: ' + y);
return { 'x': x-dx, 'y': y-dy };
} chess.init(); </script>
</body>
</html>

canvas象棋 画图的更多相关文章

  1. canvas 在线画图

    canvas 在线画图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. 使用Canvas制作画图工具

      前  言 JRedu canvas是HTML5中重要的元素之一,canvas元素使用JavaScript在网页上绘制图像,画布是一个矩形区域,我们可以控制其每一个元素,并且canvas拥有多种的绘 ...

  3. 微信小程序 base64图片在canvas上画图

    上代码 wxml <canvas canvas-id="myCanvas" style="width:400px;height:400px;">&l ...

  4. html5 canvas 自定义画图裁剪图片

    html5 给我们带来了极大惊喜的canvas标签,有了它我们可以在浏览器客户端处理图片,不需要经过服务器周转.可以实现: 1.照片本地处理,ps有的一些基本功能都有 2.结合js可以实现一些很炫的动 ...

  5. canvas基本画图

    <img src="img/lamp.gif" id="lamp"/> <img src="img/eg_tulip.jpg&quo ...

  6. HTML Canvas 鼠标画图

    原文来自:http://www.williammalone.com/articles/create-html5-canvas-javascript-drawing-app(已被墙) 译文: http: ...

  7. canvas防画图工具

    <style> body {   background: black;   text-align: center; } #cans {   background: white; } < ...

  8. html5 canvas 实现简单的画图

    今天早上看了一下 canvas 前端画图,数据可视化, 百度的 echart.js  , d3等 js 库都已经提供了强大的绘制各种图形的 API. 下面记录一下 有关canvas 绘图的基本知识: ...

  9. 兼容小程序的canvas画图组件jmGraph

    基于CANVAS的简单画图组件让你用类似于dom的方式,在canvas上画图,感觉会不会很爽. 主页:http://graph.jm47.com/示例:http://graph.jm47.com/ex ...

随机推荐

  1. 「SDOI2009」虔诚的墓主人

    传送门 Luogu 解题思路 离散化没什么好说 有一种暴力的想法就是枚举每一个坟墓,用一些数据结构维护一下这个店向左,向右,向上,向下的常青树的个数,然后用组合数统计方案. 但是网格图边长就有 \(1 ...

  2. 《JavaScript高级程序设计》读书笔记(三)基本概念第四小节 操作符

    内容---语法 上一小节---数据类型 本小节 操作符---流程控制语句---理解函数 操作符--操作数据值的操作符--算术(如加减).位操作符.关系.相等--ECMAScript操作符可以适用于很多 ...

  3. IoT协议LwM2M MQTT与CoAP

    IoT协议LwM2M MQTT与CoAP 一.MQTT 1.概述: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议, ...

  4. Vue父组件主动获取子组件的数据和方法

    Vue父组件主动获取子组件的数据和方法 https://www.jianshu.com/p/bf88fc809131

  5. nodejs的forEach不支持break打断

  6. jenkins windows 2.204版,免安装,推荐插件齐备.

    windows专用,已安装好推荐插件, 更新了安装源为清华源,也就是说只要官方的插件,你都可以秒速下载了.香不? 解压到一个文件夹,管理员模式运行cmdcd 文件夹名jenkins install这样 ...

  7. idea提交项目到码云

    1.安装Git 2.在码云上创建项目 3.在IDEA提交项目到码云

  8. maven设置jdk版本

    方法一:在maven文件夹下的settings.xml中添加 <profile> <id>jdk-1.8</id> <activation> <a ...

  9. 番外篇!全球首个微信应用号开发教程!小程序 DEMO 视频奉上!

    大家好,我是博卡君.经过国庆节的七天假期,相信很多朋友都已经研究出自己的小程序 demo 了吧?我最近也利用休息时间关注了一下网上关于小程序开发的讨论,今天就利用这个番外篇谈谈自己对小程序的一些想法吧 ...

  10. 二十 Struts2的标签库,数据回显(基于值栈)

    通用标签库 判断标签:<s:if>.<s:elseif>.<s:else> 循环标签:<s:iterator> 其他常用标签: <s:proper ...