亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS+canvas實現的五子棋游戲【人機大戰版】

2019-11-19 16:02:29
字體:
來源:轉載
供稿:網友

本文實例講述了JS+canvas實現的五子棋游戲。分享給大家供大家參考,具體如下:

運行效果圖:

html代碼如下:

<!DOCTYPE html><html>  <head>    <meta charset="utf-8" />    <title>五子棋</title>    <link rel="stylesheet" type="text/css" href="css/style.css" rel="external nofollow" />  </head>  <body>    <canvas id="chess" width="450px" height="450px"></canvas>    <div id='restart' class="restart">      <span>重新開始</span>    </div>    <script src="js/script.js" type="text/javascript" charset="utf-8"></script>  </body></html>

style.css代碼如下:

canvas{  display: block;  margin: 50px auto;  box-shadow: -2px -2px 2px #efefef, 5px 5px 5px #b9b9b9;}.restart{  text-align: center;}.restart>span{  display: inline-block;  padding: 10px 20px;  color: #fff;  background-color: #45c01a;  border-radius: 5px;}

script.js代碼如下:

var over = false;var me = true; //我var chressBord = [];//棋盤for(var i = 0; i < 15; i++){  chressBord[i] = [];  for(var j = 0; j < 15; j++){    chressBord[i][j] = 0;  }}//贏法的統計數組var myWin = [];var computerWin = [];//贏法數組var wins = [];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++;  }}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'; //邊框顏色var logo = new Image();logo.src = 'img/logo.png';logo.onload = function(){  context.drawImage(logo,0,0,450,450);  drawChessBoard();}document.getElementById("restart").onclick = function(){  window.location.reload();}chess.onclick = function(e){  if(over){    return;  }  if(!me){    return;  }  var x = e.offsetX;  var y = e.offsetY;  var i = Math.floor(x / 30);  var j = Math.floor(y / 30);  if(chressBord[i][j] == 0){    oneStep(i,j,me);    chressBord[i][j] = 1;//我    for(var k = 0; k < count; k++){      if(wins[i][j][k]){        myWin[k]++;        computerWin[k] = 6;//這個位置對方不可能贏了        if(myWin[k] == 5){          window.alert('你贏了');          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;    }  }  for(var i = 0; i < 15; i++){    for(var j = 0; j < 15; j++){      if(chressBord[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] == 1){              computerScore[i][j] += 220;            }else if(computerWin[k] == 2){              computerScore[i][j] += 420;            }else if(computerWin[k] == 3){              computerScore[i][j] += 2100;            }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);  chressBord[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('計算機贏了');        over = true;      }    }  }  if(!over){    me = !me;  }}//繪畫棋盤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();  }}//畫旗子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, 13, 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();}

PS:這里再為大家推薦另一款本站的js版五子棋游戲供大家參考(其AI相對簡單一些)

在線五子棋游戲:
http://tools.VeVB.COm/games/wuziqi

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數據結構與算法技巧總結》、《JavaScript數學運算用法總結》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調試技巧總結》及《JavaScript遍歷算法與技巧總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品偷拍一区二区三区在线看| 欧美做受高潮电影o| 热久久视久久精品18亚洲精品| 日韩av综合中文字幕| 夜夜嗨av一区二区三区四区| 丁香五六月婷婷久久激情| 中文字幕亚洲综合| 国产一区二区在线免费视频| 欧美日韩国产中文精品字幕自在自线| 欧美日韩国产在线看| 色樱桃影院亚洲精品影院| 色噜噜久久综合伊人一本| 欧美伊久线香蕉线新在线| 国产日本欧美一区二区三区在线| 91天堂在线观看| 亚洲福利影片在线| www.亚洲一区| 久久久亚洲影院你懂的| 亚洲精选一区二区| 亚洲国产日韩欧美综合久久| 久久99精品久久久久久琪琪| 在线观看国产精品淫| 91国产视频在线播放| 成人黄色生活片| 亚洲精品视频网上网址在线观看| 成人欧美一区二区三区黑人| 欧美成人精品xxx| 国产精品自产拍在线观看中文| 国产精品久久久久久久久借妻| 538国产精品一区二区免费视频| 中文字幕亚洲一区在线观看| 亚洲精品久久久久中文字幕二区| 国产人妖伪娘一区91| 亚洲三级av在线| 亚洲第一区中文字幕| 国产欧美精品日韩| www.日本久久久久com.| 国产精品午夜视频| 亚洲国产精彩中文乱码av| 国产mv免费观看入口亚洲| 欧美在线视频导航| 国产视频福利一区| 亚洲国产精品国自产拍av秋霞| 在线播放国产一区中文字幕剧情欧美| 综合136福利视频在线| 亚洲国产又黄又爽女人高潮的| 综合网日日天干夜夜久久| 日韩在线观看免费高清完整版| 国产性色av一区二区| 国产精品久久久久一区二区| 久久国产精品久久久久| 国产一区二区日韩| 操日韩av在线电影| 成人情趣片在线观看免费| 欧美激情亚洲精品| 亚洲成人黄色在线观看| 91av在线国产| 久久伊人色综合| 最新亚洲国产精品| 欧美韩国理论所午夜片917电影| 在线电影av不卡网址| 欧美黄网免费在线观看| 97久久久久久| 亚洲激情成人网| 超碰精品一区二区三区乱码| 国产亚洲人成a一在线v站| 搡老女人一区二区三区视频tv| 亚洲天天在线日亚洲洲精| 亚洲人成在线免费观看| 国产精品久久久久久久久免费| 久久精品视频一| 国产剧情久久久久久| 日韩欧美亚洲成人| 欧美日韩在线观看视频小说| 国产一区二区免费| 国产精品成久久久久三级| 91中文字幕在线观看| 91久久久精品| 亚洲精品成人网| 国产精品成人一区| 91视频国产精品| 精品久久久视频| 亚洲第一福利网| 亚洲天堂网在线观看| 亚洲日韩中文字幕| 日本精品久久久| 8050国产精品久久久久久| 国产精品免费久久久| 亚洲iv一区二区三区| 精品国产91久久久| 亚洲欧美日韩精品久久奇米色影视| 最近2019中文字幕在线高清| 岛国视频午夜一区免费在线观看| 亚洲美女中文字幕| 成人在线播放av| 隔壁老王国产在线精品| 精品一区二区三区四区在线| 成人免费视频97| 久久久久女教师免费一区| 91久热免费在线视频| 国产精品白嫩美女在线观看| 国产成人精品一区二区三区| 日韩精品欧美国产精品忘忧草| 亚洲成色777777在线观看影院| 久久大大胆人体| 中文字幕亚洲欧美日韩在线不卡| 这里精品视频免费| 在线中文字幕日韩| 国产aⅴ夜夜欢一区二区三区| 亚洲男人天堂手机在线| 国产日韩精品视频| 精品一区二区三区三区| 欧美性xxxx极品高清hd直播| 亚洲最大福利网站| 国产精品欧美日韩久久| 亚洲精品美女在线| 5252色成人免费视频| 亚洲精品美女久久| 日韩av资源在线播放| 黑人精品xxx一区一二区| 欧美性xxxx极品hd欧美风情| 色偷偷av亚洲男人的天堂| 欧美精品久久一区二区| 国产免费观看久久黄| 欧美国产精品人人做人人爱| 亚洲成色777777在线观看影院| 亚洲黄色成人网| 7m精品福利视频导航| 国产综合久久久久| 午夜精品理论片| 成人国产精品久久久| 韩曰欧美视频免费观看| 久久色在线播放| 国产精品狼人色视频一区| 久久香蕉国产线看观看网| 国产精品久久一区| 日韩精品视频中文在线观看| 国产精品高清网站| 日韩在线激情视频| 在线视频日本亚洲性| 亚洲另类xxxx| 成人精品在线视频| 国产在线a不卡| 久久精品99无色码中文字幕| 亚洲精品久久久久国产| 国产又爽又黄的激情精品视频| 亚洲精品www久久久| 日韩电视剧在线观看免费网站| 黑人巨大精品欧美一区二区一视频| 日韩欧美在线第一页| 日韩在线免费观看视频| 日韩精品视频免费专区在线播放| 久久久国产一区| 国内精品久久久久伊人av| 亚洲性日韩精品一区二区| 欧美精品生活片| 日韩视频在线一区| 97激碰免费视频| 久久99久久99精品免观看粉嫩| 亚洲午夜未删减在线观看| 在线视频免费一区二区| 人人爽久久涩噜噜噜网站| 亚洲欧洲免费视频| 日韩精品福利网站|