初学canvas,做个练习。代码如下:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>井字游戏</title> </head> <body> <canvas id="well" width="500" height="500" style="display: block; margin: 0 auto;"></canvas> <script> var well = document.getElementById("well"); var w = well.width; //获取宽度 var h = w; //获取高度,与宽度保持一致 var p = w * 0.07; //网格的内距 var r = w / 3 / 2 - p; //圆棋子的半径 function chessboard(wlc){ //画外部线框 wlc.strokeRect(0, 0, w, h); //开始画网格 wlc.beginPath(); //画第一列线 wlc.moveTo(w * 1 / 3, 0); wlc.lineTo(w * 1 / 3, h); //画第二列线 wlc.moveTo(w * 2 / 3, 0); wlc.lineTo(w * 2 / 3, h); //画第一行线 wlc.moveTo(0, h * 1 / 3); wlc.lineTo(w, h * 1 / 3); //画第二行线 wlc.moveTo(0, h * 2 / 3); wlc.lineTo(w, h * 2 / 3); wlc.stroke(); } function xPiece(wlc, path){ wlc.beginPath(); var shang = parseInt(path / 3); //判断Y轴位置 1 var yu = path % 3; //判断X轴位置 0 var m1xS = w / 3 * yu + p; //第一条斜线的开始点X轴 var m1yS = h / 3 * shang + p; //第一条斜线的开始点Y轴 var m1xE = w / 3 * yu + p + r * 2; //第一条斜线的结束点X轴 var m1yE = h / 3 * shang + p + r * 2; //第一条斜线的结束点Y轴 var m2xS = w / 3 * yu + p + r * 2; //第二条斜线的开始点X轴 var m2yS = h / 3 * shang + p; //第二条斜线的开始点Y轴 var m2xE = w / 3 * yu + p; //第二条斜线的结束点X轴 var m2yE = h / 3 * shang + p + r * 2; //第二条斜线的结束点Y轴 //画一个叉棋子,位于中间 wlc.moveTo(m1xS, m1yS); wlc.lineTo(m1xE, m1yE); wlc.moveTo(m2xS, m2yS); wlc.lineTo(m2xE, m2yE); wlc.stroke(); } function roundPiece(wlc, path){ wlc.beginPath(); var shang = parseInt(path / 3); //判断Y轴位置 1 var yu = path % 3; //判断X轴位置 0 var x = w / 3 * yu + w / 6; //计算X轴 var y = h / 3 * shang + h / 6; //计算Y轴 wlc.arc(x, y, r, 0, 2 * Math.PI); wlc.stroke(); } function drawWell(){ var wlc = well.getContext("2d"); chessboard(wlc); //画棋盘 xPiece(wlc,1); //画叉棋子 xPiece(wlc,6); //画叉棋子 xPiece(wlc,4); //画叉棋子 xPiece(wlc,8); //画叉棋子 roundPiece(wlc, 0); //画圆棋子 roundPiece(wlc, 2); //画圆棋子 roundPiece(wlc, 3); //画圆棋子 roundPiece(wlc, 5); //画圆棋子 roundPiece(wlc, 7); //画圆棋子 } drawWell(); </script> </body> </html>