JavaScript實(shí)現(xiàn)網(wǎng)頁五子棋小游戲
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)網(wǎng)頁五子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下
設(shè)計(jì)思路如下:
1.先采用的Math.random()方法決定哪一方先行;
2.設(shè)置變量WFLAG = 1,BFLAG = 0時(shí)執(zhí)白子,WFLAG = 0,BFLAG = 1時(shí)執(zhí)黑子;
3.設(shè)置標(biāo)志[I]中,當(dāng)為白子時(shí)標(biāo)志[I] = 1,當(dāng)為黑子時(shí)標(biāo)志[I] = 2,且標(biāo)志[I]不為0時(shí)不能落子;
4.設(shè)置判斷語句,當(dāng)列5子時(shí),豎5子,斜5子時(shí)為勝利,并計(jì)分;
5.重新開始 - 重新初始化變量。
采用的方法如下:
1. Math.random():隨機(jī)產(chǎn)生0~1的隨機(jī)數(shù),含0但不包括1;
2. window.addEventListener(type,“javascript語句”,false):監(jiān)聽器,三個(gè)參數(shù),第一個(gè)參數(shù)為所要監(jiān)聽的事件的類型(mousedown-鼠標(biāo)按下,keydown-鍵盤按下等事件),第二個(gè)參數(shù)為發(fā)生事件后所要執(zhí)行的JavaScript的語句,第三個(gè)參數(shù)可選,默認(rèn)為假;
<!doctype html> <html> <head> <title>五子棋</title> <meta charset="utf-8"> <style> *{ ?? ?padding:0; ?? ?margin:0; ?? ?} #out{ ?? ?width:610px; ?? ?height:610px; ?? ?border:5px solid; ?? ?position:absolute; ?? ?margin-left:300px; ?? ?margin-top:100px; ?? ?} #play{ ?? ?width:200px; ?? ?height:80px; ?? ?position:absolute; ?? ?margin-left:500px; ?? ?margin-top:0px; ?? ?} #start{ ?? ?width:100px; ?? ?height:45px; ?? ?border-radius:25px; ?? ?position:absolute; ?? ?margin-top:0px; ?? ?margin-left:50px; ?? ?font-size:20px; ?? ?background-color:#CCFF66; ?? ?} span{ ?? ?width:80px; ?? ?height:30px; ?? ?position:absolute; ?? ?margin-top:50px; ?? ?border:1px solid; ?? ?text-align:center; ?? ?} .wq{ ?? ?width:40px; ?? ?height:40px; ?? ?border-radius:40px; ?? ?background-color:#999999; ?? ?margin-left:7px; ?? ?margin-top:0px; ?? ?} .bq{ ?? ?width:40px; ?? ?height:40px; ?? ?border-radius:40px; ?? ?background-color:#000000; ?? ?margin-left:7px; ?? ?margin-top:0px; ?? ?} table tr{ ?? ?height:50px; ?? ?} table tr td{ ?? ?width:50px; ?? ?height:50px; ?? ?} .block{ ?? ?width:50px; ?? ?height:50px; ?? ?} #history{ ?? ?width:100px; ?? ?height:50px; ?? ?position:absolute; ?? ?margin-top:40px; ?? ?margin-left:720px; ?? ?} #return{ ?? ?width:100px; ?? ?height:50px; ?? ?background-color:#999900; ?? ?border-radius:26px; ?? ?font-size:17px; ?? ?font-family:"Lucida Console", "Lucida Sans Typewriter", Monaco, "Courier New", monospace; ?? ?font-style:oblique; ?? ?} .tab{ ?? ?width:100px; ?? ?height:151px; ?? ?position:absolute; ?? ?margin-top:120px; ?? ?} .head{ ?? ?width:100px; ?? ?height:50px; ?? ?position:absolute; ?? ?margin-top:0px; ?? ?} .score{ ?? ?width:100px; ?? ?height:100px; ?? ?position:absolute; ?? ?margin-top:51px; ?? ?} .feshu{ ?? ?width:50px; ?? ?height:100px; ?? ?position:absolute; ?? ?margin-top:0px; ?? ?} img{ ?? ?width:100%; ?? ?height:100%; ?? ?} </style> <script> window.onload=function(){ ?? ?var white=document.getElementById("white"); ?? ?var black=document.getElementById("black"); ?? ?var start=document.getElementById("start"); ?? ?var out=document.getElementById("out"); ?? ?var le1=0,le2=0,ri1=0,ri2=0; ?? ?var left1=document.getElementById("left1"); ?? ?var left2=document.getElementById("left2"); ?? ?var right1=document.getElementById("right1"); ?? ?var right2=document.getElementById("right2"); ?? ?var images=new Array("./images/s0.png","./images/s1.png","./images/s2.png","./images/s3.png","./images/s4.png","./images/s5.png","./images/s6.png","./images/s7.png","./images/s8.png","./images/s9.png"); function goal(le2,ri2){ ?? ?left1.src=images[le1]; ?? ?left2.src=images[le2]; ?? ?right1.src=images[ri1]; ?? ?right2.src=images[ri2]; } ?? ?for(m=0;m<100;m++){ ?? ??? ?document.getElementsByTagName("td")[m].innerHTML='<div class="block" id="the'+m+'"></div>'; ?? ??? ?}?? ??? ? ?? ?//flag=1,不能放棋子 ?? ?var flag=new Array(100); ?? ?for(var j=0;j<100;j++){ ?? ??? ?flag[j]=0; ?? ?} ?? ?//1-白子先行,2-黑子先行?? ? ?? ?var wflag=0,bflag=0,lflag=0; ?? ?var turn=Math.floor(Math.random()*2);//0,1,如果是turn=0表示白子先行,=1表示黑子先行 ?? ?start.onclick=function(){ ?? ? ? ?if(turn+1==1){ ?? ??? ??? ? ? wflag=1; ?? ??? ??? ? ? bflag=0;?? ??? ? ?? ?? ??? ? ? ? ?} ?? ? ? ?else{ ?? ??? ??? ? ? wflag=0; ?? ??? ??? ? ? bflag=1; ?? ? ? ? ? ? ?} ? ?? ??? ?down(wflag,bflag); ?? ??? ?lflag=1; ?? ? ? ? ? } //重新開始 document.getElementById("return").onclick=kaishi; function kaishi(){ ?? ?for(m=0;m<100;m++){ ?? ??? ?document.getElementsByTagName("td")[m].innerHTML='<div class="block" id="the'+m+'"></div>'; ?? ??? ?}?? ??? ? ?? ?out.style.cursor="default"; ?? ?for(var j=0;j<100;j++){ ?? ??? ?flag[j]=0;//flag重置為0 ?? ?} ?? ? ? ?white.innerHTML=""; ?? ? ? ?black.innerHTML=""; ?? ??? ?wflag=0,bflag=0,lflag=0; ?? ??? ?var turn=Math.floor(Math.random()*2);//0,1 ?? ? ? ?start.onclick=function(){ ?? ? ? ?if(turn+1==1){ ?? ??? ??? ? ? wflag=1; ?? ??? ??? ? ? bflag=0; ?? ??? ? ? ? ?} ?? ? ? ?else{ ?? ??? ??? ? ? wflag=0; ?? ??? ??? ? ? bflag=1; ?? ? ? ? ? ? ?} ?? ??? ?down(wflag,bflag); ?? ??? ?lflag=1; ?? ? ? ? ? } ?? ??? ?win=0; } ? ? function down(wflag,bflag){ ?? ??? ?//下棋 ?? ? ? ?if(wflag==0 && bflag==1){ ?? ??? ? ? ? ?black.innerHTML="黑方執(zhí)子"; ?? ??? ??? ? ?white.innerHTML="白方等待"; ?? ??? ? ? ? ?wflag=1; ?? ??? ? ? ? ?bflag=0; ?? ??? ? ? ? ?out.style.cursor="url(./images/cursor1.cur),auto"; ??? ? ?? ??? ? ?} ?? ? ? ?else{ ?? ??? ? ? ? ?white.innerHTML="白方執(zhí)子"; ?? ??? ??? ? ?black.innerHTML="黑方等待"; ?? ??? ? ? ? ?wflag=0; ?? ??? ??? ? ?bflag=1; ?? ??? ??? ? ?out.style.cursor="url(./images/cursor2.cur),auto"; ?? ??? ? ?}?? ?? ?? ??? ?happen(wflag,bflag); ? ?? ? } function happen(wflag,bflag){ ?? ?if(wflag==0 && bflag==1){ ?? ??? ?//白子 ?? ??? ?fox("wq",wflag,bflag); ?? ??? ?} ?? ??? ?//黑子 ?? ?else{ ?? ??? ?fox("bq",wflag,bflag); ?? ??? ?} ?? ?} function fox(color,wflag,bflag){ ?? ?for(var i=0;i<100;i++){ ?? ??? ?downup(i,color,wflag,bflag); ?? ?}?? ??? ??? ??? ? function downup(i,color,wflag,bflag){ ?? ? ? ? ? ?document.getElementById('the'+i).onclick=function(){ ?? ??? ??? ??? ?if(flag[i]!=0){alert("禁止放子!");} ?? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ?document.getElementById('the'+i).className=color; ?? ??? ??? ??? ??? ?if(color=="wq"){ ?? ??? ? ? ? ? ? ? ?flag[i]=1; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else{flag[i]=2;} ?? ??? ??? ??? ??? ?down(wflag,bflag); ?? ??? ??? ??? ??? ?}?? ? ? ? ?? ? ? ? ? ? ? ? } ?? ??? ? ? ?} ?? ?} //勝利 var win=0; //正5子 function zheng(){ ?? ?if(win==0){ ?? ? for(var p=0;p<100;p++){ ?? ??? ?if(flag[p]==1 && flag[p+1]==1 && flag[p+2]==1 && flag[p+3]==1 && flag[p+4]==1){ ?? ??? ??? ? ?var h=p+4 ?? ??? ? ? ? ?if(h!=10 && h!==20 && h!==30 && h!==40 && h!=50 && h!==60 && h!==70 && h!==80 && h!==90 && h!==100){ ?? ??? ??? ? ? ? ?alert("白方獲勝!"); ?? ??? ??? ? ? ? ?win=1; ?? ??? ??? ??? ? ?le2++; ?? ??? ??? ??? ? ?goal(le2,ri2); ?? ??? ??? ? ? ? } ?? ??? ??? ? ?else{return false;} ?? ??? ??? ?} ?? ??? ?else if(flag[p]==2 && flag[p+1]==2 && flag[p+2]==2 && flag[p+3]==2 && flag[p+4]==2){ ?? ??? ??? ? var h=p+4 ?? ??? ? ? ? if(h!=10 && h!==20 && h!==30 && h!==40 && h!=50 && h!==60 && h!==70 && h!==80 && h!==90 && h!==100){ ?? ??? ??? ? ? ? alert("黑方獲勝!"); ?? ??? ??? ? ? ? win=1; ?? ??? ??? ??? ? ri2++; ?? ??? ??? ??? ? goal(le2,ri2); ?? ??? ??? ?} ?? ??? ??? ?else{return false;} ?? ??? ?} ?? ? ?} ?? ?} ?? ?else{return true;} } //豎5子? function shu(){ ?? ?if(win==0){ ?? ? for(var p=0;p<100;p++){ ?? ??? ?if(flag[p]==1 && flag[p+10]==1 && flag[p+20]==1 && flag[p+30]==1 && flag[p+40]==1){ ?? ??? ??? ? ? ? ?alert("白方獲勝!"); ?? ??? ??? ? ? ? ?win=1; ?? ??? ??? ??? ? ?le2++; ?? ??? ??? ??? ? ?goal(le2,ri2); ?? ??? ??? ?} ?? ??? ?else if(flag[p]==2 && flag[p+10]==2 && flag[p+20]==2 && flag[p+30]==2 && flag[p+40]==2){ ?? ??? ??? ? ? ? alert("黑方獲勝!"); ?? ??? ??? ? ? ? win=1; ?? ??? ??? ??? ? ri2++; ?? ??? ??? ??? ? goal(le2,ri2); ?? ??? ?} ?? ? ?} ?? ?} ?? ?else{return true;} ?? ?} //左斜5子 function left(){ ?? ??? ?if(win==0){ ?? ? ? ?for(var p=0;p<100;p++){ ?? ??? ?if(flag[p]==1 && flag[p+11]==1 && flag[p+22]==1 && flag[p+33]==1 && flag[p+44]==1){ ?? ??? ??? ? ? ? ?alert("白方獲勝!"); ?? ??? ??? ? ? ? ?win=1; ?? ??? ??? ??? ? ?le2++; ?? ??? ??? ??? ? ?goal(le2,ri2); ?? ??? ??? ?} ?? ??? ?else if(flag[p]==2 && flag[p+11]==2 && flag[p+22]==2 && flag[p+33]==2 && flag[p+44]==2){ ?? ??? ??? ? ? ? alert("黑方獲勝!"); ?? ??? ??? ? ? ? win=1; ?? ??? ??? ??? ? ri2++; ?? ??? ??? ??? ? goal(le2,ri2); ?? ??? ?} ?? ? ?} ?? ?} ?? ?else{return true;} ?? ?} //右斜5子 function right(){ ?? ??? ?if(win==0){ ?? ? ? ?for(var p=0;p<100;p++){ ?? ??? ?if(flag[p]==1 && flag[p+9]==1 && flag[p+18]==1 && flag[p+27]==1 && flag[p+36]==1){ ?? ??? ??? ? ? ? ?alert("白方獲勝!"); ?? ??? ??? ? ? ? ?win=1; ?? ??? ??? ??? ? ?le2++; ?? ??? ??? ??? ? ?goal(le2,ri2);? ?? ??? ??? ?} ?? ??? ?else if(flag[p]==2 && flag[p+9]==2 && flag[p+18]==2 && flag[p+27]==2 && flag[p+36]==2){ ?? ??? ??? ? ? ? alert("黑方獲勝!"); ?? ??? ??? ? ? ? win=1; ?? ??? ??? ??? ? ri2++; ?? ??? ??? ??? ? goal(le2,ri2); ?? ??? ?} ?? ? ?} ?? ?} ?? ?else{return true;} ?? ?}?? ? window.addEventListener('mousedown',zheng,false); window.addEventListener('mousedown',shu,false);?? ? window.addEventListener('mousedown',left,false);?? ? window.addEventListener('mousedown',right,false); window.addEventListener('mousedown',that,false); } </script> </head> <body> <div id="play"> <button id="start">START</button> <span id="white" style="margin-left:10px;"></span><span id="black" style="margin-left:110px;"></span> </div> <div id="history"><button id="return">重新開始</button></div> <div class="tab" style="margin-left:0px;"> <div class="head"><img src="./images/baif.png" /></div> <div class="score"> <div class="feshu" style="margin-left:0px;"><img src="./images/s0.png" id="left1" ></div> <div class="feshu" style="margin-left:50px;"><img src="./images/s0.png" id="left2" ></div> </div> </div> <div id="bi" style="position:absolute;width:18px;height:100px;margin-left:100px;margin-top:170px;"><img src="./images/bi.png" /></div> <div class="tab" style="margin-left:120px;"> <div class="head"><img src="./images/heif.png" /></div> <div class="score"> <div class="feshu" style="margin-left:0px;"><img src="./images/s0.png" id="right1" ></div> <div class="feshu" style="margin-left:50px;"><img src="./images/s0.png" id="right2" ></div> </div> </div> <div id="out"> <table width="600px" height="600px" border="1px" style="position:absolute;margin-top:4px;margin-left:4px;"> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr height="50px"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> </table> </div> </body> </html>
網(wǎng)頁實(shí)現(xiàn)如下圖:
1.打開網(wǎng)頁;
2.點(diǎn)擊開始按鈕,隨機(jī)選擇白方還是黑方執(zhí)先手;
3.下棋,任何一方贏取勝利后,彈窗顯示,并計(jì)分;
4.勝利后可重新開局;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 純JS實(shí)現(xiàn)五子棋游戲兼容各瀏覽器(附源碼)
- 基于JavaScript實(shí)現(xiàn)五子棋游戲
- Javascript和HTML5利用canvas構(gòu)建Web五子棋游戲?qū)崿F(xiàn)算法
- JS canvas繪制五子棋的棋盤
- H5+C3+JS實(shí)現(xiàn)五子棋游戲(AI篇)
- H5+C3+JS實(shí)現(xiàn)雙人對戰(zhàn)五子棋游戲(UI篇)
- js實(shí)現(xiàn)簡單五子棋游戲
- 原生JS+Canvas實(shí)現(xiàn)五子棋游戲?qū)嵗?/a>
- JS+canvas實(shí)現(xiàn)的五子棋游戲【人機(jī)大戰(zhàn)版】
- javascript 初學(xué)教程及五子棋小程序的簡單實(shí)現(xiàn)
相關(guān)文章
初學(xué)js插入節(jié)點(diǎn)appendChild insertBefore使用方法
由于可見insertBefore()方法的特性是在已有的子節(jié)點(diǎn)前面插入新的節(jié)點(diǎn)但是兩種情況結(jié)合起來發(fā)現(xiàn)insertBefore()方法插入節(jié)點(diǎn),是可以在子節(jié)點(diǎn)列表的任意位置。2011-07-07JavaScript實(shí)現(xiàn)帶粒子效果的進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)帶粒子效果的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06通過 JS 判斷頁面是否有滾動(dòng)條的實(shí)現(xiàn)方法
最近在寫插件的過程中,需要使用 JS 判斷是否有滾動(dòng)條,搜了一下,大致方法都差不多,但都有些啰嗦,代碼不夠簡潔。最終通過參考不同方法,寫了一個(gè)比較簡單的方法2018-04-04javascript實(shí)現(xiàn)youku的視頻代碼自適應(yīng)寬度
這篇文章主要介紹了javascript實(shí)現(xiàn)youku的視頻代碼自適應(yīng)寬度的方法的示例,十分的簡單實(shí)用,有需要的小伙伴可以參考下。2015-05-05基于原生js運(yùn)動(dòng)方式關(guān)鍵點(diǎn)的總結(jié)(推薦)
下面小編就為大家?guī)硪黄谠鷍s運(yùn)動(dòng)方式關(guān)鍵點(diǎn)的總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10javascript命名約定(變量?函數(shù)?類?組件)
這篇小文章主要是通過一些例子來介紹一些Javascript中一些關(guān)于命名變量,函數(shù),類或者是組件的通用約定,雖然這些規(guī)則并不是強(qiáng)制性的,但是呢,他們卻被一些JS社區(qū)所廣泛采用,所以,了解他們還是很有必要的2023-03-03