javascipt開發的五子棋小遊戲(純js代碼)

canvas:畫布可以被js操作 ,畫板=>圖片(尺寸數據,我們需要修改它的尺寸,不是修改樣式)
繪製環境
如何繪製:
提筆到某個位置
描述繪製環境
開始繪製
提筆
querySelector:document對象上具有的一個辦法,id和class都可以獲取
選擇滿足條件的第一個元素。
getElementsByClassName效率高
製作流程:
1.繪製棋盤
(1).繪製直線的操作
2.繪製旗子
(1)如何繪製
(2)如何點擊下棋
(3)交換手
(4)落子點的問題(必須下到交叉點),自瞄系統
(5)友軍判斷,下過棋的地方不下,記錄棋盤的狀態
3.遊戲勝負判斷
棋盤狀態
五子棋勝負判斷的核心原理:
當前下下去的棋子參與到勝負判斷中,此時下棋的人要麼贏要麼不贏
一條線上分爲左右顏色連續累加超過5,那麼這個顏色就獲勝了。
4.人工智能機器下棋

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>五子棋</title>
	<style type="text/css">
		body{
			margin: 0;
			background-color: #ccc;
		}
		#canvas{
			display: block;
			margin:20px auto;
			background-color: #fff;
		}
	</style>
</head>
<body>
	<canvas id="canvas" width="450" height="450"></canvas>
</body>
	<script type="text/javascript">
		var canvas = document.querySelector('#canvas');//獲取元素的操作
		var ctx = canvas.getContext('2d');//獲取繪製環境
		var chesscolor = ['black','white'];
		var step = 0;
		var maparr = [];
		var mode = [//判斷模式
			[1,0],//水平
			[0,1],//豎直
			[1,1],//右下
			[1,-1],//左下
		];
		for(var i=0;i<14;i++){
			maparr[i]=[];
			for(var j=0;j<14;j++){
				maparr[i][j]=0;
			}
		}
		for(var i=1;i<15;i++){
			ctx.moveTo(30*i,30);
			ctx.lineTo(30*i,420);//繪製表格操作
			ctx.moveTo(30,30*i);
			ctx.lineTo(420,30*i);
		}
		ctx.stroke();//將之前的所有的路徑全部繪製一次,描輪廓畫法

		function drawchess(color,x,y){//傳入一個顏色代碼,繪製一個棋子
			//開始繪製
			ctx.fillStyle=color;//填充顏色的修改
			ctx.beginPath();//提筆操作
			ctx.arc(x,y,15,0,Math.PI*2,false);//描述畫圓座標,圓心座標軸半徑,起始點,度數
			ctx.fill();//填充
			ctx.stroke();
	    }
	    //點擊有棋子 
		canvas.addEventListener('click',function(e){
			var px = Math.floor((e.offsetX+15)/30)-1;//自瞄系統
			var py = Math.floor((e.offsetY+15)/30)-1;
			//靠近邊緣的不能下棋
			if((px+1)*30==0 || (py+1)*30==0 || (px+1)*30==450 || (py+1)*30==450){
				return;
			}
			//判斷是否下過棋
			if(maparr[px][py]==0){
				drawchess(chesscolor[step%2],(px+1)*30,(py+1)*30);
				maparr[px][py]=chesscolor[step%2];
				//下完了算勝負
			    checkWin(chesscolor[step%2],px,py,mode[0]);
			    checkWin(chesscolor[step%2],px,py,mode[1]);
			    checkWin(chesscolor[step%2],px,py,mode[2]);
			    checkWin(chesscolor[step%2],px,py,mode[3]);
				step = step+1;
			}
		});
		
		function checkWin(color,x,y,mode){//要麼黑,要麼白,要麼沒贏
			var count = 0;
			for(var i=1;i<5;i++){
				if(maparr[x+i*mode[0]]){
					if(maparr[x+i*mode[0]][y+i*mode[1]]==color){
					count++;
					}else{
						break;
					}
				}
			}
			for( var i=1;i<5;i++){
				if(maparr[x-i*mode[0]]){
					if(maparr[x-i*mode[0]][y-i*mode[1]]==color){
						count++;
						}else{
							break;
						}
				}
			}
			if(count>=4){
				alert(color,'win');
			}
		}

	</script>

</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章