使用javascript如何實現數位配對遊戲
下面小編就為大家分享一篇javascript實現數位配對遊戲的實例講解,具有很好的參考價值,希望對大家有幫助。一起跟著小編過來看看吧
遊戲效果如下圖:
規則:
在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>
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(); }
根据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如何實現數位配對遊戲,加深对表格创建和数组的运用。处理逻辑和数据显示分离,根据状态值做到不同显示的状态。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
以上是使用javascript如何實現數位配對遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
