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

首頁 > 編程 > JavaScript > 正文

jQuery實現的五子棋游戲實例

2019-11-20 12:16:07
字體:
來源:轉載
供稿:網友

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

這是一款非常不錯的代碼,就是人工智能方面差了一點

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>五子棋</title><style type="text/css">div{margin:0;padding:0;}div.board{width:561px; height:561px; border:1px solid #ccc; margin:0 auto;}div.board div{ width:31px; height:31px; border:1px solid #ccc; float:left; cursor:pointer; background-repeat:no-repeat; }div.board .person { background-image:url('images/1/files/demo/white.jpg')}div.board .machine{ background-image:url('images/1/files/demo/black.jpg')}div.board .person_star{background-image:url('images/1/files/demo/white_star.jpg')}div.board .machine_star{background-image:url('images/1/files/demo/black_star.jpg')}input.ipt{ display:block; margin:0 auto; margin-top:8px;width:70px}</style></head><body><div class='board' id='board'></div><input type='button' value='開始游戲' onclick="initGame();this.value='重新開始'" class='ipt'/><script type='text/javascript'>var TRANSVERSE = 16;var VERTICAL = 16;var LEFT = 1;var RIGHT = 2;var TOP = 3;var BOTTOM = 4;var LEFT_TOP = 5;var LEFT_BOTTOM = 6;var RIGHT_TOP = 7;var RIGHT_BOTTOM = 8;var Chess = function(){ var owner = ''; var victory = false; this.getOwner = function(){return owner;}; this.setOwner = function(value){owner = value;}; this.getVictory = function(){ return victory;} this.setVictory = function(value){ victory = value; } }var Board = function(){ var chessBoard = []; var isGameOver = false; this.getChess = function(point) {  var x = point.x , y = point.y;  return chessBoard[y][x]; } this.setChess = function(chess , point) {  var x = point.x , y = point.y;  chessBoard[y][x] = chess; } this.setVictory = function(points) {  for(var i = 0 ; i < points.length ; i ++)  {   for(var j = 0 ; j < points[i].length; j ++)   {    var chess = this.getChess(points[i][j]);    chess.setVictory(true);   }  } } this.getAvaiablePoints = function() {  var avaiable = new Array;  for(var y = 0 ; y <= VERTICAL ; y ++)  {   for(var x = 0 ; x <= TRANSVERSE ; x ++)   {    if(chessBoard[y][x]) continue;    var point = {x : x , y : y};    avaiable.push(point);   }  }  return avaiable; } this.getMap = function() {  var map = {};   for(var y = 0 ; y <= VERTICAL ; y ++)   {   for(var x = 0 ; x <= TRANSVERSE ; x++)    {    var chess = chessBoard[y][x];     var value = '';     if(chess)     {     value = chess.getOwner();     if(chess.getVictory()) value += '_star';     }     else      {     value = '';     }     map[ x + ',' + y ] = value;    }   }   return map; } this.gameOver = function() {  return isGameOver = true; } this.isGameOver = function() {  return isGameOver; } this.getNextPoint = function(point , direction) {  var next = {x : point.x , y : point.y};  switch(direction)  {   case LEFT :    next.x -= 1;    break;   case RIGHT:    next.x += 1;    break;   case TOP:    next.y -= 1;    break;   case BOTTOM:    next.y += 1;    break;   case LEFT_TOP:    next.x-= 1 , next.y-= 1;    break;   case RIGHT_TOP:    next.x += 1 , next.y -= 1;    break;   case LEFT_BOTTOM:    next.x -= 1 , next.y += 1;    break;   case RIGHT_BOTTOM:    next.x += 1 , next.y += 1;    break;   default :    alert('方向錯誤');  }  return next; } var initialize = function() {  for(var i = 0 ; i <= VERTICAL ; i++ ) chessBoard.push([]); }  initialize();}var Compute = function(role){ var directions = [LEFT , TOP , RIGHT , BOTTOM , LEFT_TOP , LEFT_BOTTOM , RIGHT_TOP , RIGHT_BOTTOM]; var score = 0; var self = this; this._computeScore = function(direction) {  throw new Error('未實現'); } this._convertToPattern = function(chesslist) {  return role.convertToPattern(chesslist) } this.compute = function(point) {  score = 0;  for(var i = 0, direction ; direction = directions[i++];)  {   score += this._computeScore(point , direction);  }  } this.getScore = function(refPoint) {  return score ; }}var Five = function(role){ Compute.call(this, role); var computeScore1 = function(refPoint , direction) {  var predefined = 'IIII';  var chesslist = role.find(refPoint , direction , 4);  var pattern = role.convertToPattern(chesslist);  if(predefined == pattern) return true;  return false ;   } var computeScore2 = function(refPoint , direction) {  var prev = role.find(refPoint , direction , 2);  var next = role.find(refPoint , role.reverseDirection(direction) , 2);  var prevPattern = role.convertToPattern(prev);  var nextPattern = role.convertToPattern(next);  if(prevPattern == 'II' && nextPattern == 'II') return true;  return false; } var computeScore3 = function(refPoint , direction) {  var prev = role.find(refPoint , direction , 3);  var next = role.find(refPoint , role.reverseDirection(direction) , 1);  var prevPattern = role.convertToPattern(prev);  var nextPattern = role.convertToPattern(next); if(prevPattern == 'III' && nextPattern == 'I') return true; return false;   } this._computeScore = function(refPoint , direction) {  if(computeScore1(refPoint , direction) || computeScore2(refPoint , direction) || computeScore3(refPoint , direction))   return 100000;  else return 0; }}var Four_Live = function(role){ Compute.call(this, role); this._computeScore = function(refPoint , direction) {  var score = 0;  var prev = role.find(refPoint , direction , 4);  var next = role.find(refPoint , role.reverseDirection(direction), 1);  var prevPattern = this._convertToPattern(prev);  var nextPattern = this._convertToPattern(next);  if(prevPattern == 'III0' && nextPattern == '0') score = 10000;   return score;   }}var Four_Live1 = function(role){ Compute.call(this, role); this._computeScore = function(refPoint , direction) {  var prev = role.find(refPoint , direction , 3);  var next = role.find(refPoint , role.reverseDirection(direction) , 2);  var prevPattern = this._convertToPattern(prev);  var nextPattern = this._convertToPattern(next);    if(prevPattern == 'II0' && nextPattern == 'I0') return 10000;  else return 0; }}var Tree_Live = function(role){ Compute.call(this, role); this._computeScore = function(refPoint , direction) {  var score = 0;  var prev = role.find(refPoint , direction , 3);  var next = role.find(refPoint , role.reverseDirection(direction), 2);  var prevPattern = this._convertToPattern(prev);  var nextPattern = this._convertToPattern(next);  if(prevPattern == 'II0' && nextPattern == '00')   score += 1000;  return score; }}var Tree_Live1 = function(role){ Compute.call(this, role); this._computeScore = function(refPoint , direction) {  var prev = role.find(refPoint , direction , 2);  var next = role.find(refPoint , role.reverseDirection(direction), 3);  var prevPattern = this._convertToPattern(prev);  var nextPattern = this._convertToPattern(next); if(prevPattern == 'I0' && nextPattern == 'I00')  return 1000 else return 0;    }}var Two_Live = function(role){ Compute.call(this, role); this._computeScore = function(refPoint , direction) {  var prev = role.find(refPoint , direction , 3);  var next = role.find(refPoint , role.reverseDirection(direction), 2);   var prevPattern = this._convertToPattern(prev);  var nextPattern = this._convertToPattern(next); if(prevPattern == 'I00' && nextPattern == '00') return 100; else return 0;   }}var One_Live = function(role){ Compute.call(this, role); this._computeScore = function(refPoint , direction) {  var prev = role.find(refPoint , direction , 3);  var next = role.find(refPoint , role.reverseDirection(direction), 3);   var prevPattern = this._convertToPattern(prev);  var nextPattern = this._convertToPattern(next); if(prevPattern == '000' && nextPattern == '000') return 10; else return 0;   }}var Four_End = function(role){ Compute.call(this, role); this._computeScore = function(refPoint , direction) {  var prev = role.find(refPoint , direction , 3);  var next = role.find(refPoint , role.reverseDirection(direction), 1);   var prevPattern = this._convertToPattern(prev);  var nextPattern = this._convertToPattern(next); if(prevPattern == 'III' && nextPattern == '0') return 150; else return 0;   }}var Role = function(board){ var computers = []; var self = this; var isVictory = false; this.isVictory = function() {  return isVictory; } var getScore = function(point) {  var score = 0;  for(var i = 0 , computer; computer = computers[i++];)  {   computer.compute(point);   score += computer.getScore();  }  var result = {score: score , point : point};  return result; } var getScoreList = function() {  var result = [];  var avaiablePoints = board.getAvaiablePoints();  for(var i = 0 , point; point = avaiablePoints[i++];)   {   result.push(getScore(point));  }  return result; } this.getCode = function() {  throw new Error('未實現'); } this.getPeak = function() {  var scoreInfo = getScoreList();  scoreInfo.sort(function(a,b){   return b.score - a.score ;  });  return scoreInfo[0]; }  this.convertToPattern = function(chesslist) {  var pattern = '';  if(!chesslist) return '';  for(var i = 0 ; i < chesslist.length ; i ++)  {   var chess = chesslist[i];   if(chess == undefined) pattern += '0';   else if(chess.getOwner() == this.getCode()) pattern += 'I';   else pattern += 'Y';  }  return pattern ; } this.reverseDirection = function(direction) {  switch(direction)  {   case LEFT : return RIGHT;   case RIGHT : return LEFT;   case TOP : return BOTTOM;   case BOTTOM : return TOP;   case LEFT_TOP : return RIGHT_BOTTOM;   case RIGHT_BOTTOM : return LEFT_TOP;   case RIGHT_TOP : return LEFT_BOTTOM;   case LEFT_BOTTOM : return RIGHT_TOP;   default : alert('方向錯誤');  } }  this._checkGameOver = function(point) {  var leftRight = findVictory(point , LEFT);  var topBottom = findVictory(point , TOP);  var leftTopRightBottom = findVictory(point , LEFT_TOP);  var rightTopLeftBottom = findVictory(point , RIGHT_TOP);  var array = [leftRight , topBottom , leftTopRightBottom , rightTopLeftBottom];  var victory = [];  for(var i = 0 ; i < array.length ; i ++)  {   if(array[i].length >= 5) victory.push(array[i]);  }  if(victory.length > 0)  {   board.gameOver();   board.setVictory(victory);   isVictory = true;  }  if(board.getAvaiablePoints().length ==0) board.gameOver(); } var isLicitPoint = function(point) {  return point.x >= 0 && point.y >= 0 && point.x <= TRANSVERSE && point.y <= VERTICAL    && board.getChess(point) && board.getChess(point).getOwner() == self.getCode() } var findVictory = function(refPoint , direction) {  var reverse = self.reverseDirection(direction);  var result = [];  var nextPoint ;  var currPoint = {x: refPoint.x , y: refPoint.y};  while(true)  {   nextPoint = board.getNextPoint(currPoint, direction);   if(!isLicitPoint(nextPoint)) break;   currPoint = {x :nextPoint.x , y:nextPoint.y};  }  while(true)  {  result.push(currPoint);      nextPoint = board.getNextPoint(currPoint , reverse);   if(!isLicitPoint(nextPoint)) break;     currPoint = { x: nextPoint.x , y: nextPoint.y };  }  return result; } this.find = function(point , direction , deep) {  var refPoint = {x: point.x , y : point.y};  var result = new Array;   var index = 1;   var nextPoint;   while(index <= deep)   {   nextPoint = board.getNextPoint(refPoint, direction);    if(nextPoint.x < 0 || nextPoint.y < 0 ||     nextPoint.x > TRANSVERSE || nextPoint.y > VERTICAL) return null;    var chess = board.getChess(nextPoint);    if(chess) chess.point = {x:nextPoint.x , y:nextPoint.y};    result.push(chess);    refPoint = nextPoint;    index ++;   }   return result; }  var initialize = function() {  computers.push(new Five(self));  computers.push(new Four_Live(self));  computers.push(new Tree_Live(self));  computers.push(new Four_Live1(self));  computers.push(new Tree_Live1(self));  computers.push(new Two_Live(self));  computers.push(new One_Live(self));  computers.push(new Four_End(self)); } initialize();}var Machine = function(board, rival){ Role.call(this, board); this.setChess = function() {  if(board.isGameOver()) return;  var myPeak = this.getPeak();  var rivalPeak = rival.getPeak();  var peak ;  if(myPeak.score >= rivalPeak.score) peak = myPeak;  else peak = rivalPeak;  var chess = new Chess();  chess.setOwner(this.getCode());  board.setChess(chess, peak.point);  this._checkGameOver(peak.point); } this.getCode = function(){return 'machine';}}var Person = function(board , rival){ Role.call(this, board); this.setChess = function(x,y) {  if(board.isGameOver()) return;  var point = new Object;  point.x = x;  point.y = y;  var chess = new Chess()  chess.setOwner(this.getCode());  board.setChess(chess, point);  this._checkGameOver(point); } this.getCode = function(){ return 'person'; }}var UIBase = function(){ var self = this; this._id = '$UI' + (++ UIBase.index); this._globalKey = ""; this.getHTML = function() {  return ""; } var setGlobalKey = function() {  var magic = '$UI_Items';  self._globalKey = 'window.'+magic+'.'+self._id;    window[magic] = window[magic] || {};  window[magic][self._id] = self; } var formatHTML = function(html) {  html = html.replace(//$/$/g, self._globalKey);  html = html.replace(/&&/g,self._id);  return html; }  var initUIBase = function() {  setGlobalKey(); } this.renderHTML = function() {  return formatHTML(this.getHTML()); } this.getDOM = function() { var dom = document.getElementById(this._id)  return dom; } initUIBase();}UIBase.index = 0;var ChessUI = function(board, placeholder){ UIBase.call(this); this.setChess = function(){} this.getHTML = function() {  var html = '';  var map = board.getMap();  for(var key in map)  {   var onclick = '';   var className = map[key];   if(className == '') onclick='$$._setChess('+ key +')';  html += '<div onclick="'+ onclick +'" class="'+ className +'"></div>';  }  return html; } this.draw = function() {  var html = this.renderHTML();  document.getElementById(placeholder).innerHTML = html; } this._setChess = function(x,y) {  this.setChess(x,y); } this.draw();}function getMSIEVersion(){ var regex = /MSIE([^;]+)/; var userAgent = navigator.userAgent; var result = regex.exec(userAgent); if(result) return parseInt(result[1]);}function initGame(){ var version = getMSIEVersion(); if(version && version <= 8) {  alert('請使用非IE瀏覽器(ie9、10除外)進行游戲(google chrome 、firefox等 )');  return; } var board = new Board(); var person = new Person(board); var machine = new Machine(board, person); var chessUI = new ChessUI(board, 'board'); chessUI.setChess = function(x,y) {  person.setChess(x,y);  machine.setChess();  chessUI.draw();  if(board.isGameOver())  {   if(person.isVictory()) alert('您獲得了勝利');   else if(machine.isVictory()) alert('機器獲得了勝利');   else alert('游戲結束,勝負未分');  } } if(Math.floor(Math.random() * 10) % 2) {  alert('機器執棋');  machine.setChess();  chessUI.draw(); } else {  alert('您執棋'); }}</script></body></html>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产福利精品视频| 久久久久久久一区二区三区| 亚洲人a成www在线影院| 欧美成人四级hd版| 国产亚洲欧洲高清一区| 欧美高清性猛交| 欧美性xxxxxxxxx| 成人国产精品一区二区| 中文字幕最新精品| 国产成人激情小视频| 欧美大荫蒂xxx| 欧美精品videos性欧美| 91精品久久久久久久久久久久久久| 国产亚洲激情视频在线| 国产精品91免费在线| 欧美成aaa人片在线观看蜜臀| 国语自产偷拍精品视频偷| 国产成人一区三区| 麻豆国产va免费精品高清在线| 欧美精品福利视频| 日韩成人小视频| 国产精品亚洲美女av网站| 欧美成人精品在线观看| 日韩av大片免费看| 九九热这里只有在线精品视| 九九精品在线播放| 国产精品美女呻吟| 91免费看国产| 伊人激情综合网| 欧美一级视频免费在线观看| 国产精品久久久久久久久久三级| 欧美精品成人91久久久久久久| 国产日韩欧美91| 91久久精品国产91久久| 曰本色欧美视频在线| 国内久久久精品| 国产日韩欧美另类| 日韩国产高清污视频在线观看| 91视频88av| 亚洲sss综合天堂久久| 日本一区二区在线免费播放| 日韩经典中文字幕| 91av在线网站| 精品色蜜蜜精品视频在线观看| 亚洲一区二区三区在线免费观看| 日韩欧美在线视频观看| 久久精品99久久久久久久久| 亚洲国产成人在线播放| 欧美精品video| 国产色综合天天综合网| 国产精品第3页| 一本色道久久88综合日韩精品| 色综合久久精品亚洲国产| 国产乱人伦真实精品视频| 九九热在线精品视频| 欧美日本啪啪无遮挡网站| 欧美精品在线视频观看| 日本三级韩国三级久久| 亚洲全黄一级网站| 国产精品91免费在线| 亚洲自拍欧美色图| 亚洲一级片在线看| 久久精品国产精品亚洲| 国产精品aaa| 国产精品视频网| 国内揄拍国内精品| 久久精品视频在线| 亚洲国产精久久久久久久| 亚洲天堂av女优| 亚洲福利视频久久| 色系列之999| 欧美小视频在线观看| 国产日韩在线视频| 欧美午夜精品在线| 精品日韩中文字幕| 日韩成人中文电影| 久久久91精品国产一区不卡| 精品无人区太爽高潮在线播放| 欧美专区在线播放| 日韩免费不卡av| 欧美大片在线看| 欧美日韩国产一区二区三区| 精品久久久999| 精品福利一区二区| 久久精品国产99国产精品澳门| 在线观看不卡av| 国产主播精品在线| 三级精品视频久久久久| 人人澡人人澡人人看欧美| 久久人人看视频| 丝袜亚洲欧美日韩综合| 亚洲欧美日韩中文在线| 国产精品黄色av| 亚洲三级 欧美三级| 2019国产精品自在线拍国产不卡| 精品久久久久久久久久久久久| 国产精品美女视频网站| 亚洲91精品在线观看| 成人精品久久久| 国产日本欧美一区二区三区| 亚洲专区国产精品| 亚洲色图色老头| 欧美专区福利在线| 国产丝袜一区视频在线观看| 国模gogo一区二区大胆私拍| 福利视频导航一区| 91av在线视频观看| 国产精品一区二区av影院萌芽| 麻豆国产精品va在线观看不卡| 欧美日韩国产成人在线观看| 成人国产亚洲精品a区天堂华泰| 欧美精品情趣视频| 亚洲男人天堂网| 亚洲乱码国产乱码精品精| 欧美寡妇偷汉性猛交| 久久久久久久影院| 亚洲自拍偷拍在线| 国产精品视频专区| 国产成人综合精品在线| 97久久久久久| 麻豆国产va免费精品高清在线| 久久久电影免费观看完整版| 伊人男人综合视频网| 欧美性精品220| 欧美亚洲日本网站| 国产亚洲精品日韩| 欧美精品激情blacked18| 精品中文字幕在线2019| 欧美亚洲免费电影| 亚州成人av在线| 欧美成人自拍视频| 久久久精品一区二区| 欧美精品在线网站| 欧美日本国产在线| 欧美大片免费观看在线观看网站推荐| 欧美丰满老妇厨房牲生活| 日本老师69xxx| 国产成人精品优优av| 久久久999精品| 国产精品www| 亚洲综合精品一区二区| 色在人av网站天堂精品| 国产裸体写真av一区二区| 亚洲第一男人av| y97精品国产97久久久久久| 亚洲精品一区二区网址| 国产日韩精品入口| 欧洲亚洲妇女av| 26uuu另类亚洲欧美日本老年| 色阁综合伊人av| 韩剧1988免费观看全集| 欧美日韩国产丝袜另类| 色青青草原桃花久久综合| 成人两性免费视频| 成年人精品视频| 亚洲精品国产综合久久| 欧美日韩亚洲网| 久久久久久久久电影| 久久久极品av| 亚洲国产中文字幕在线观看| 一区二区三区www| 国产亚洲精品久久久久动| 成人黄色免费网站在线观看| 国产精品白嫩初高中害羞小美女|