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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript五子棋

發布時間:2023/12/15 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript五子棋 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個代碼是按照網上一個JS教程寫的。

這個代碼有點bug吧,那就是一直封你的棋而不會去贏。

html:


<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>五子棋</title><link rel="stylesheet" type="text/css" href="style.css"></head><body><canvas id="chess" width="450px" height="450px"></canvas><script type="text/javascript" src="script.js"></script></body> </html>

JS:


var chessBoard = []; var me = true; var over = false;var wins = [];//贏法數組var myWin = [];//玩家贏法統計數組 var computerWin = [];//計算機贏法統計數組//初始化棋盤的標記數組 for(var i=0;i<15;++i){chessBoard[i] = [];for(var j=0;j<15;++j){chessBoard[i][j] = 0;} }//贏法數組開三維空間 for(var i=0;i<15;++i){wins[i] = [];for(var j=0;j<15;++j){wins[i][j] = [];} }//贏法統計 var count = 0; //橫向贏法 for(var i=0;i<15;++i){for(var j=0;j<11;++j){for(var k =0;k<5;++k){wins[i][j+k][count] = true;}count++;} } //豎向贏法 for(var i=0;i<15;++i){for(var j=0;j<11;++j){for(var k =0;k<5;++k){wins[j+k][i][count] = true;}count++;} }//斜向贏法 for(var i=0;i<11;++i){for(var j=0;j<11;++j){for(var k =0;k<5;++k){wins[i+k][j+k][count] = true;}count++;} }//反斜向贏法 for(var i=0;i<11;++i){for(var j=14;j>3;--j){for(var k =0;k<5;++k){wins[i+k][j-k][count] = true;}count++;} }console.log(count);//初始化玩家和電腦的贏法統計數組 for(var i=0;i<count;++i){myWin[i] = 0;computerWin[i] = 0; }var chess = document.getElementById('chess'); var context = chess.getContext('2d');context.strokeStyle = "#BFBFBF";//加載完代碼立即運行函數的內容 onload = function() {if(over)return;if(!me)return;drawChessBoard(); }//畫棋盤 var drawChessBoard = function(){for(var i=0;i<15;++i){context.moveTo(15 + i*30,15);context.lineTo(15 + i*30,435);context.stroke();context.moveTo(15,15 + i*30);context.lineTo(435,15 + i*30);context.stroke();} }//下棋(i,j)地方,me表示是計算機還是玩家 var oneStep = function(i,j,me){context.beginPath();context.arc(15 + i*30,15 + j*30,13,0,2*Math.PI);context.closePath();var gradient = context.createRadialGradient(15 + i*30+2,15 + j*30-2,50,15 + i*30+2,15 + j*30-2,0);if(me){gradient.addColorStop(0,"#0A0A0A");gradient.addColorStop(1,"#636766");}else{gradient.addColorStop(0,"#D1D1D1");gradient.addColorStop(1,"#F9F9F9");}context.fillStyle = gradient;context.fill(); }chess.onclick = function(e){var x = e.offsetX;var y = e.offsetY;var i = Math.floor(x/30);var j = Math.floor(y/30);//沒有棋在此位置if(chessBoard[i][j]==0){oneStep(i,j,me);chessBoard[i][j] = 1;//枚舉count種贏法for(var k=0;k<count;++k){if(wins[i][j][k]){//第k種贏法玩家占有了myWin[k]++;//計算機不可能從第k種贏法贏computerWin[k] = 6;if(myWin[k] == 5){window.alert("You Win!");over = true;}}}//沒有結束,計算機下棋if(!over){me = !me;computerAI();}} }var computerAI = function(){//玩家分數var myScore = [];//計算機分數var computerScore = [];var max = 0;var u = 0,v = 0;//初始化為二維數組for(var i=0;i<15;++i){myScore[i] = [];computerScore[i] = [];for(var j=0;j<15;++j){myScore[i][j] = 0;computerScore[i][j] = 0;}}//枚舉整個棋盤的位置,每個位置的count種贏法for(var i=0;i<15;++i){for(var j=0;j<15;++j){if(chessBoard[i][j]==0){for(var k=0;k<count;++k){if(wins[i][j][k]){if(myWin[k] == 1){myScore[i][j] += 200;}else if(myWin[k]==2){myScore[i][j] += 400;}else if(myWin[k]==3){myScore[i][j] += 2000;}else if(myWin[k]==4){myScore[i][j] += 10000;}}if(computerWin[k]){if(myWin[k] == 1){computerScore[i][j] += 220;}else if(computerWin[k]==2){computerScore[i][j] += 420;}else if(computerWin[k]==3){computerScore[i][j] += 2200;}else if(computerWin[k]==4){computerScore[i][j] += 20000;}}}if(myScore[i][j]>max){max = myScore[i][j];u = i,v = j;}else if(myScore[i][j] == max){if(computerScore[i][j]>computerScore[u][v]){u = i,v = j;}}if(computerScore[i][j]>max){max = computerScore[i][j];u = i,v = j;}else if(computerScore[i][j] == max){if(myScore[i][j]>myScore[u][v]){u = i,v = j;}}}}}oneStep(u,v,false);chessBoard[u][v] = 2;for(var k=0;k<count;++k){if(wins[u][v][k]){computerWin[k]++;myWin[k] = 6;if(computerWin[k] == 5){window.alert("computer Win!");over = true;}}}if(!over){me = !me;} }

CSS:


canvas {display: block;margin: 50px auto;box-shadow: -2px -2px 2px #EFEFEF,5px 5px 5px #B9B9B9; }

總結

以上是生活随笔為你收集整理的JavaScript五子棋的全部內容,希望文章能夠幫你解決所遇到的問題。

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