Example of backgammon game implemented by jQuery_jquery
本文实例讲述了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程序设计有所帮助。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

If Nvgpucomp64.dll is causing your game to crash frequently, the solutions provided here may help you. This problem is usually caused by outdated or corrupted graphics card drivers, corrupted game files, etc. Fixing these issues can help you deal with game crashes. The Nvgpucomp64.dll file is associated with NVIDIA graphics cards. When this file crashes, your game will crash too. This usually happens in games like LordsoftheFallen, LiesofP, RocketLeague, and ApexLegends. Nvgpucomp64.dll crashes games on Windows PC if N

The superpeople game can be downloaded through the steam client. The size of this game is about 28G. It usually takes one and a half hours to download and install. Here is a specific download and installation tutorial for you! New method to apply for global closed testing 1) Search for "SUPERPEOPLE" in the Steam store (steam client download) 2) Click "Request access to SUPERPEOPLE closed testing" at the bottom of the "SUPERPEOPLE" store page 3) After clicking the request access button, The "SUPERPEOPLECBT" game can be confirmed in the Steam library 4) Click the install button in "SUPERPEOPLECBT" and download

Friends who have played enough AAA masterpieces and mobile games, do you want to relive the computer games of your childhood? Then let’s look for Spider Solitaire in Windows 11 together! Click the Start menu on the interface, click the "All Apps" button; click "All Apps". Find and select "MicrosoftSolitaireCollection", which is Microsoft's Solitaire series game application; Solitaire series game selection. After loading is complete, enter the selection interface and find "Spider Solitaire"; select "Spider Solitaire". Although the interface has changed slightly, it is still the same as before

According to news from this site on April 20, ASUS recently released a BIOS update, which improves instability such as crashes when running games on Intel's 13th/14th generation processors. This site previously reported that players reported problems including that when running the PC demo version of Bandai Namco's fighting game "Tekken 8", even if the computer has sufficient memory and video memory, the system will crash and prompt an error message indicating insufficient memory. Similar crashing issues have also appeared in many games such as "Battlefield 2042", "Remnant 2", "Fortnite", "Lord of the Fallen", "Hogwarts Legacy" and "The Finals". RAD published a long article in February this year, explaining that the game crash problem is a combination of BIOS settings, high clock frequency and high power consumption of Intel processors.

Recently, some friends have reported that they often press the input method when playing games, which greatly affects the gaming experience. Here I will give you a detailed introduction to the method of disabling the input method when playing games in Win11. Anyone who needs it Friends can come and take a look. Disabling method: 1. Right-click the input method icon in the taskbar in the lower right corner and select "Language Preferences" in the list. 2. After entering the new interface, click the "Add preferred language" option. 3. In the pop-up window, select "English (United States)". 4. Click "Next" again. 5. Then choose whether to install some options according to your needs. 6. Then click "Install" and wait for the installation to complete. 7. Then click on the input method status bar in the lower right corner and select the "English (

According to news from this site on July 22, foreign media twistedvoxel discovered the rumored PS5 development codename "Trinity" and related image quality configuration files in the latest "World Part 1" update code of "No Man's Sky", which proves that Sony is expected to The PS5Pro model was recently launched. Although "No Man's Sky" has enhanced the graphics performance of the game in recent updates, many players still believe that this may be HelloGames paving the way for new models in advance. According to the latest graphics presets, under PS5 Pro The game's dynamic resolution scaling has been increased from 0.6 to 0.8, which means the game has a higher average resolution and some graphical details are upgraded from "High" to "Ultra" levels, but since each game

Optimize the frame rate of the PlayerUnknown's Battlegrounds game to improve the smoothness and performance of the game. Method: Update the graphics card driver: Make sure you have the latest graphics card driver installed on your computer. This helps optimize game performance and fix possible compatibility issues. Lower game settings: Adjust the graphics settings in the game to a lower level, such as reducing resolution, reducing special effects and shadows, etc. This takes the load off your computer and increases your frame rate. Close unnecessary background programs: While the game is running, close other unnecessary background programs and processes to free up system resources and improve game performance. Clear hard drive space: Make sure your hard drive has enough free space. Delete unnecessary files and programs, clean temporary files and Recycle Bin, etc. Turn off vertical sync (V-Sync): in game

1. Click on [Privacy] in the phone settings. 2. Click the [Microphone] option. 3. Turn on the switch on the right side of the game application that requires setting microphone permissions.
