用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. 配置环境变量 …