原生JS手寫掃雷小游戲

場景

實現一個完整的掃雷游戲需要一些復雜的邏輯和界面交互。我將為你提供一個簡化版的掃雷游戲示例,幫助你入門。請注意,這只是一個基本示例,你可以根據自己的需求進行擴展和改進。
在這里插入圖片描述

思路

  • 創建游戲板(Grid):

    創建一個二維數組來表示游戲板格子,每個格子包含信息如是否是地雷、周圍地雷數量、是否被揭示等。

  • 生成地雷:

    在游戲板上隨機生成指定數量的地雷位置,確保不重復。

  • 計算周圍地雷數量:

    遍歷游戲板格子,對每個格子計算周圍八個格子中地雷的數量,用于顯示數字。

  • 揭示格子:

    實現點擊格子的交互,點擊時根據格子狀態進行不同操作。
    如果是地雷,游戲結束。
    如果是數字,顯示數字。
    如果是空白格子,遞歸地揭示周圍的空白格子。

  • 標記地雷:

    允許玩家標記可能的地雷格子,以幫助他們辨認哪些格子是地雷。
    確保標記的數量與實際地雷數量一致。

  • 計時器:

    開始計時器當游戲開始,停止計時器當游戲結束。
    顯示游戲進行的時間。

  • 游戲狀態檢測:

    每次揭示格子或標記地雷后,檢查游戲是否勝利或失敗。

  • 勝利條件:所有非地雷格子都被揭示。

  • 失敗條件:揭示到地雷格子。

  • 重新開始功能:

    提供一個重新開始按鈕,用于重置游戲狀態。

  • 界面設計:

    創建游戲界面,包括游戲板、計時器、標記地雷數等元素。
    點擊事件、按鈕交互等用戶界面交互。

  • 游戲難度設置(可選):

    允許玩家選擇不同的難度,調整地雷數量和游戲板大小。

  • 游戲結束界面:

    在游戲結束時,顯示一個彈出窗口或提示信息,展示游戲勝負結果。

代碼

HTML

<body><div class="header"><div class="timer" id="timer">Time: 0</div><button class="restart-button" id="restartButton">Restart</button></div><div class="board" id="board"></div>
</body>

JS

 const board = document.getElementById('board');
const restartButton = document.getElementById('restartButton');
const timerDisplay = document.getElementById('timer');
const rows = 10;
const cols = 10;
const mines = 20;
let minePositions = [];
let revealedCells = 0;
let timer;
let seconds = 0;function createBoard() {for (let i = 0; i < rows; i++) {for (let j = 0; j < cols; j++) {const cell = document.createElement('div');cell.classList.add('cell');cell.dataset.row = i;cell.dataset.col = j;board.appendChild(cell);cell.addEventListener('click', () => revealCell(cell));}}
}function generateMines() {minePositions = [];while (minePositions.length < mines) {const row = Math.floor(Math.random() * rows);const col = Math.floor(Math.random() * cols);const position = `${row}-${col}`;if (!minePositions.includes(position)) {minePositions.push(position);}}
}function startTimer() {timer = setInterval(() => {seconds++;timerDisplay.textContent = `Time: ${seconds}`;}, 1000);
}function stopTimer() {clearInterval(timer);
}function revealCell(cell) {const row = parseInt(cell.dataset.row);const col = parseInt(cell.dataset.col);const position = `${row}-${col}`;if (minePositions.includes(position)) {cell.textContent = '💣';console.log(cell.textContent,"cell");alert('炸彈💣');setTimeout(()=>{resetGame();},1000)} else {const minesAround = countMinesAround(row, col);cell.textContent = minesAround;cell.classList.add('revealed');revealedCells++;}// ...// 之前的 revealCell 函數代碼不變if (revealedCells === rows * cols - mines) {stopTimer();alert('Congratulations! You win!');resetGame();}
}
function countMinesAround(row, col) {let count = 0;for (let i = -1; i <= 1; i++) {for (let j = -1; j <= 1; j++) {const newRow = row + i;const newCol = col + j;const position = `${newRow}-${newCol}`;if (minePositions.includes(position)) {count++;}}}return count;
}
function resetGame() {board.innerHTML = '';revealedCells = 0;seconds = 0;timerDisplay.textContent = `Time: ${seconds}`;stopTimer();generateMines();createBoard();startTimer();
}restartButton.addEventListener('click', resetGame);generateMines();
createBoard();
startTimer();

