/p>

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

五子棋

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}

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 == '') οnclick='$$._setChess('+ key +')';

html += '

}

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('您执棋');

}

}

html jq五子棋,jQuery实现的五子棋游戏实例相关推荐

  1. java 五子棋_java实现联机五子棋

    a.jpg Config.xml ~ 122B <?xml version='1.0' encoding='UTF-8'?>5088 Main.java ~ 112B import pan ...

  2. c#五子棋实验报告_C#五子棋完整项目

    [实例简介] VS2012,可双人玩,键盘操作,可记录落子数量,黑白棋比分,上一次落子位置会高亮显示,方便直观.博客介绍地址:http://blog.csdn.net/q594076608/artic ...

  3. html5游戏 dice掷骰子,使用jQuery实现掷骰子游戏

    本文实例为大家共享了jQuery实现掷骰子游戏的详细代码,供大家参考,详细内容如下 直接新版建一个html网页,需要在head中引入jquery,js,一些css代码以及js代码,如下: .wrap{ ...

  4. jQuery打字练习小游戏代码带音效

    下载地址 jQuery键盘打字练习游戏代码带音效,类似于金山打字练习键盘游戏源码下载. dd:

  5. 基于html篮球网页游戏,基于html5和jquery的篮球跳动游戏

    今天给大家分享一款基于html5和jquery的篮球跳动游戏.这款实例和之前分享的HTML5重力感应小球冲撞动画类似.用鼠标拖动篮球,篮球在页面上跳动,可在演示中看下效果.效果图如下: 实现的代码. ...

  6. [原创]jQuery推箱子小游戏(100关且可扩展可选关),休闲,对战,娱乐,小游戏,下载即用,兼容iPad移动端,代码注释全(附源码)

    Sokoban 介绍 [原创]jQuery推箱子小游戏(100关且可扩展可选关),休闲,对战,娱乐,小游戏,下载即用,兼容iPad移动端,代码注释全(附源码) 游戏说明 经典的推箱子是一个来自日本的古 ...

  7. jQuery 版坦克大战游戏

    查看效果 下载地址 jQuery 版坦克大战游戏,仅完成了一个基本的对战模块雏形,为你打造功能完备的大型射击类网页游戏做准备.通过这个小游戏的编程实战,你可以了解到角色转换.角色移动.子弹碰撞判断.生 ...

  8. php 掷,jQuery+PHP实现的掷色子抽奖游戏实例

    jQuery+PHP实现的掷色子抽奖游戏实例 发布于 2016-01-23 05:44:43 | 334 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypert ...

  9. 页面打印插件 jquery.jqprint.js 插件使用实例

    页面打印插件 jquery.jqprint.js 插件使用实例 jquery.jqprint.js 插件下载 jqprint 是一个基于jQuery编写的页面打印的一个小插件,可以对页面指定元素的内容 ...

最新文章

  1. Docker安装weblogic(五)
  2. 项目怎么放到服务器里,如何把项目放到服务器上
  3. c 获取当前时间插入oracle数据库,Oracle如何获取系统当前时间等操作实例,c++获取系统时间...
  4. IIR+全通滤波器级联实现系统零相位相移_matlab仿真
  5. 将25k行C#转换为Java的经验教训
  6. Python测试开发django3.视图和URL配置
  7. Java笔记-CXF使用Adapter处理复杂类型(如Map)
  8. JS中格式化数据保留两位小数
  9. SELinux相关内容
  10. Linux函数之间的goto 跳转
  11. Protocol handler start failedCaused by: java.net.SocketException: Permission denied
  12. spring 依赖注入_Spring从入门到入土——依赖注入(DI)
  13. ssas表格模型 权限控制_性能调整SSAS表格模型
  14. Python Socket编程初探
  15. N、NP、NPC问题分析总结
  16. IE-LAB网络实验室:华为认证 北京华为认证,思科ccie,sp ccie 思科ccnp CCNP需要学习多长时间
  17. 财报汇总 | 中国生物制药、格林酒店、海亮教育、洪恩教育等5家企业公布最新业绩...
  18. 洛达芯片检测工具AB153x_UT,检测蓝牙芯片协议
  19. 史上第一个虫洞,被谷歌量子计算机造出来了 | Nature封面
  20. Linux查看磁盘存储空间大小

热门文章

  1. android zip中文乱码,Android中解压zip中文乱码处理
  2. Linux 常用知识点(一):.sh 文件的创建与打开
  3. ntp服务restrict_linux设置NTP服务器及时间同步
  4. [从零开始]用python制作识图翻译器·五
  5. Makefile执行报错:make: *** No rule to make target ` ‘, needed by xxx. Stop.
  6. 【redis】rediss指定地点安装报错 make: *** No rule to make target ‘xx/xxx/xx’ Stop.
  7. 如何用最笨最直接的方式破解m3u8视频文件
  8. LTE-FDD和LTE-TDD的区别
  9. MDT2013系列之一 MDT 2013 Update 1安装和部署
  10. 从源码编译安装软件经验+技巧