js实现五子棋游戏代码
代码语言:html
所属分类:游戏
代码描述:js实现五子棋游戏代码,可开启调试模式
代码标签: 游戏
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> * { margin: 0px; padding: 0px; } #chess { position: relative; width: 762px; height: 762px; margin: 50px auto 0px auto; background-image: url("//repo.bfw.wiki/bfwrepo/images/game/wuziqi/timg.jpg"); background-size: 100% 100%; } .grid { width: 50px; height: 50px; position: absolute; padding: 5px; box-sizing: border-box; border-radius: 25px; background-origin: content-box; background-size: 100% 100%; background-repeat: no-repeat; line-height: 50px; text-align: center; color: aqua; } </style> </head> <body> <div id="chess"></div> <script> var chess;//棋盘对象 var grid;//二维数组,记录棋盘点是否有棋子,什么棋子 var chessWidth = 15;//棋盘格数 var count = 0;//棋子数,根据棋子数判定当前该是白棋还是黑棋 var block = false;//点击时间锁 var AI = false;//AI开关 function createGrid(x, y) {//创建棋盘节点div var temp = document.createElement("div"); temp.classList.add("grid"); temp.style.left = (7 + x * 50) + "px"; temp.style.top = (7 + y * 50) + "px"; temp.x = x; temp.y = y; temp.value = 0;//0为空位,1为黑子,2为白子 return temp; } function checkLine(x, y) {//检查是否横向,纵向,斜上,斜下构成五子 var result1 = 3, result2 = 3, result3 = 3, result4 = 3; for (var i = 0; i < 5; i++) { // 按位与 result1 &= y + i > 14 ? 0 : grid[x][y + i].value;//判断横向五子 result2 &= x + i > 14 ? 0 : grid[x + i][y].value;//判断纵向五子 result3 &= x + i > 14 || y - i < 0 ? 0 : grid[x + i][y - i].value;//判断斜上五子 result4 &= x + i > 14 || y + i > 14 ? 0 : grid[x + i][y + i].value;//判断斜下五子 } // 按位或 return result1 | result2 | result3 | result4; } function checkFinish() {//检查是否有获胜的一方 for (var i = 0; i < grid.length; i++) { for (var j = 0; j < grid[i].length; j++) { if (grid[i][j].value == 0) { continue; } var result = checkLine(i, j); if (result > 0) { return result; } } } return 0; } function init() {//初始化方法 grid = new Array(chessWidth); for (var i = 0; i < grid.length; i++) {//初始化二维棋盘 grid[i] = new Array(chessWidth); for (var j = 0; j < grid[i].length; j++) { // 创建dom节点 grid[i][j] = createGrid(j, i); grid[i][j].onclick = function () {//棋盘节点点击事件 if (this.value > 0 || block) {//被锁住时或者已有棋子时直接return return; } block = true;//开启锁 this.style.backgroundImage = "url('//repo.bfw.wiki/bfwrepo/images/game/wuziqi/" + (count % 2 + 1) + ".png')";//将节点背景更换,根据count计算当前时白子还是黑子。 this.value = count % 2 + 1;//设置节点的value count += 1;//棋盘棋子数+1 var result = checkFinish();//检查是否结束 // console.log(result); if (result == 0) {//没结束 if (AI && count % 2 == 1) {//判断是否有AI block = false;//关闭锁 aiAction();//AI落子 } block = false;//关闭锁 } else {//结束了 setTimeout(function () { alert(result == 1 ? "黑棋胜" : "白棋胜");//弹出获胜方 }, 200); } } chess.appendChild(grid[i][j]); } } } window.onload = function () { chess = document.getElementById("chess"); init(); } </script> <script> AI = true; var debug = false; function analysisScore(arr) { var greater3 = 0; var equal3 = 0; var greater2 = 0; var equal2 = 0; var greater1 = 0; var equal1 = 0; for (var i = 0 ; i < arr.length ; i ++) { if (arr[i] >= 4) { return 100; } if (arr[i] > 3) { greater3 += 1; } else if (arr[i] == 3) { equal3 += 1; } else if (arr[i] > 2) { greater2 += 1; } else if (arr[i] == 2) { equal2 += 1; } else if (arr[i] > 1) { greater1 += 1; } else if (arr[i] == 1) { equal1 += 1; } } if (greater3 + equal3 > 1) {//双四 return 95; } if (greater3 > 0) {//活四 return 90; } if (equal3 > 0 && greater2 > 0) {//四三,下一手上活四 return 85; } if (greater2 > 1) {//双三 return 80; } if (equal3 > 0) {//冲四 return 60; } if (greater2 > 0 && equal2 > 0) {//活三 + 眠三 return 50; } if (greater2 > 0 && greater1 > 0) {//活三,可继续连招 return 30; } if (greater2 > 0) {//活三 return 25; } if (greater1 > 1) {//活二 return 20; } if (greater1 > 0) {//活二 return 15; } if (equal2 > 1) {//多眠三 return 10; } if (equal2 > 0) {//眠三 return 5; } if (equal1 > 1) {//绝地 return -1; } if (equal1 > 0) {//勉强连着 return 1; } return 0; } function getRealScore(leftRow, leftCol, rightRow, rightCol, val) { if (leftRow < 0 || leftRow > 14 || leftCol < 0 || leftCol > 14 || rightRow < 0 || rightRow > 14 || rightCol < 0 || rightCol > 14) { return false; } if ((grid[leftRow][leftCol].value == 0 || grid[leftRow][leftCol].value == val) && (grid[rightRow][rightCol].value == 0 || grid[rightRow][rightCol].value == val)) { return true; } else { return false; } } function getScore(arr, val) { var result = 0; for (var i = 0 ; i < arr.length ; i ++) { if (arr[i].value == 0) { continue; } else if (arr[i].value == val) { result += 1; } else { return 0; } } return result; } function analysisObliUpLine(row ,col, val) {//斜上方向分析 var maxScore = 0; for (var i = 0 ; i < 5 ; i ++) { if (row + 4 - i > 14 || row + 4 - i < 4 || col - 4 + i < 0 || col - 4 + i > 10) { continue; } var arr = []; for (var j = 0 ; j < 5 ; j ++) { arr.push(grid[row + 4 - i - j][col - 4 + i + j]); } var score = getScore(arr, val); var realPower = getRealScore(row + 5 - i, col - 5 + i, row - i + 1, col + i + 1, val); var total = score * (realPower ? 1.1 : 1); maxScore = maxScore > total ? maxScore : total; } return maxScore; } function analysisObliDownLine(row ,col, val) {//斜下方向分析 var maxScore = 0; for (var i = 0 ; i < 5 ; i ++) { if (row - i + 4 > 14 || row - i < 0 || col - i + 4 > 14 || col.........完整代码请登录后点击上方下载按钮下载查看
网友评论0