日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

HTML五子棋游戏代码介绍,五子棋html游戏代码与算法介绍

發(fā)布時(shí)間:2025/4/5 HTML 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTML五子棋游戏代码介绍,五子棋html游戏代码与算法介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

五子棋html游戲代碼與算法介紹

我會(huì)把html文件、css文件提供下載地址,文件夾路徑也展示給大家。但是圖片就沒法一一放在博客里面了。

大家有需要的話,加博主QQ:2864144286,全天在線。

運(yùn)行圖片

目錄路徑

五子棋.html

五子棋-黑子電腦

/**********************自定義便捷函數(shù)*******************************/

function getRandom(min,max){//獲取在區(qū)間[min.max]內(nèi)的int數(shù)

let s;

s=parseInt(Math.random()*max+1);

while(s

{

s=parseInt(Math.random()*max+1);

}

return s;

}

/**************************定義初始化數(shù)據(jù)*****************************************/

/***封裝棋盤里面的點(diǎn) 類*****/

function Point(index,hang,lie){

this.idnex=index;

this.hang=hang;

this.lie=lie;

this.state=0;

this.pointX=-17+(this.lie-1)*52;

this.pointY=-17+(14-this.hang+1)*52;

}

var pointsScore=new Array(226);

var points=new Array(226);

for(let i=1;i<=225;i++)

{

points[i]=new Point(i,parseInt((i-1)/15+1),i-parseInt((i-1)/15)*15);

pointsScore[i]=0;

}

console.log(points[15].pointX);

/**************************系統(tǒng)設(shè)置*****************************************/

/*

* 封裝游戲容器居中

*/

(() => {

let screenHeight=parseInt($(window).height()); //瀏覽器時(shí)下窗口可視區(qū)域高度

let screenWidth=parseInt($(window).width()); //瀏覽器時(shí)下窗口可視區(qū)域高度

let containerHeigth=parseInt($("#container").height());//container容器高度

let containerWidth=parseInt($("#container").width());//container容器寬度

$("#container").css({

'marginLeft':(screenWidth-containerWidth)/2+'px',

'marginTop':(screenHeight-containerHeigth)/2+'px',

})

})();

/** 根據(jù)鼠標(biāo)相對于棋盤坐標(biāo)軸的位置,以30*30px大小的正方形位界限,

** 搜索在矩形內(nèi)是否有point點(diǎn)存在,然后根據(jù)坐標(biāo)確定points的index

*/

let getPointsIndex = (movex,movey) => {

let hang=-1,lie=-1;

for(let i=1;i<=15;i++){

if(movex<=points[i].pointX+32&&movex>=points[i].pointX+2) lie=i;

if(movey<=points[i].pointX+32&&movey>=points[i].pointX+2) hang=16-i;

}

if(hang==-1||lie==-1) return 0;

return (hang-1)*15+lie;

}

addChess(1,113);

/***對點(diǎn)擊事件,獲取相對于棋盤坐標(biāo)軸的位置,然后根據(jù)坐標(biāo)確定points的index*****/

$("#container").on("click",function(e){

console.log("--------點(diǎn)擊了!");

e = e || window.event;

if(e.pageX || e.pageY) {

movex = e.pageX-parseInt($("#container").css("marginLeft"))-37;

movey = e.pageY-parseInt($("#container").css("marginTop"))-12;

}

console.log("--------檢索到坐標(biāo)的index為:"+getPointsIndex(movex,movey));

addChess(-1,getPointsIndex(movex,movey));

addChess(1,computer(getPointsIndex(movex,movey)));

})

/*******添加棋子********/

function addChess(state,index){//state代表狀態(tài),1黑子 -1白子

var img=$(new Image());

img.attr({

'src':'css/img/'+(state==1?'black':'white')+'.png',

'class':'chess'

});

img.css({

'margin-left':points[index].pointX+'px',

'margin-top':points[index].pointY+'px',

});

points[index].state=state;

$("#chessboard").append(img);

}

/**************************電腦算法*****************************************/

/***評(píng)分表***/

var score1={//白子為電腦 電腦主…… 我也不知道主進(jìn)攻還是防守

empty : 7,

b_1 : 35,

b_2 : 800,

b_3 : 15000,

b_4 : 80000,

w_1 : 15,

w_2 : 400,

w_3 : 1800,

w_4 : 10000,

polluted : 0

}

function getScore(isEmpty,isPolluted,stateNum,state,i){//白棋為電腦,主防守

let fen=score1;

if(points[i].state!=0) pointsScore[i]=0;

else{

if(isPolluted) pointsScore[i]+=fen.polluted;

else if(isEmpty) pointsScore[i]+=fen.empty;

else {

if(stateNum==1&&state==1) pointsScore[i]+=fen.b_1;

else if(stateNum==2&&state==1) pointsScore[i]+=fen.b_2;

else if(stateNum==3&&state==1) pointsScore[i]+=fen.b_3;

else if(stateNum==4&&state==1) pointsScore[i]+=fen.b_4;

if(stateNum==1&&state==-1) pointsScore[i]+=fen.w_1;

else if(stateNum==2&&state==-1) pointsScore[i]+=fen.w_2;

else if(stateNum==3&&state==-1) pointsScore[i]+=fen.w_3;

else if(stateNum==4&&state==-1) pointsScore[i]+=fen.w_4;

}

}

}

function computer(index){

for(let i=1;i<=225;i++) pointsScore[i]=0;

for(let q=1;q<=225;q++){

let hangPointIndex=q;//得到此點(diǎn)的index

for(let j=1;j<=5;j++)//遍歷與此點(diǎn)橫相關(guān)的五元組,理論上有五個(gè)五元組

{

if(points[hangPointIndex].lie>=j&&points[hangPointIndex].lie<=10+j)//篩選可成立的五元組

{

let isEmpty=1,isPolluted=0,isPolluted1=0,isPolluted2=0,stateNum=0,state=0;

for(let k=1;k<=5;k++)

{

if(points[hangPointIndex+k-j].state!=0) {isEmpty=0;stateNum++;}

if(points[hangPointIndex+k-j].state==1) isPolluted1=1;

if(points[hangPointIndex+k-j].state==-1) isPolluted2=1;

}

if(isPolluted1==1&&isPolluted2==1) isPolluted=1;

if(isPolluted1==1&&isPolluted2==0) state=1;

if(isPolluted1==0&&isPolluted2==1) state=-1;

getScore(isEmpty,isPolluted,stateNum,state,hangPointIndex);

}

}

let liePointIndex=q;//得到此點(diǎn)的index

for(let j=1;j<=5;j++)//遍歷與此點(diǎn)縱相關(guān)的五元組,理論上有五個(gè)五元組

{

if(points[liePointIndex].hang>=j&&points[liePointIndex].hang<=10+j)//篩選可成立的五元組

{

var isEmpty=1,isPolluted=0,isPolluted1=0,isPolluted2=0,stateNum=0,state=0;

for(var k=1;k<=5;k++)

{

if(points[liePointIndex+(k-j)*15].state!=0) {isEmpty=0;stateNum++;}

if(points[liePointIndex+(k-j)*15].state==1) isPolluted1=1;

if(points[liePointIndex+(k-j)*15].state==-1) isPolluted2=1;

}

if(isPolluted1==1&&isPolluted2==1) isPolluted=1;

if(isPolluted1==1&&isPolluted2==0) state=1;

if(isPolluted1==0&&isPolluted2==1) state=-1;

getScore(isEmpty,isPolluted,stateNum,state,liePointIndex);

}

}

let nowIndex=q;//獲取此時(shí)point的索引index

for(var j=1;j<=5;j++)//遍歷與此點(diǎn)正斜(形如“/”)相關(guān)的五元組,理論上有五個(gè)五元組

{

if(points[nowIndex].hang>=j&&points[nowIndex].hang<=10+j&&points[nowIndex].lie>=j&&points[nowIndex].lie<=10+j)//篩選可成立的五元組

{

var isEmpty=1,isPolluted=0,isPolluted1=0,isPolluted2=0,stateNum=0,state=0;

for(var k=1;k<=5;k++)

{

if(points[nowIndex+(k-j)*16].state!=0) {isEmpty=0;stateNum++;}

if(points[nowIndex+(k-j)*16].state==1) isPolluted1=1;

if(points[nowIndex+(k-j)*16].state==-1) isPolluted2=1;

}

if(isPolluted1==1&&isPolluted2==1) isPolluted=1;

if(isPolluted1==1&&isPolluted2==0) state=1;

if(isPolluted1==0&&isPolluted2==1) state=-1;

getScore(isEmpty,isPolluted,stateNum,state,nowIndex);

}

}

for(var j=1;j<=5;j++)//遍歷與此點(diǎn)反斜(形如“\”)相關(guān)的五元組,理論上有五個(gè)五元組

{

if(points[nowIndex].hang>=6-j&&points[nowIndex].hang<=16-j&&points[nowIndex].lie>=j&&points[nowIndex].lie<=10+j)//篩選可成立的五元組

{

var isEmpty=1,isPolluted=0,isPolluted1=0,isPolluted2=0,stateNum=0,state=0;

for(var k=1;k<=5;k++)

{

if(points[nowIndex-(k-j)*14].state!=0) {isEmpty=0;stateNum++;}

if(points[nowIndex-(k-j)*14].state==1) isPolluted1=1;

if(points[nowIndex-(k-j)*14].state==-1) isPolluted2=1;

}

if(isPolluted1==1&&isPolluted2==1) isPolluted=1;

if(isPolluted1==1&&isPolluted2==0) state=1;

if(isPolluted1==0&&isPolluted2==1) state=-1;

getScore(isEmpty,isPolluted,stateNum,state,nowIndex);

}

}

}

let maxIndex=[],max=0;

for(let val of pointsScore) if(val>max) max=val;

for(let i=1;i<=225;i++) if(pointsScore[i]==max) maxIndex.push(i);

return maxIndex[parseInt(Math.random()*(maxIndex.length))];

}

五子棋算法

五子棋有15行、15列,一共225個(gè)點(diǎn)。假設(shè)每個(gè)點(diǎn)都有自己的分?jǐn)?shù)。