CSS

 .header {display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px;
}.timer {font-size: 18px;
}.restart-button {padding: 5px 10px;font-size: 16px;background-color: #007bff;color: white;border: none;cursor: pointer;
}
.board {display: grid;grid-template-columns: repeat(10, 30px);gap: 2px;
}.cell {width: 30px;height: 30px;border: 1px solid #ccc;text-align: center;line-height: 30px;font-size: 18px;cursor: pointer;
}

在這里插入圖片描述
以上就是js手寫掃雷小游戲感謝大家的閱讀
如碰到其他的問題 可以私下我 一起探討學習
如果對你有所幫助還請 點贊 收藏謝謝~!
關注收藏博客 作者會持續更新…

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟考:中級軟件設計師:文件管理,索引文件結構,樹型文件結構,位示圖,數據傳輸方式,微內核

軟考&#xff1a;中級軟件設計師: 提示&#xff1a;系列被面試官問的問題&#xff0c;我自己當時不會&#xff0c;所以下來自己復盤一下&#xff0c;認真學習和總結&#xff0c;以應對未來更多的可能性 關于互聯網大廠的筆試面試&#xff0c;都是需要細心準備的 &#xff08;1…

小森動畫回憶錄(二)-瀏覽哆啦a夢的四次元口袋

// DoraemonProps結構用于存儲單個道具信息 struct DoraemonProps{// 道具名稱string name;// 道具用途string UseOfProps; };// 從文件加載哆啦A夢道具信息到vector void LoadDoraemonProps(vector<DoraemonProps>& DoraemonProps) {// 創建文件輸入流ifstream str…

人臉識別技術應用安全管理規定(試行)

近年來&#xff0c;人臉識別技術不斷成熟&#xff0c;已大量應用于治安管理、金融支付、門禁考勤等諸多領域&#xff0c;極大便捷了公眾生活。然而&#xff0c;人臉識別技術在得到廣泛應用的同時&#xff0c;仍存在一些不規范現象。人臉識別因其技術特點&#xff0c;涉及公眾敏…

node.js 基礎高并發案例

什么是高并發 高并發是指系統在同一時間段內需要處理大量的并發請求或同時進行大量的操作。在計算機領域中&#xff0c;高并發通常指的是在短時間內有大量的用戶或客戶端同時訪問系統或進行操作&#xff0c;對系統的并發處理能力提出了較高的要求。 高并發的特點包括 大量的…

Python學習筆記第五十五天(Pandas CSV文件)

Python學習筆記第五十五天 Pandas CSV 文件read_csv()to_string()to_csv() 數據處理head()tail()fillna() info() 后記 Pandas CSV 文件 CSV&#xff08;Comma-Separated Values&#xff0c;逗號分隔值&#xff0c;有時也稱為字符分隔值&#xff0c;因為分隔字符也可以不是逗號…

【嵌入式學習筆記】嵌入式入門7——IIC總線協議

1.IIC簡介 IIC即Inter Integrated Circuit&#xff0c;集成電路總線&#xff0c;是一種同步&#xff0c;串行&#xff0c;半雙工通信總線。 IIC總線協議——總線就是傳輸數據通道&#xff0c;協議就是傳輸數據的規則&#xff0c;有以下特點&#xff1a; 由時鐘線SCL和數據線S…

ES踩坑記錄之集群間通信異常造成節點無法加入

問題描述 公司新搭了一套ES集群&#xff0c;4臺機器&#xff0c;ES版本7.5.0&#xff0c;前期搭建十分順利&#xff0c;但集群運行一段時間后會出現問題。問題具體體現為節點間通訊異常&#xff0c;集群會重新選主&#xff0c;但選主之后只能通過新的主節點進行集群操作&#…

【Linux】可重入函數 volatile關鍵字 以及SIGCHLD信號

可重入函數 volatile關鍵字 以及SIGCHLD信號 一、可重入函數1、引入2、可重入函數的判斷 二、volatile關鍵字1、引入2、關于編譯器的優化的簡單討論 三、SIGCHLD信號 一、可重入函數 1、引入 我們來先看一個例子來幫助我們理解什么是可重入函數&#xff1a; 假設我們現在要對…

EthGlobal 巴黎站 Chainlink 獲獎項目介紹

在 Web3 中&#xff0c;每一周都至關重要。項目的發布、版本的發布以及協議的更新以驚人的速度推出。開發者必須保持學習&#xff0c;隨時了解最新的工具&#xff0c;并將所有他們所學的東西&#xff08;無論是舊的還是新的&#xff09;聯系起來&#xff0c;以構建推動 Web3 技…

PLUS操作流程、應用與實踐,多源不同分辨率數據的處理、ArcGIS的應用、PLUS模型的應用、InVEST模型的應用

