日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

js实现简单五子棋游戏源码

發布時間:2023/11/21 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 js实现简单五子棋游戏源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現代碼1:

<!-- //html和css -->
<!DOCTYPE html>
<html lang="en">
	<!-- Head -->
	<head>
		<meta charset="UTF-8">
		<title>五子棋</title>
		<!-- css -->
		<style type="text/css">
			#container {
				width: 531px;
				height: 645px;
				margin: 0 auto;
				border: 1px solid blue;
				background: url(qipan.jpg) no-repeat;
				padding-top: 0px;
				padding-left: 5px;
			}

			td {
				width: 40px;
				height: 33px;
			}

			table {
				border-collapse: collapse;
				width: 525px;
				height: 465px;
			}
		</style>
		<!-- css ends -->
		<!-- script -->
		<script src="wuzi.js"></script>
		<!-- script ends -->
	</head>
	<!-- Head Ends -->
	<!-- Body -->
	<body>
		<!-- Container -->
		<div id="container">
			<!-- table model -->
			<table>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
			</table>
			<!-- 控件模塊 -->
			<br>
			<div>
				<p>&nbsp;當前棋手:
					<img id="qizi" src="">
					<input type="button" value="黑棋先行" onclick="status1()">
					<input type="button" value="白棋先行" onclick="status2()">
					<input type="button" value="再來一局" onclick="window.location.href=window.location">
					<input type="button" value="退出游戲" onclick="closeFunction()">
				</p>
			</div>
		</div>
		<!-- Container Ends -->
	</body>
	<!-- Body Ends -->
</html>

<script type="text/javascript">
	//js部分代碼
	/*狀態事件*/

	function status1() {
		document.getElementById('qizi').src = "black.png";
	}

	function status2() {
		document.getElementById('qizi').src = "white.png";
	}

	/* 控件事件 */
	function closeFunction() {
		if (confirm("是否退出游戲?")) {
			window.close();
		} else {
			history.back();
		}
	}

	/* 判斷輸贏 */
	var cnt = (function() {
		var curr = 'black';
		return function() {
			var tmp = curr;
			if (curr == 'black') {
				curr = 'white';
			} else {
				curr = 'black';
			}
			return tmp;
		}
	})();

	var tds = document.getElementsByTagName('td');
	var iswin = false; // 有沒有分出勝負

	// 負責下棋,即改變單元格的背景
	var xia = function() {
		// 判斷是否已分出勝負
		var color = cnt();
		if (iswin) {
			alert('游戲結束!');
			return;
		}
		if (this.style.background.indexOf('.png') >= 0) {
			alert('不能重復放置棋子!');
			return;
		}
		this.style.background = 'url(' + color + '.png)';
		judge.call(this, color); // 下完棋后判斷勝負
	}

	// 判斷勝負的函數
	var judge = function(color) {
		// 找當前這顆棋的坐標
		// td在tr中索引,即是橫坐標
		// tr是table的索引,即是縱坐標
		var curr = {
			x: this.cellIndex,
			y: this.parentElement.rowIndex,
			color: color
		};
		var line = ['', '', '', '']; //分別放置橫,豎,左右下斜上棋
		// 循環225單元格
		for (var i = 0, tmp = {}; i < 225; i++) {
			// 取當前循環到的這顆棋的坐標
			tmp = {
				x: tds[i].cellIndex,
				y: tds[i].parentElement.rowIndex,
				color: '0'
			};

			// 取當前循環到的這顆棋的顏色,分別b,w 0(空)來表示
			if (tds[i].style.background.indexOf('black') >= 0) {
				tmp.color = 'b';
			} else if (tds[i].style.background.indexOf('white') >= 0) {
				tmp.color = 'w';
			}

			if (curr.y == tmp.y) {
				// 在一個橫線上
				line[0] += tmp.color;
			}
			if (curr.x == tmp.x) {
				// 在一個豎線上
				line[1] += tmp.color;
			}
			if ((curr.x + curr.y) == (tmp.x + tmp.y)) {
				//在左斜線上
				line[2] += tmp.color;
			}
			if ((curr.x - tmp.x) == (curr.y - tmp.y)) {
				//在右斜線上
				line[3] += tmp.color;
			}
		}
		// 判斷4條線上,有沒有連續的4個w,或4個b
		color = color == 'black' ? 'bbbbb' : 'wwwww'; //贏家的顏色

		for (var i = 0; i < 4; i++) {
			if (line[i].indexOf(color) >= 0) {
				alert(color + '勝了!(b表示黑方勝,w表示白方勝)');
				iswin = true; // 標志已經分出勝負
				break;
			}
		}
	}
	window.onload = function() {
		document.getElementsByTagName('table')[0].onclick = function(ev) {
			// 1. 下棋
			// 2. 判斷勝負
			xia.call(ev.srcElement);
		};
	}
