画布之五子棋小游戏

时间:2023-01-30 04:20:08

用画布加js实现了一个五子棋的小游戏,喜欢的朋友可以看看呦~

HTML部分

<body>
	
		<canvas id="play" width="640px" height="640px"></canvas>
        <button id="bBt">开始</button>
        <span id="span">请先按开始</span>
        
</body>

css部分

<style>
		body{
			margin: 0px;
			padding: 0px;
			background: black;
			position: relative;
		}
        #play{
        	margin-left: 200px;
        	background: #c0c0c0;
        }
        #bBt{
        	position: absolute;
        	width: 50px;
        	height: 30px;

        }
        span{
        	position: absolute;
        	top: 40px;
        	left: 850px;
        	width: 100px;
        	height: 30px;
            color: #fff;
        }
	</style>

js部分~

<script>
	window.onload=function(){
		var bBtu=document.getElementById('bBt');
		var oSpan=document.getElementById('span');
		var can=document.getElementById('play');
		var ctx=can.getContext('2d');
		var arr11=[];
		var arr12=[];
		var arr21=[];
		var arr22=[];
        var arr31=[];
        var arr32=[];
        var BTu=true;
		ctx.moveTo(20,20);
		ctx.lineTo(20,620);
		ctx.lineTo(620,620);
		ctx.lineTo(620,20);
		ctx.lineTo(20,20);

		ctx.stroke();
		for(var i=20;i<620;i=i+40){
          ctx.moveTo(20,i);
          ctx.lineTo(620,i);
          ctx.stroke();
          ctx.moveTo(i,20);
          ctx.lineTo(i,620);
          ctx.stroke();
		}
		for(var j=20;j<640;j=j+40){
           for(var k=20;k<640;k=k+40){
             ctx.beginPath();
             ctx.arc(j,k,3,0,2*Math.PI,false);
             ctx.closePath();
             ctx.fill(); 
           }
		}
		var a=Math.random();
		var b=Math.random();
        bBtu.onmousedown=function(){
            if(BTu){
                if (a>b) {
            oSpan.innerHTML="此局黑子先落";
        }else{
            oSpan.innerHTML="此局白子先落";
        }
        BTu=false; 
            }
		    
	can.onmousedown=function(ev){
            var e=ev||window.event;
            var X=e.clientX;
            var Y=e.clientY;
            var x=Math.floor((X-220)/40)*40+40;
            var y=Math.floor((Y-20)/40)*40+40;
            var Btu=true;
            for(var n=0;n<arr31.length;n++){
                    
                    if(x==arr31[n]&&y==arr32[n]){
                        Btu=false;
                    }
                }
            if(Btu){
            if(a>b){
                b=2;
                a=1;
                ctx.fillStyle='#000';
                ctx.beginPath();
                ctx.arc(x,y,16,0,2*Math.PI,false);
                ctx.closePath();
                ctx.fill();
                arr11.push(x);
                arr12.push(y);
                arr31.push(x);
                arr32.push(y);
                win(1);
            }else{
                a=2;
                b=1;
                ctx.fillStyle='#fff';
                ctx.beginPath();
                ctx.arc(x,y,16,0,2*Math.PI,false);
                ctx.closePath();
                ctx.fill();              
                arr21.push(x);
                arr22.push(y);
                arr31.push(x);
                arr32.push(y);
                win(2);           
        }
    }
}
}
		function win(a){
			
			if(a==1){
              for(var i=0;i<arr11.length;i++){
              	var arr111=[1,1,1,1];
			    
                 for(var j=0;j<arr11.length;j++){
                     if(arr11[i]==arr11[j]&&((arr12[i]-arr12[j])==40||(arr12[i]-arr12[j])==80||(arr12[i]-arr12[j])==120||(arr12[i]-arr12[j])==160)){
                        arr111[0]++;
                        if(arr111[0]==5){
                        	alert("此局黑子胜");
                        }
                     }else if(arr12[i]==arr12[j]&&((arr11[i]-arr11[j])==40||(arr11[i]-arr11[j])==80||(arr11[i]-arr11[j])==120||(arr11[i]-arr11[j])==160)){
                         arr111[1]++;
                         if(arr111[1]==5){
                         	alert("此局黑子胜");
                         }
                     }
                     	for(var c=1;c<5;c++){
                     		if (arr11[i]-arr11[j]==c*40&&arr12[i]-arr12[j]==c*40) {
                     			arr111[2]++;
                                if(arr111[2]==5){
                         	    alert("此局黑子胜");
                                }
                     		}
                     		if (arr11[i]-arr11[j]==c*40&&arr12[i]-arr12[j]==c*(-40)) {
                     			    arr111[3]++;
                                        if(arr111[3]==5){
                         	            alert("此局黑子胜");
                                        }
                                    }
                     	    }
                     	
                      }
                 }
              }
              if(a==2){
			  for(var n=0;n<arr21.length;n++){

			  	var arr222=[1,1,1,1];
                for(var m=0;m<arr21.length;m++){
                  
                     if(arr21[n]==arr21[m]&&((arr22[n]-arr22[m])==40||(arr22[n]-arr22[m])==80||(arr22[n]-arr22[m])==120||(arr22[n]-arr22[m])==160)){
                        arr222[0]++;
                        if(arr222[0]==5){
                        	alert("此局白子胜");
                        }
                     }else if(arr22[n]==arr22[m]&&((arr21[n]-arr21[m])==40||(arr21[n]-arr21[m])==80||(arr21[n]-arr21[m])==120||(arr21[n]-arr21[m])==160)){
                         arr222[1]++;
                         if(arr222[1]==5){
                         	alert("此局白子胜");
                         }
                     }
                     for(var d=1;d<5;d++){
                     		if (arr21[n]-arr21[m]==d*40&&arr22[n]-arr22[m]==d*40) {
                     			arr222[2]++;
                                if(arr222[2]==5){
                         	    alert("此局白子胜");
                                }
                     		}
                     		if (arr21[n]-arr21[m]==d*40&&arr22[n]-arr22[m]==d*(-40)) {
                     			    arr222[3]++;
                                        if(arr222[3]==5){
                         	            alert("此局白子胜");
                                        }
                                    }
                     	    }              
                }
			  }
			}
            
		}
	}
</script>