我們遍歷每個(gè)點(diǎn)。

如上圖,對于每個(gè)點(diǎn)來說,它在橫、豎、正斜(“/”)、反斜(“\”)四個(gè)方向上,都會(huì)有包含此點(diǎn)的五元組,一共20個(gè)。

我們遍歷這20個(gè)五元組。

對于每個(gè)五元組來說,如果里面有黑子有白子,我們稱五元組被污染了,如果五元組是空的,或者有1個(gè)到4個(gè)白子或黑子,我們都給出相應(yīng)的分?jǐn)?shù)。評(píng)分表如下:

/***評(píng)分表***/

empty : 7,

b_1 : 35,

b_2 : 800,

b_3 : 15000,

b_4 : 80000,

w_1 : 15,

w_2 : 400,

w_3 : 1800,

w_4 : 10000,

polluted : 0

最后20個(gè)五元組得出的分?jǐn)?shù),都加再這一點(diǎn)上面。

之后遍歷225個(gè)點(diǎn)的分?jǐn)?shù),得出最大分?jǐn)?shù)的點(diǎn),下棋。

算法結(jié)構(gòu)大致畫為:

進(jìn)行下一個(gè)游戲的開發(fā)!

注意事項(xiàng)

【1】 原創(chuàng)博客,轉(zhuǎn)載本篇請與我聯(lián)系,尊重版權(quán)。QQ:2864144286

