javascript 五子棋

html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link rel="stylesheet"  href="style.css" />
</head>
<body>
<canvas id="canvas" οnclick="getit()">
</canvas>
<input id="btn1" type="button" value="开始" οnclick="play();">
<script language="javascript" src="play.js"></script>
</body>
</html>

play.js:

// JavaScript Document
var black=new Image();
var white=new Image();
black.src='2.gif';
white.src='1.gif';
var timer=null;
var i=0;
var  map=[];
for(var j=0;j<14;j++)
{
	map[j]=[];
}
function init()
{
	for(var j=0;j<14;j++)
	{
		for(var k=0;k<14;k++)
		{
			map[j][k]=0;
		}
	}
 var canvas=document.getElementById("canvas");
 canvas.width=600;
 canvas.height=600;
 canvas.style.backgroundColor='#d7c098';
 var  ctx=canvas.getContext('2d');
 ctx.strokeStyle='#fff';
 for(var i=0;i<15;i++)
 {
	 for(var j=0;j<15;j++)
	 {
		   ctx.strokeRect(j*40,i*40,40,40); 
	  }
 }
}

function check_win( m,  n)
{
    var total = 1; 
    var i;
	//横向
    for(i = m-1; i >= 0; i--)//统计同行左侧连续同样棋子个数。
        if(map[i][n] == map[m][n]) total++;
        else break;
    for(i = m+1; i < 14; i ++)//统计同行右侧连续同样棋子个数。
        if(map[i][n] == map[m][n]) total++;
        else break;
    if(total>=5) 
	return 1;//胜利
	total=1;
	//纵向
	 for(i = n-1; i >= 0; i--)//统计同行左侧连续同样棋子个数。
        if(map[m][i] == map[m][n]) total++;
        else break;
    for(i = n+1; i < 14; i ++)//统计同行右侧连续同样棋子个数。
        if(map[m][i] == map[m][n]) total++;
        else break;
    if(total>=5) 
	return 1;//胜利。
	total=1;
	var j=0;
	for(i = m-1,j=n-1; j>=0 &&i >= 0; i--,j--)//统计同行左侧连续同样棋子个数。
        if(map[i][j] == map[m][n]) total++;
        else break;
    for(i = m+1,j=n+1; i < 14&&j<14; i ++,j++)//统计同行右侧连续同样棋子个数。
        if(map[i][j] == map[m][n]) total++;
        else break;
    if(total>=5) 
	return 1;
	
	total=1;
	for(i = m+1,j=n-1; j>=0&&i < 14; i++,j--)//统计同行左侧连续同样棋子个数。
        if(map[i][j] == map[m][n]) total++;
        else break;
    for(i = m-1,j=n+1; i>=0&&j<14; i --,j++)//统计同行右侧连续同样棋子个数。
        if(map[i][j] == map[m][n]) total++;
        else break;
    if(total>=5) 
	return 1;


    return 0; //没有胜利。
}

function getit(ev)
{
	
	var canvas=document.getElementById("canvas");
	var  ctx=canvas.getContext('2d');
	var e=event||ev;
	var x=Math.round((e.clientX-canvas.offsetLeft)/40);
	var y=Math.round(e.clientY/40);
	if(x==0||y==0)
	return;
	if(i%2==0&&map[x-1][y-1]==0)
	{
	   ctx.drawImage(black,x*40-20,y*40-20);
	   map[x-1][y-1]=1;
	   i++;
	}
	if(i%2==1&&map[x-1][y-1]==0)
	{
		ctx.drawImage(white,x*40-20,y*40-20);
		map[x-1][y-1]=2;
		i++;
	}
	
}
function play()
{
	clearInterval(timer);
	init();
	var timer=setInterval(function(){
	for(var i=0;i<14;i++)
	{
		for(var j=0;j<14;j++)
		{
			if(map[i][j]!=0)
			{
				
				if(check_win(i,j))
				{
					if(map[i][j]==1)
					{
						clearInterval(timer);
						var msg = "黑子赢了,是否继续?"; 
						 if (confirm(msg)==true){ 
						   play();
						 }else{ 
						  return; 
						 } 
					}
					if(map[i][j]==2)
					{
						clearInterval(timer);
						var msg = "白子赢了,是否继续?"; 
						 if (confirm(msg)==true){ 
						   play();
						 }else{ 
						  return; 
						 } 
					}
					
				}
			}
		}
	}
	
	},100);
}
css:
@charset "utf-8";
/* CSS Document */

#canvas
  {
	  display:block;
	  border:1px solid #000;
	  width:600px;
	  height:600px;
	  background:#000;
	  margin:0  auto;
  }
 #btn1
 {
	 display:block;
	 margin:0 auto;
  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值