PLUS模型是由中國地質大學&#xff08;武漢&#xff09;地理與信息工程學院高性能空間計算智能實驗室開發&#xff0c;是一個基于柵格數據的可用于斑塊尺度土地利用/土地覆蓋(LULC)變化模擬的元胞自動機(CA)模型。PLUS模型集成了基于土地擴張分析的規則挖掘方法和基于多類型隨機…

Word轉PDF在線轉換如何操作?分享轉換技巧

現如今&#xff0c;pdf轉換器已成為大家日常辦公學習必不可少的工具&#xff0c;市場上的pdf轉換器主要有兩種類型&#xff0c;一種是需要下載安裝的&#xff0c;另一種是網頁版&#xff0c;打開就可以使用的&#xff0c;今天小編給大家推薦一個非常好用的網頁版pdf轉換器&…

基于jvm-sandbox的imock開發指南

基于jvm-sandbox的imock開發指南 團隊今年的指標是為公司提供一個方法級的mock平臺&#xff0c; 這個重要的任務落在了我的身上。 0、明確團隊的需求 支持java后端服務方法級別的mock&#xff0c;對沒有測試環境的第三方服務進行mock&#xff0c;增加團隊覆蓋率。 啟用&#x…

PDF換行的難度,誰能解決?

換行的時候確認不了長度&#xff1a; import java.awt.*;public class Test {public static void main(String[] args) {String str1 "淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘淘";String str2 "AAAAAAAAAAAAAAAAAAAAAAAAA…

實驗篇——亞細胞定位

實驗篇——亞細胞定位 文章目錄 前言一、亞細胞定位的在線網站1. UniProt2. WoLFPSORT3. BUSCA4. TargetP-2.0 二、代碼實現1. 基于UniProt&#xff08;不會&#xff09;2. 基于WoLFPSORT后續&#xff08;已完善&#xff0c;有關代碼放置于[python爬蟲學習&#xff08;一&#…

一零七零、Redis基礎穩固篇

Redis是什么&#xff0c;優缺點&#xff1f; Redis本質是一個K-V類型的內存數據庫 純內存操作&#xff0c;每秒可處理超過10w的讀寫操作 優點&#xff1a; 讀寫性能極高 非阻塞IO 單線程 支持持久化 支持事務 數據結構豐富 缺點&#xff1a; 容易受到物理內存的限制 主機宕機可…

【JAVA】日志

輸出語句日志輸出位置只能是控制臺可以將日志信息寫入文件或數據庫中取消日志需要修改代碼&#xff0c;靈活性差只需修改日志文件多線程性能較差性能較好 日志規范接口&#xff1a;Commons Logging(JCL)、Simple Logging Facade for Java(slf4j) 日志實現框架&#xff1a;Log…

軟件測試簡歷撰寫與優化,讓你面試邀約率暴增99%!

如何撰寫一份優秀的簡歷呢&#xff1f;&#xff1f;這是一個求職者都會遇到的問題&#xff0c;今天就來詳細帶大家寫一份軟件測試工程師職位的簡歷&#xff01;希望能給各位軟件測試求職者一個帶來幫助&#xff01; 個人簡歷是求職者給招聘單位發的一份簡要介紹。包含自己的基本…

linux系統服務學習(一)Linux高級命令擴展

文章目錄 Linux高級命令&#xff08;擴展&#xff09;一、find命令1、find命令作用2、基本語法3、*星號通配符4、根據文件修改時間搜索文件☆ 聊一下Windows中的文件時間概念&#xff1f;☆ 使用stat命令獲取文件的最后修改時間☆ 創建文件時設置修改時間以及修改文件的修改時間…

【Vue】Vue2創建移動端項目實戰教程,創建移動端項目保姆級教程,設置axios,utils工具包,vue.fonfig.js配置項 (下)

系列文章目錄 這里是創建移動端項目 【Vue】Vue2.x創建項目全程講解&#xff0c;保姆級教程&#xff0c;手把手教&#xff0c;Vue2怎么創建項目&#xff08;上&#xff09; 【Vue】Vue2創建移動端項目實戰教程&#xff0c;創建移動端項目保姆級教程&#xff0c;接上一篇創建Vue…

2023牛客暑期多校訓練營9 B.Semi-Puzzle: Brain Storm

文章目錄 題目大意題解求解回溯 參考代碼 題目大意 給定兩個數 a , m a,m a,m &#xff0c;求滿足 a u ≡ u ( m o d m ) a^u \equiv u (mod\ \ m) au≡u(mod m) 的一個解。 ( 1 ≤ a , m ≤ 1 0 9 , 0 ≤ u ≤ 1 0 18 ) (1\leq a,m \leq10^9 ,0\leq u\leq 10^{18}) (1≤a…