</script>

效果演示如下圖:

實現代碼2:

<!DOCTYPE html>
<html>
	<head lang="en">
		<meta charset="UTF-8">
		<title></title>
		<style>
			* {
padding: 0;
margin: 0;
}
canvas {
margin: 10px;
border: 2px solid #000;
}
#box {
display: inline-block;
position: absolute;
margin-top: 200px;
margin-left: 100px;
}
span {
font: 24px "微軟雅黑";
display: inline-block;
height: 50px;
}
input {
margin-top: 30px;
display: block;
width: 100px;
height: 50px;
font: 16px "微軟雅黑";
color: #fff;
background-color: #0099cc;
}
</style>
	</head>
	<body>
		<canvas width="640" height="640" id="cas">
			您的瀏覽器不支持canvas,請升級到最新的瀏覽器
		</canvas>
		<div id="box">
			<span id="txt"></span>
			<input type="button" id="btn" value="重新開始" />
		</div>

		<script>
			var flag = true; //true代表白棋下的棋子,false代表黑棋下的棋子
			var isWin = false; //判斷是否結束,true結束,false沒有結束
			var step = 40; //設置每個格子的寬高都是40

			var txt = document.getElementById("txt");
			var btn = document.getElementById("btn");
			var cas = document.getElementById("cas"); // 獲取畫布對象
			var ctx = cas.getContext("2d"); //畫布上下文

			// 創建圖片對象
			var img_b = new Image();
			img_b.src = "imgs/b.png"; //設置黑棋圖片路徑
			var img_w = new Image();
			img_w.src = "imgs/w.png"; //設置白棋圖片路徑

			// 用二維數組來保存棋盤,0代表沒有走過,1為白棋走過,2為黑棋走過
			var arr = new Array(15); //聲明一個一維數組
			for (var i = 0; i < 15; i++) {
				arr[i] = new Array(15); //每個值再聲明一個一維數組,這樣就組成了一個二維數組
				for (var j = 0; j < 15; j++) {
					arr[i][j] = 0;
				}
			}

			//繪制棋盤
			function drawLine() {
				for (var i = 0; i < cas.width / step; i++) {
					// 畫豎線
					ctx.moveTo((i + 1) * step, 0);
					ctx.lineTo((i + 1) * step, cas.height);
					// 畫橫線
					ctx.moveTo(0, (i + 1) * step);
					ctx.lineTo(cas.width, (i + 1) * step);
					ctx.stroke();
				}
			}
			//獲取鼠標點擊的位置
			cas.onclick = function(e) {
				// 先判斷游戲是否結束
				if (isWin) {
					alert("游戲已經結束,請刷新重新開始!");
					return 0;
				}
				//判斷棋子顯示的地方,四條邊上不顯示棋子,
				//鼠標點擊的位置減去邊框距離頁面的上和左的距離(10),減去一個格子寬高的一半(20)
				var x = (e.clientX - 10 - 20) / 40;
				var y = (e.clientY - 10 - 20) / 40;

				//進行取整來確定棋子最終顯示的區域
				x = parseInt(x);
				y = parseInt(y);
				//如果超出棋盤或者在棋盤邊界直接返回,邊界上不能畫棋子
				if (x < 0 || x >= 15 || y < 0 || y >= 15) {
					return;
				}
				//進行判斷該位置是否已經顯示過棋子
				if (arr[x][y] != 0) {
					alert("你不能在這個位置下棋");
					return;
				}
				// 判斷是顯示黑子還是白子
				if (flag) { //白子
					flag = false; //將標志置為false,表示下次為黑子
					drawChess(1, x, y); //調用函數來畫棋子

				} else { //黑子
					flag = true; //將標志置為true,表示下次為白子
					drawChess(2, x, y); //調用函數來畫棋子

				}
			}
			//畫棋子
			function drawChess(num, x, y) {
				//根據x和y確定圖片顯示位置,讓圖片顯示在十字線中間,因為一個格子為40,圖片大小為30,所以40-30/2等于25,所以需要加上25
				var x0 = x * step + 25;
				var y0 = y * step + 25;
				if (num == 1) {
					//繪制白棋
					ctx.drawImage(img_w, x0, y0);
					arr[x][y] = 1; //白子
				} else if (num == 2) {
					// 繪制黑棋
					ctx.drawImage(img_b, x0, y0);
					arr[x][y] = 2; //黑子
				}
				//調用函數判斷輸贏
				judge(num, x, y);
			}
			//判斷輸贏
			function judge(num, x, y) {
				var n1 = 0, //左右方向
					n2 = 0, //上下方向
					n3 = 0, //左上到右下方向
					n4 = 0; // 右上到左下方向
				//***************左右方向*************
				//先從點擊的位置向左尋找,相同顏色的棋子n1自加,直到不是相同顏色的棋子,則跳出循環
				for (var i = x; i >= 0; i--) {
					if (arr[i][y] != num) {
						break;
					}
					n1++;
				}
				//然后從點擊的位置向右下一個位置尋找,相同顏色的棋子n1自加,直到不是相同顏色的棋子,則跳出循環
				for (var i = x + 1; i < 15; i++) {
					if (arr[i][y] != num) {
						break;
					}
					n1++;
				}
				//****************上下方向************
				for (var i = y; i >= 0; i--) {
					if (arr[x][i] != num) {
						break;
					}
					n2++;
				}
				for (var i = y + 1; i < 15; i++) {
					if (arr[x][i] != num) {
						break;
					}
					n2++;
				}
				//****************左上到右下斜方向***********
				for (var i = x, j = y; i >= 0, j >= 0; i--, j--) {
					if (i < 0 || j < 0 || arr[i][j] != num) {
						break;
					}
					n3++;
				}
				for (var i = x + 1, j = y + 1; i < 15, j < 15; i++, j++) {
					if (i >= 15 || j >= 15 || arr[i][j] != num) {
						break;
					}
					n3++;
				}
				//****************右上到左下斜方向*************
				for (var i = x, j = y; i >= 0, j < 15; i--, j++) {
					if (i < 0 || j >= 15 || arr[i][j] != num) {
						break;
					}
					n4++;
				}
				for (var i = x + 1, j = y - 1; i < 15, j >= 0; i++, j--) {
					if (i >= 15 || j < 0 || arr[i][j] != num) {
						break;
					}
					n4++;
				}
				//用一個定時器來延時,否則會先彈出對話框,然后才顯示棋子
				var str;
				if (n1 >= 5 || n2 >= 5 || n3 >= 5 || n4 >= 5) {
					if (num == 1) { //白棋
						str = "白棋贏了,游戲結束!"
					} else if (num == 2) { //黑棋
						str = "黑棋贏了,游戲結束!"
					}
					txt.innerHTML = str;
					isWin = true;
				}
			}
			//重新開始
			btn.onclick = function() {
				flag = true;
				isWin = false;

				for (var i = 0; i < 15; i++) {
					for (var j = 0; j < 15; j++) {
						arr[i][j] = 0;
					}
				}
				ctx.clearRect(0, 0, 640, 640);
				txt.innerHTML = "";
				drawLine();
			}
			drawLine();
		</script>
	</body>
</html>

效果演示如下圖:

參考資料:
https://www.cnblogs.com/xbyl/p/5733830.html
https://www.jb51.net/article/128503.htm

總結

以上是生活随笔為你收集整理的js实现简单五子棋游戏源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。