国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南城县| 桃园县| 登封市| 蛟河市| 仁寿县| 会同县| 永川市| 温泉县| 彩票| 江油市| 湖口县| 射阳县| 轮台县| 聊城市| 黄骅市| 施甸县| 沈丘县| 榆中县| 长治市| 白山市| 横峰县| 双峰县| 封开县| 鸡西市| 历史| 通海县| 岑巩县| 武汉市| 津南区| 出国| 武陟县| 台东市| 万宁市| 吉安市| 林芝县| 石楼县| 开化县| 福建省| 资兴市| 广东省| 天台县|