DeepSeek掃雷游戲網頁版HTML5(附源碼)

用DeepSeek幫忙生成一個網頁版的掃雷游戲,效果非常棒,基于HTML5實現,方便運行。
提示詞prompt
幫我做一個網頁版的 html5 掃雷游戲

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

游戲功能說明

游戲難度:
1 簡單:10×10 格子,10個地雷
2 中等:16×16 格子,40個地雷
3 困難:30×16 格子,99個地雷
游戲操作:
左鍵點擊:揭開格子
右鍵點擊:標記/取消標記地雷
笑臉按鈕:重新開始游戲
新游戲按鈕:選擇難度后重新開始
游戲界面:
頂部顯示剩余地雷數和計時器
中間是游戲棋盤
底部是難度選擇和新游戲按鈕
游戲規則:
第一次點擊永遠不會點到地雷
點擊到地雷游戲結束
揭開所有非地雷格子獲勝
數字表示周圍8個格子中的地雷數量
使用方法
將上面的代碼復制到一個文本編輯器中
保存為 .html 文件(例如 minesweeper.html)
在瀏覽器中打開該文件即可開始游戲
掃雷游戲全部源碼如下:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML5掃雷游戲</title><style>body {font-family: Arial, sans-serif;text-align: center;background-color: #f0f0f0;margin: 0;padding: 20px;}h1 {color: #333;}#game-container {display: inline-block;margin: 20px auto;padding: 10px;background-color: #999;border: 3px solid #666;border-radius: 5px;box-shadow: 0 0 10px rgba(0,0,0,0.3);}#game-info {display: flex;justify-content: space-between;margin-bottom: 10px;padding: 5px;background-color: #ddd;border: 2px solid #666;}#mines-count, #timer {font-size: 20px;font-weight: bold;padding: 5px 10px;background-color: #000;color: #f00;border-radius: 3px;}#board {display: grid;grid-template-columns: repeat(10, 30px);grid-gap: 2px;}.cell {width: 30px;height: 30px;background-color: #bbb;border: 2px outset #eee;display: flex;align-items: center;justify-content: center;font-weight: bold;cursor: pointer;user-select: none;}.cell.revealed {background-color: #ddd;border: 1px solid #999;}.cell.mine {background-color: #f00;}.cell.flagged {background-color: #bbb;}.cell-1 { color: blue; }.cell-2 { color: green; }.cell-3 { color: red; }.cell-4 { color: darkblue; }.cell-5 { color: brown; }.cell-6 { color: teal; }.cell-7 { color: black; }.cell-8 { color: gray; }#controls {margin-top: 20px;}button {padding: 8px 15px;margin: 0 5px;background-color: #4CAF50;color: white;border: none;border-radius: 4px;cursor: pointer;font-size: 16px;}button:hover {background-color: #45a049;}#difficulty {padding: 8px;font-size: 16px;border-radius: 4px;}</style>
</head>
<body><h1>HTML5掃雷游戲</h1><div id="game-container"><div id="game-info"><div id="mines-count">💣 10</div><button id="reset-btn">😊</button><div id="timer">? 0</div></div><div id="board"></div></div><div id="controls"><select id="difficulty"><option value="easy">簡單 (10×10, 10雷)</option><option value="medium">中等 (16×16, 40雷)</option><option value="hard">困難 (30×16, 99雷)</option></select><button id="new-game-btn">新游戲</button></div><script>// 游戲配置const config = {easy: { rows: 10, cols: 10, mines: 10 },medium: { rows: 16, cols: 16, mines: 40 },hard: { rows: 16, cols: 30, mines: 99 }};// 游戲狀態let gameState = {board: [],revealed: [],flagged: [],mines: 0,gameOver: false,gameWon: false,firstClick: true,timer: 0,timerInterval: null,difficulty: 'easy'};// DOM元素const boardElement = document.getElementById('board');const minesCountElement = document.getElementById('mines-count');const timerElement = document.getElementById('timer');const resetButton = document.getElementById('reset-btn');const newGameButton = document.getElementById('new-game-btn');const difficultySelect = document.getElementById('difficulty');// 初始化游戲function initGame() {clearInterval(gameState.timerInterval);gameState.difficulty = difficultySelect.value;const { rows, cols, mines } = config[gameState.difficulty];// 重置游戲狀態gameState = {board: Array(rows).fill().map(() => Array(cols).fill(0)),revealed: Array(rows).fill().map(() => Array(cols).fill(false)),flagged: Array(rows).fill().map(() => Array(cols).fill(false)),mines: mines,gameOver: false,gameWon: false,firstClick: true,timer: 0,timerInterval: null,difficulty: gameState.difficulty};// 更新UIupdateMinesCount();timerElement.textContent = '? 0';resetButton.textContent = '😊';// 創建游戲板createBoard();}// 創建游戲板function createBoard() {boardElement.innerHTML = '';const { rows, cols } = config[gameState.difficulty];// 設置網格布局boardElement.style.gridTemplateColumns = `repeat(${cols}, 30px)`;for (let row = 0; row < rows; row++) {for (let col = 0; col < cols; col++) {const cell = document.createElement('div');cell.className = 'cell';cell.dataset.row = row;cell.dataset.col = col;// 添加事件監聽器cell.addEventListener('click', () => handleCellClick(row, col));cell.addEventListener('contextmenu', (e) => {e.preventDefault();handleRightClick(row, col);});boardElement.appendChild(cell);}}}// 放置地雷function placeMines(firstRow, firstCol) {const { rows, cols } = config[gameState.difficulty];let minesPlaced = 0;while (minesPlaced < gameState.mines) {const row = Math.floor(Math.random() * rows);const col = Math.floor(Math.random() * cols);// 確保第一個點擊的格子及其周圍沒有地雷const isFirstClickArea = Math.abs(row - firstRow) <= 1 && Math.abs(col - firstCol) <= 1;if (!isFirstClickArea && gameState.board[row][col] !== -1) {gameState.board[row][col] = -1; // -1 表示地雷minesPlaced++;// 更新周圍格子的數字for (let r = Math.max(0, row - 1); r <= Math.min(rows - 1, row + 1); r++) {for (let c = Math.max(0, col - 1); c <= Math.min(cols - 1, col + 1); c++) {if (gameState.board[r][c] !== -1) {gameState.board[r][c]++;}}}}}}// 處理格子點擊function handleCellClick(row, col) {if (gameState.gameOver || gameState.flagged[row][col]) return;// 如果是第一次點擊,放置地雷并開始計時if (gameState.firstClick) {placeMines(row, col);gameState.firstClick = false;startTimer();}// 如果點擊的是地雷,游戲結束if (gameState.board[row][col] === -1) {revealAllMines();gameOver(false);return;}// 顯示格子revealCell(row, col);// 檢查是否獲勝checkWin();}// 處理右鍵點擊(標記)function handleRightClick(row, col) {if (gameState.gameOver || gameState.revealed[row][col]) return;// 切換標記狀態gameState.flagged[row][col] = !gameState.flagged[row][col];// 更新UIconst cell = getCellElement(row, col);if (gameState.flagged[row][col]) {cell.textContent = '🚩';} else {cell.textContent = '';}// 更新剩余地雷數updateMinesCount();}// 顯示格子function revealCell(row, col) {const { rows, cols } = config[gameState.difficulty];// 如果已經顯示或標記,則返回if (gameState.revealed[row][col] || gameState.flagged[row][col]) return;// 標記為已顯示gameState.revealed[row][col] = true;// 更新UIconst cell = getCellElement(row, col);cell.classList.add('revealed');// 如果是數字格子,顯示數字if (gameState.board[row][col] > 0) {cell.textContent = gameState.board[row][col];cell.classList.add(`cell-${gameState.board[row][col]}`);} else if (gameState.board[row][col] === 0) {// 如果是空白格子,遞歸顯示周圍格子for (let r = Math.max(0, row - 1); r <= Math.min(rows - 1, row + 1); r++) {for (let c = Math.max(0, col - 1); c <= Math.min(cols - 1, col + 1); c++) {if (r !== row || c !== col) {revealCell(r, c);}}}}}// 顯示所有地雷(游戲結束時)function revealAllMines() {const { rows, cols } = config[gameState.difficulty];for (let row = 0; row < rows; row++) {for (let col = 0; col < cols; col++) {if (gameState.board[row][col] === -1) {const cell = getCellElement(row, col);cell.classList.add('mine');cell.textContent = '💣';}}}}// 獲取格子元素function getCellElement(row, col) {const { cols } = config[gameState.difficulty];return boardElement.children[row * cols + col];}// 開始計時器function startTimer() {gameState.timer = 0;timerElement.textContent = '? 0';gameState.timerInterval = setInterval(() => {gameState.timer++;timerElement.textContent = `? ${gameState.timer}`;}, 1000);}// 更新剩余地雷數顯示function updateMinesCount() {const { rows, cols } = config[gameState.difficulty];let flaggedCount = 0;for (let row = 0; row < rows; row++) {for (let col = 0; col < cols; col++) {if (gameState.flagged[row][col]) {flaggedCount++;}}}minesCountElement.textContent = `💣 ${gameState.mines - flaggedCount}`;}// 檢查是否獲勝function checkWin() {const { rows, cols } = config[gameState.difficulty];let unrevealedSafeCells = 0;for (let row = 0; row < rows; row++) {for (let col = 0; col < cols; col++) {if (!gameState.revealed[row][col] && gameState.board[row][col] !== -1) {unrevealedSafeCells++;}}}if (unrevealedSafeCells === 0) {gameOver(true);}}// 游戲結束function gameOver(isWin) {gameState.gameOver = true;gameState.gameWon = isWin;clearInterval(gameState.timerInterval);if (isWin) {resetButton.textContent = '😎';// 標記所有地雷const { rows, cols } = config[gameState.difficulty];for (let row = 0; row < rows; row++) {for (let col = 0; col < cols; col++) {if (gameState.board[row][col] === -1 && !gameState.flagged[row][col]) {const cell = getCellElement(row, col);cell.textContent = '🚩';gameState.flagged[row][col] = true;}}}updateMinesCount();setTimeout(() => alert('恭喜你贏了!'), 100);} else {resetButton.textContent = '😵';}}// 事件監聽器resetButton.addEventListener('click', initGame);newGameButton.addEventListener('click', initGame);difficultySelect.addEventListener('change', initGame);// 初始化游戲initGame();</script>
</body>
</html>

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

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

相關文章

Day53GAN對抗生成網絡思想

生成對抗網絡&#xff08;GAN&#xff09;是深度學習領域的一種革命性模型&#xff0c;由Ian Goodfellow等人于2014年提出。其核心思想源于博弈論中的零和博弈&#xff0c;通過兩個神經網絡&#xff08;生成器和判別器&#xff09;的對抗性訓練&#xff0c;實現數據的高質量生成…

meilisearch-輕量級搜索引擎

meilisearch是一款開源的輕量級搜索引擎&#xff0c;相比于elasticsearch等重量級搜索引擎&#xff0c;meilisearch注重數據搜索&#xff0c;從而而省去了其它不必要的功能&#xff08;如支持聚合分析、分布式搜索等特性&#xff09;&#xff0c;以便于快速上手開發和構建應用。…

51c大模型~合集150

我自己的原文哦~ https://blog.51cto.com/whaosoft/14034001 #原來Scaling Law還能被優化 Meta這招省token又提效 2017 年&#xff0c;一篇《Attention Is All You Need》論文成為 AI 發展的一個重要分水嶺&#xff0c;其中提出的 Transformer 依然是現今主流語言模型…

每天一個前端小知識 Day 23 - PWA 漸進式 Web 應用開發

PWA 漸進式 Web 應用開發&#xff08;離線緩存、桌面安裝等&#xff09; &#x1f9e0; 一、什么是 PWA&#xff1f; PWA&#xff08;Progressive Web App&#xff09;是一種讓 Web 應用具有類似原生 App 用戶體驗的技術體系。 PWA 不是一個框架&#xff0c;而是由一組瀏覽器 A…

音視頻會議服務搭建(設計方案-兩種集成方案對比)-03

前言在開始計劃之前&#xff0c;查閱了不少資料。一種方案是 Go層做信令業務&#xff0c;nodejs層來管理和mediasoup的底層交互&#xff0c;通過客戶端去調用Go層&#xff1b;第二種方案是 客戶端直接調用nodejs層來跟mediasoup去交互&#xff1b; 最終&#xff0c;當然不出意料…

【小白】linux安裝ffmpeg | java轉碼 【超詳細】

前言 最近在開發過程中&#xff0c;發現當我們上傳除了mp4以外的其他少見的格式&#xff0c;如 .flv .rmvb 格式的視頻時&#xff0c;在前端在線播放的時候會播放不出來畫面&#xff0c;所以 接下來&#xff0c;將要進行一個非常完美的工程&#xff0c;將視頻格式轉為.mp4 1.安…

一個簡單的腳本,讓pdf開啟夜間模式

因為平常我比較喜歡晚上看面試題。 市面上很多的面試題pdf都是白色的晚上看的話非常的刺眼。 所以我本能的去互聯網搜索看看有沒有pdf轉換為夜間模式的。 搜索了一段時間后發現并沒有這種東西。于是我自己做了一個轉換的python腳本。 import os import fitz # PyMuPDF from P…

Flink OceanBase CDC 環境配置與驗證

一、OceanBase 數據庫核心配置 1. 環境準備與版本要求 版本要求&#xff1a;OceanBase CE 4.0 或 OceanBase EE 2.2組件依賴&#xff1a;需部署 LogProxy 服務&#xff08;社區版/企業版部署方式不同&#xff09;兼容模式&#xff1a;支持 MySQL 模式&#xff08;默認&#x…

c++對象池

【設計模式】其它經典模式-對象池模式&#xff08;Object Pool Pattern&#xff09;-CSDN博客 在C中&#xff0c;對象池&#xff08;Object Pool&#xff09;是一種管理對象生命周期的技術&#xff0c;旨在減少對象創建和銷毀的開銷&#xff0c;提高性能。對象池預先分配一定數…

JavaFX:Scene(場景)

簡介 Scene對象是JavaFX場景圖的根(root)。JavaFX 場景中包含所有可視的 JavaFX GUI 組件。JavaFX 場景由javafx.scene.Scene類表示。必須在 Stage(舞臺)上設置 Scene 對象才能使其可見。在本 JavaFX Scene 教程中,將向您展示如何創建 Scene 對象并向其添加 GUI 組件。 創…

vue3.4中的v-model的用法~

1.首先以前我們針對父子組件傳參是不是通過defineProps與defineEmits來實現的&#xff0c;但是這么比較繁瑣&#xff0c;因為他是單向傳參&#xff0c;而不是雙向的&#xff0c;這里我們要介紹的是vue3.4的v-model來實現雙向數據傳遞。 2、代碼示例&#xff1a; //父組件 <…

nvm常用指令匯總

nvm是用來管理nodejs的&#xff0c;可以方便安裝、切換、卸載當前環境的node版本。 以下是常用指令匯總&#xff1a;nvm list 查看本機已經安裝的node版本。*表示當前系統正在使用的node版本nvm install xx.xx.x 后邊加版本號&#xff0c;表示安裝指定的版本nvm use xx.xx.x當前…

洛谷P5021 [NOIP 2018 提高組] 賽道修建【題解】【二分答案+樹上貪心】

P5021 [NOIP 2018 提高組] 賽道修建 題意簡述 給定一棵含 n n n 個點的無向帶權樹&#xff0c;求將其分裂為 m m m 條鏈后&#xff0c;最短的一條鏈的最大長度是多少&#xff1f; 點可以重復使用&#xff0c;邊不可以重復使用。 思路 二分答案貪心判定貌似可以&#xff…

Portal認證過程雜談

Portal認證模型簡介 Portal認證模型通常由這四個設備組成 認證服務器即3A服務器&#xff0c;通常用radius服務器 接入設備通常就是NAC設備&#xff08;網絡接入控制&#xff09; Portal服務器就是Portal認證的認證網站&#xff08;通常叫門戶網站&#xff09; 認證過程簡述…

ZSGuardian ---AI賦能,新一代研發管理守護平臺 -即將上線

一場研發管理的革命 在數字化浪潮奔涌向前的今天&#xff0c;軟件開發與產品研發的節奏不斷加快&#xff0c;市場需求瞬息萬變&#xff0c;技術迭代日新月異。對于研發團隊而言&#xff0c;如何在復雜多變的環境中&#xff0c;高效地管理項目、保障產品質量、確保按時上線&…

小菜狗的云計算之旅,學習了解rsync+sersync實現數據實時同步(詳細操作步驟)

Rsyncsersync實現數據實時同步 目錄 Rsyncsersync實現數據實時同步 一、rsync概述 二、rsync運行原理 三、rsync部署 四、備份測試 五、使用非系統用戶備份數據 5.1 rsync的配置文件介紹 5.2 配置備份目錄 5.3 使用rsync用戶備份測試 5.4 pull拉取數據 六、rsyncse…

牛客周賽Round 99(Go語言)

A題 (A.go) 思路總結: 這道題要求判斷一個整數中是否包含連續的兩個9。 核心思路是將輸入的整數轉換為字符串&#xff0c;然后遍歷這個字符串&#xff0c;檢查是否存在相鄰的兩個字符都是9。如果找到了&#xff0c;就立即停止遍歷并輸出"YES"&#xff1b;如果遍歷完…

紅外圖像小目標檢測熱力圖可視化系統

原創代碼&#xff0c;可以工程修改含界面。

供應鏈管理:指標評估方式分類與詳解

一、指標評估方式分類與詳解 評估維度評估方式核心方法適用場景示例數據來源內部數據評估從企業ERP、MES、CRM等系統提取生產、財務、客戶等數據。成本、效率、質量等內部管理指標評估。生產成本數據&#xff08;MES系統&#xff09;、客戶滿意度&#xff08;CRM系統&#xff…

基于 Rust 的前端工具基本實現

1. Rust 環境安裝 1.1. 安裝 Rust Rust 提供了一個非常方便的安裝工具 rustup,可以通過以下命令安裝 Rust: curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh 這個命令會安裝 Rust 編譯器 rustc、包管理工具 cargo 以及其他相關工具。 1.2. 配置環境變量 …