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

首頁 > 編程 > JavaScript > 正文

javascript實現數字配對游戲的實例講解

2019-11-19 14:44:05
字體:
來源:轉載
供稿:網友

游戲效果如下圖所示:

配對游戲

規則:

在4X5的格子中,有隨機的互不相等的10個數,每個數據有兩份(也就是20個數,有兩兩相等的十對),隨機分布在20個格子中。游戲開始,彈出二十個數的序列。每次點擊格子會顯示當前格子中的數據并暫時保留顯示,直到下一次點擊,如果下一次點擊顯示的數據與保留的數據不同,則之前點擊保留的數據會消失(仍然存在于該格子但不顯示)。如果連續點擊顯示的兩個數據一樣,則兩個數據都會顯示并且不會再消失。

直到所有數據都通過連續點擊相同數據的方式顯示出來,就算游戲結束,報出游戲用時。此時可以點擊開始游戲或刷新來繼續。

分析:

1:二十個格子對應二十個數據,產生兩組相等的十個隨機數并放入數組,數組下標決定顯示位置。

2:每個格子的狀態的三種:數據隱藏,暫時保留數據和永久顯示。數據隱藏的格子通過點擊的下一次狀態是暫時保留。暫時保留數據的格子通過點擊下一次狀態是永久顯示或數據隱藏,這里要根據連續兩次獲取的數據是否相等來判斷。永久顯示之后狀態已經不可變,只能永久顯示出來,此時對點擊是無效的。

3 :計時從點擊開始按鈕之后,點擊第一個格子時開始。直到游戲完成或點擊刷新重開,期間計時器不能停止。

4 :得出,這里需要一個布爾值,記錄游戲是否已經開始,已經開始的游戲對開始按鈕應該拒絕,計時器運行直到游戲完成。游戲完成時,改變布爾值,計時器停止工作,顯示游戲用時,開始按鈕可用。

實現:

表格通過script創建,其中的元素先默認顯示為“”空字符串。通過對應的點擊來顯示。CSS樣式可自行設定。

