
<!DOCTYPE html> |
<html> |
<head> |
<meta charset="utf-8"> |
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=3, minimum-scale=1.0, maximum-scale=3.0"> |
<title>在线五子棋</title> |
</head> |
<body> |
<canvas id="myCanvas" width="351" height="351" onclick="downChessman(event)"></canvas> |
<script type="text/javascript"> |
var w=25;//方格宽度 |
var cxt=null,myCanvas=null;// |
var arrays=new Array(); |
window.onload=function(){ |
myCanvas=document.getElementById("myCanvas"); |
cxt=myCanvas.getContext("2d"); |
cxt.translate(0.5,0.5); |
init(); |
}; |
|
function init(){ |
cxt.strokeStyle="#666"; |
for(var i = 0;i<16;i++){ |
cxt.moveTo(w*i,0); |
cxt.lineTo(w*i,14*w); |
cxt.stroke(); |
cxt.restore(); |
} |
for(var i = 0;i<16;i++){ |
cxt.moveTo(0,w*i); |
cxt.lineTo(14*w,w*i); |
cxt.stroke(); |
cxt.restore(); |
} |
initDrawPoint(); |
initArray(); |
} |
|
function initDrawPoint(){ |
cxt.fillStyle="#000"; |
for(var i=3;i<15;){ |
for(var j=3;j<15;){ |
cxt.beginPath(); |
cxt.arc(w*i,w*j,2,0,Math.PI*2,true); |
cxt.fill(); |
j=j+8; |
} |
i=i+8; |
} |
cxt.beginPath(); |
cxt.arc(w*7,w*7,3,0,Math.PI*2,true); |
cxt.fill(); |
} |
|
function initArray(){ |
for(var i=0;i<16;i++){ |
arrays[i]=new Array(); |
for(var j=0;j<16;j++){ |
arrays[i][j]=0; |
} |
} |
} |
|
function drawChessman(i,j,type){ |
var img = new Image(); |
img.onload = function(){ |
cxt.drawImage(img, w*i-10,w*j-10); |
//检查是否已经赢了 |
checkWin(); |
}; |
if(type){//是黑子 |
img.src="b.png"; |
}else{ |
img.src="w.png"; |
} |
} |
var type=false; |
function downChessman(e){ |
type = !type; |
var ox = myCanvas.offsetLeft,oy=myCanvas.offsetTop; |
var x = Math.round((e.clientX-ox) / w); |
var y = Math.round((e.clientY-oy) / w); |
//console.log("cx="+(e.clientX-ox)+",cy="+(e.clientY-oy)); |
//console.log("x="+x+",y="+y); |
var val = arrays[x][y]; |
if(val==0){//没有棋子 |
if(type){//黑子 |
arrays[x][y]=1; |
}else{ |
arrays[x][y]=2;//白子 |
} |
drawChessman(x,y,type); |
} |
} |
|
function checkWin(){ |
var b0=b1=w0=w1=0; |
for(var x=0;x<16;x++){ |
for(var y=0;y<16;y++){ |
var val = arrays[x][y]; |
if(val>0){//有棋子 |
if(y<16-5&&val==arrays[x][y+1]&&val==arrays[x][y+2]&&val==arrays[x][y+3]&&val==arrays[x][y+4]){//y轴连续5颗相同棋子 |
alert(val==1?"黑子获胜":"白子获胜"); |
return; |
} |
if(x<16-5&&y<16-5&&val==arrays[x+1][y+1]&&val==arrays[x+2][y+2]&&val==arrays[x+3][y+3]&&val==arrays[x+4][y+4]){//西北->东南方向连续5颗相同棋子 |
alert(val==1?"黑子获胜":"白子获胜"); |
return; |
} |
if(x<16-5&&val==arrays[x+1][y]&&val==arrays[x+2][y]&&val==arrays[x+3][y]&&val==arrays[x+4][y]){//x轴连续5颗相同棋子 |
alert(val==1?"黑子获胜":"白子获胜"); |
return; |
} |
if(x-4>=0&&val==arrays[x-1][y+1]&&val==arrays[x-2][y+2]&&val==arrays[x-3][y+3]&&val==arrays[x-4][y+4]){ |
alert(val==1?"黑子获胜":"白子获胜"); |
return; |
} |
} |
} |
} |
} |
|
</script> |
</body> |
</html> |




by: 发表于:2017-12-01 14:55:34 顶(1) | 踩(1) 回复
??
回复评论