【2】 關(guān)于閱讀本篇博客的所有問題、代碼源碼、圖片素材、編程技巧、編程經(jīng)歷都可聯(lián)系我,與我交流討論。

【3】 本人部分時(shí)間承接各種畢業(yè)設(shè)計(jì)、網(wǎng)站編寫、微信小程序編寫、數(shù)據(jù)庫作業(yè)編寫。需要請加QQ:2864144286,詳聊。

征途黯然.

發(fā)布了57 篇原創(chuàng)文章 · 獲贊 43 · 訪問量 1萬+

私信

關(guān)注

標(biāo)簽:fen,五子棋,state,算法,html,let,&&,pointsScore,points

來源: https://blog.csdn.net/qq_43592352/article/details/104106272

總結(jié)

以上是生活随笔為你收集整理的HTML五子棋游戏代码介绍,五子棋html游戏代码与算法介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成年人在线观看视频网站 | 噼里啪啦国语版在线观看 | 狠狠干中文字幕 | 9.1成人免费看片 | 国产精品扒开腿做爽爽爽a片唱戏 | 黄色香蕉软件 | 国产精品久久久久久妇女6080 | 91色噜噜 | 欧美大片aaa | 99re视频这里只有精品 | 国产 日韩 欧美 制服丝袜 | 污网站免费在线观看 | 免费成人视屏 | 国产视频在线看 | 欧美一级片a | 亚洲AV成人午夜无码精品久久 | 麻豆蜜臀 | 国产东北女人做受av | 成人免费网站www网站高清 | 美女日批在线观看 | aa视频在线观看 | 欧美另类自拍 | 成人日韩在线观看 | 久久dvd| 国产精品久久久久久久久久久久久久久久久 | 另类ts人妖一区二区三区 | 中文久久精品 | 91传媒入口 | 国产永久免费无遮挡 | 国产91在线观看 | 蜜桃色av| 日韩美女国产精品 | 99自拍视频在线观看 | 国产欧美综合一区二区三区 | 日日草夜夜操 | 强辱丰满人妻hd中文字幕 | 波多野结衣加勒比 | 国产美女免费 | 国产麻豆成人传媒免费观看 | 在线视频观看你懂得 | 韩国一级淫一片免费放 | 中文字幕一区二区在线观看 | 亚洲永久精品在线观看 | 草久在线观看视频 | 男人天堂中文字幕 | 黄色成人免费观看 | 国产中文字幕在线播放 | 素人av在线 | 欧美午夜性春猛交 | 久久久福利视频 | 欧美日韩另类一区 | 亚洲a一区二区 | 国产日韩高清在线 | 成人p站在线观看 | 欧美午夜寂寞影院 | 成年人毛片 | 国产精成人品免费观看 | 国产久操视频 | 黄色福利| 成人av中文字幕 | 国产亚洲欧美日韩高清 | 一区二区三区手机在线观看 | 亚洲黄a | 欧美嫩草影院 | 最近中文字幕 | 影音先锋久久 | 91久久极品少妇xxxxⅹ软件 | 国产经典一区二区三区 | 欧美夫妇交换xxx | 丁香六月激情 | 亚洲日本免费 | 精品亚洲aⅴ无码一区二区三区 | 少妇一级淫片免费 | 日韩一区二区三区在线观看 | 日韩一级 | 国产精品午夜福利 | 男人捅爽女人 | 国产精品一区二区6 | av电影在线观看不卡 | 在线视频观看国产 | 一级做a免费视频 | 日韩一级大片 | 国产亚洲精品久久久久丝瓜 | 偷看洗澡一二三区美女 | 国产激情小视频 | av三级网站 | 日韩精品免费一区二区夜夜嗨 | 91老司机在线 | 亚洲丝袜中文字幕 | 四虎网址在线观看 | 日本不卡久久 | 天天爽视频| 一区二区 中文字幕 | 吃奶摸下的激烈视频 | 成人禁污污啪啪入口 | 亚洲av无码一区二区乱子仑 | 久热国产精品视频 | 欧美人与性动交xxⅹxx | 天天干天天上 |