<table border:1>  <script>   var rowlength = 4;   var collength = 5;   var str = '';   for (var i = 0; i < rowlength; i++) {    str += '<tr>'    for (var j = 0; j < collength; j++) {     //這里將每個td的id拼接為imgxx xx為元素索引     var index = i * collength + j;     var id = "img" + index;     //注意這里字符串 每個''是一個字符串進行輸出      str += '<td id="' + id + '" onclick="showImg(' + index + ')">';     str += '</td>';    }    str += '</tr>'   }   document.write(str);  </script> </table>

NEW_START記錄是否可以開始游戲的變量

times記錄已用時間

trans記錄每個格子的翻轉狀態 ,數組每個格子有三種狀態 0:隱藏-1:顯示(仍可翻轉)-2:顯示(不可翻轉)。也就是數組的每個元素只有三個可能的值0,1,2)

numArr三十個數的隨機序列數組

var NEW_START = true;  var times = 0;  var trans = [];  var numArr = [];

通過ID獲取到元素的方法:

 function $(id) {  return document.getElementById(id);   }

下面通過函數獲取到二十個隨機數,兩兩相等的十組(可參見:生成指定范圍隨機數)

function getNum() {    var index = 0;    var arrLength = rowlength * collength / 2;    var arr = new Array();    while (index < arrLength) {     var flag = true;     var num = parseInt(Math.random() * 100);     for (var i in arr) {      if (arr[i] == num || arr[i] < 1) {       flag = false;      }     }     if (flag == true) {      arr[index] = num;      index++;     }    }    //alert(arr.length);    //arr是十個互不相等的隨機數     // newArr數組就是每個隨機數都有兩個的數組    var newArr = new Array();    for (var i = 0; i < arrLength; i++) {     newArr[i] = arr[i];     newArr[arrLength + i] = arr[i];    }    return newArr;   }

創建表格,生成隨機數數組這些都是準備工作。

下面是具體的邏輯:

開始游戲的點擊函數

<input type="button" id="startButton" value="開始游戲" onclick="init()">

點擊開始游戲,需要初始化游戲相關的參數,注意如果已經開始,就需要拒絕處理。將數組元素用排序函數打亂做到隨機性。

function init() {    //如果已經開始 拒絕點擊    if (NEW_START == false) {     return;    }    //結束時用于顯示時間的h4標簽    $('end').innerHTML = '';    var count = rowlength * collength;    //將每個格子的數據隱藏 初始化每個格子的翻轉狀態    for (var i = 0; i < count; i++) {     $('img' + i).innerHTML = '';     trans[i] = 0;    }    //將游戲用時置為0    times = 0;    $('gametime').innerHTML = times + '秒';    //獲取隨機的三十個數的隨機序列數組 注意排序函數的使用    numArr = getNum().sort(function () {     return Math.random() - 0.5;    });    alert("已生成隨機數,按表格順序排列:" + numArr);   }

計時函數

在點擊第一個格子時,就需要開始計時。NEW_START=false表示已經開始,需要確保只在游戲進行中時才計時。每秒調用自身一次,并通過innerHTML把所用時間實時顯示出來。

用時:<span id="gametime">0秒</span> function countTime() {    if (NEW_START == false) {     setTimeout('countTime()', 1000);     $('gametime').innerHTML = times + "秒";     times++;    }   }

每個格子的點擊函數(超重點)

在未開始時拒絕點擊格子的(沒有效果)。進入游戲點擊第一個格子,游戲開始,狀態改變,NEW_START=false表示已經開始不可創建新游戲。計時開始。

后面的點擊事件就需要判斷點擊的格子來處理不同的邏輯:

點擊已永久顯示的元素,不處理return。

點擊剛顯示但不是永久顯示的元素,也不處理return。

(注意這里判斷是不是同一元素是直接通過狀態值在trans中將索引index查找出來后對比)

點擊未顯示元素,獲取值,與前一個顯示的元素對比:

相等,都將trans中對應索引的狀態值改為2,表示永久顯示

不等,新點擊元素在trans中對應索引狀態值改為1(暫時保留),前一個點擊的元素索引值為0(需要隱藏)。

設置完狀態值,就立馬需要更新顯示(refreshUI函數)。更新顯示時根據記錄狀態值的數組trans來操作的。

function showImg(index) {    //未點擊開始,還未初始化,退出    if (numArr[0] == undefined) {     return;    }    //初次點擊進入,開啟計時    if (NEW_START) {     NEW_START = false;     countTime();    }    //1-點擊已經徹底顯示的元素 退出    if (trans[index] == 2) {     return;    }    //將點擊的格子的元素顯示出來,并改變翻轉狀態    //alert(index);    //alert(numArr)    var clickEle = $('img' + index);    clickEle.innerHTML = numArr[index];    //已點擊元素的index    var transIndex;    for (var i in trans) {     if (trans[i] == 1) {      transIndex = i;     }    }    //2-如果點擊的是剛剛已顯示元素    if (transIndex == index) {     trans[index] = 1;     return;    }    //3-點擊新元素 與先前顯示元素對比 兩種情況-相等 不等    else {     if (numArr[transIndex] == numArr[index]) {      trans[transIndex] = 2;      trans[index] = 2;     } else {      trans[transIndex] = 0;      trans[index] = 1;     }    }    refreshUI();   }

根據狀態值設置顯示的函數refreshUI

根據trans中每個元素的值,改變對應索引的格子的值。注意,如果格子的數據永久顯示,需要記錄已經永久顯示的格子的數量,當等于所有格子數量時,表示已經全部顯示。需要判定游戲結束,顯示出游戲用時。

function refreshUI() {    //此處用fore循環會最后存在一個undefined    //count記錄已經被徹底顯示的個數    var count = 0;    for (var i = 0; i < trans.length; i++) {     if (trans[i] == 0) {      $('img' + i).innerHTML = '';     }     if (trans[i] == 1) {      $('img' + i).innerHTML = numArr[i];     }     if (trans[i] == 2) {      $('img' + i).innerHTML = numArr[i]      count++;     }    }    if (count == collength * rowlength) {     NEW_START = true;     var endTime = times;     $('end').innerHTML = '用時' + endTime + '秒??!游戲結束,點擊開始游戲繼續';     $('gametime').innerHTML = endTime + "秒";    }   }

通過數組和表格的配合,實現配對游戲,加深對表格創建和數組的運用。處理邏輯和數據顯示分離,根據狀態值做到不同顯示的狀態。

以上這篇javascript實現數字配對游戲的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97av视频在线| 欧美日韩在线观看视频小说| 色先锋久久影院av| 成人网中文字幕| 日韩精品福利网站| 97色在线观看| 日韩精品中文字幕有码专区| 美日韩精品免费观看视频| 日韩极品精品视频免费观看| 欧美日韩色婷婷| 国产精品久久久久久亚洲影视| 亚洲美女在线视频| 91产国在线观看动作片喷水| 欧美大片va欧美在线播放| 国产成人aa精品一区在线播放| 亚洲热线99精品视频| 91夜夜未满十八勿入爽爽影院| 中文在线资源观看视频网站免费不卡| 91精品国产综合久久久久久久久| 亚洲国产成人爱av在线播放| 538国产精品一区二区在线| 久久久精品久久久久| 亚洲va欧美va国产综合剧情| 成人免费视频xnxx.com| 国内免费久久久久久久久久久| 国产91露脸中文字幕在线| 国产不卡一区二区在线播放| 国产精品极品美女在线观看免费| 国产成人啪精品视频免费网| 亚洲亚裔videos黑人hd| 久久精品成人欧美大片| 日韩a**站在线观看| 亚洲第一页自拍| 亚洲国产中文字幕久久网| 欧美视频一二三| 九九综合九九综合| 永久免费精品影视网站| 亚洲第一福利视频| 色琪琪综合男人的天堂aⅴ视频| 亚洲精品天天看| 中文在线不卡视频| 成年人精品视频| 国产激情综合五月久久| 精品国产31久久久久久| 欧美乱大交做爰xxxⅹ性3| 97在线观看视频国产| 九九热这里只有在线精品视| 最近2019中文字幕大全第二页| 亚洲女人初尝黑人巨大| 久久精品国产99国产精品澳门| 久久九九有精品国产23| 亚洲第一区在线观看| 亚洲自拍av在线| 久久国内精品一国内精品| 欧美性猛交xxxx久久久| 91精品在线国产| 日韩精品视频在线| 亚洲精品日韩激情在线电影| www.国产精品一二区| 色偷偷综合社区| 亚洲欧美999| 日韩精品一区二区三区第95| www.国产精品一二区| 亚洲成av人影院在线观看| 69影院欧美专区视频| 国产亚洲视频在线观看| 久久久久久久久久国产| 中文字幕亚洲欧美在线| 在线日韩av观看| 日韩欧美在线中文字幕| 国产精品成人av在线| 亚洲老司机av| 国产精品白丝av嫩草影院| 欧美成人免费视频| 亚洲精品www久久久久久广东| 国产精品久久一| 91成品人片a无限观看| 久久久av一区| 91亚洲va在线va天堂va国| 中文精品99久久国产香蕉| 亚洲一区二区三区四区视频| 久久精品99无色码中文字幕| 精品无人区乱码1区2区3区在线| 1769国产精品| 欧美精品电影免费在线观看| 精品女同一区二区三区在线播放| 久久综合色影院| 日韩在线视频观看正片免费网站| 国产精品久久久久久久久久久不卡| 欧美在线观看网站| 国产成人极品视频| 在线观看欧美日韩国产| 国产精品吊钟奶在线| 乱亲女秽乱长久久久| www.亚洲免费视频| 亚洲美女www午夜| 欧美激情精品久久久久久变态| 在线观看精品国产视频| 欧美黑人视频一区| 欧美第一黄色网| 欧美理论电影在线播放| 日韩av影视综合网| 国产视频久久网| 久久久免费电影| 日韩人体视频一二区| 欧美黑人巨大精品一区二区| 第一福利永久视频精品| 精品国产老师黑色丝袜高跟鞋| 国产精品人成电影| 亚洲理论片在线观看| 日韩av在线不卡| 欧美激情精品久久久久久| 日本久久精品视频| 色黄久久久久久| 久久久久久亚洲| 日韩中文字幕久久| 国产精品男人爽免费视频1| 欧美亚洲国产另类| 日韩欧美国产一区二区| 国产91热爆ts人妖在线| 欧美日韩美女在线| 国产玖玖精品视频| 国产精品视频一区二区三区四| 国产日韩亚洲欧美| 亚洲美女在线视频| 欧洲美女7788成人免费视频| 久99久在线视频| 美女av一区二区三区| 亚洲人午夜精品免费| 亚洲视频在线免费看| 国产香蕉精品视频一区二区三区| 国产狼人综合免费视频| 色综合天天狠天天透天天伊人| 亚洲第一网站男人都懂| 91久久久亚洲精品| 亚洲色无码播放| 亚洲欧美成人精品| 一区二区三区视频免费| 久久国产精品99国产精| 亚洲午夜精品视频| 日韩免费观看网站| 视频一区视频二区国产精品| 国产成人精品国内自产拍免费看| 日韩中文字幕亚洲| 亚洲人成在线观看网站高清| 日韩高清a**址| 久久视频在线观看免费| 高清欧美性猛交xxxx黑人猛交| 久久影院在线观看| 亚洲va欧美va国产综合剧情| 欧美理论片在线观看| 久久久久久免费精品| 黄网动漫久久久| 国产精品久久久久久久久久三级| 亚洲激情视频在线| 成人精品福利视频| 超碰日本道色综合久久综合| 色噜噜狠狠狠综合曰曰曰| 精品国产一区二区三区久久| 国产精品视频精品| 最新69国产成人精品视频免费| 亚洲成人三级在线| 国产成人免费91av在线| 国模gogo一区二区大胆私拍|