vue实现扫雷代码复制即可用,vue2和vue3都可适用

效果预览

在这里插入图片描述

代码实现

<template><div id="app"><div class="mine-sweeper"><div class="board" v-for="row in board" :key="`row-${row.index}`"><divclass="cell":class="{ 'no-clickable': !cell.revealed }"v-for="cell in row.cells":key="`cell-${cell.x}-${cell.y}`"@click="revealCell(cell)"@contextmenu.prevent="flagCell(cell)">{{cell.flagged? '🚩': cell.revealed? cell.isMine? '💣': cell.neighborMines > 0? cell.neighborMines: '': ''}}</div></div></div></div>
</template>
<script>
import { reactive } from 'vue'export default {name: 'App',data () {return {rows: 10,cols: 10,totalMines: 10,board: [],timer: 0}},methods: {startGame () {this.init()this.generateMines()this.calculateNeighborMines()},init () {this.board = reactive(Array.from({ length: this.rows }, (_, rowIndex) => ({index: rowIndex,cells: Array.from({ length: this.cols }, (_, colIndex) => ({x: colIndex,y: rowIndex,isMine: false,revealed: false,flagged: false,neighborMines: 0}))})))},generateMines () {let minesPlaced = 0while (minesPlaced < this.totalMines) {const row = Math.floor(Math.random() * this.rows)const col = Math.floor(Math.random() * this.cols)if (!this.board[row].cells[col].isMine) {this.board[row].cells[col].isMine = trueminesPlaced++}}},calculateNeighborMines () {for (let row = 0; row < this.rows; row++) {for (let col = 0; col < this.cols; col++) {if (!this.board[row].cells[col].isMine) {let neighborMines = 0for (let i = -1; i <= 1; i++) {for (let j = -1; j <= 1; j++) {const newRow = row + iconst newCol = col + jif (newRow >= 0 && newRow < this.rows && newCol >= 0 && newCol < this.board[row].cells.length && this.board[newRow].cells[newCol].isMine) {neighborMines++}}}this.board[row].cells[col].neighborMines = neighborMines}}}},revealCell (cell) {if (!cell.revealed && !cell.flagged) {cell.revealed = trueif (cell.isMine) {// 游戏结束逻辑setTimeout(() => {alert('Game Over!')this.startGame()}, 100)return}// 判断是否赢了if (this.board.every(row => row.cells.every(cell => cell.revealed || cell.isMine))) {setTimeout(() => {alert('You Win!')this.startGame()}, 100)}if (cell.neighborMines === 0) {for (let i = -1; i <= 1; i++) {for (let j = -1; j <= 1; j++) {const newRow = cell.y + iconst newCol = cell.x + jif (newRow >= 0 && newRow < this.rows && newCol >= 0 && newCol < this.board[newRow].cells.length) {const neighborCell = this.board[newRow].cells[newCol]if (!neighborCell.revealed && !neighborCell.flagged) {this.revealCell(neighborCell)}}}}}}},flagCell (cell) {if (cell.revealed) {return}cell.flagged = !cell.flagged}},mounted () {this.startGame()}
};
</script>
<style scoped>
.mine-sweeper {display: flex;justify-content: center;align-items: center;
}
.board {display: flex;flex-direction: column;
}
.cell {width: 50px;height: 50px;border: 1px solid #ccc;display: flex;justify-content: center;align-items: center;
}
.no-clickable {background: gray;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147924.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3:mitt实现组件通信

目录 一.性质 1.轻量级 2.单例 3.异步 4.事件绑定与解绑 二.作用 1.组件间通信 2.解耦 3.状态管理 4.事件的集中处理 三.使用 1.安装mitt 2.引入mitt&#xff1b;调用mitt&#xff1b;暴露mitt 3.组件1 4.组件2 四.代码 1.组件1 2.组件2 五.效果 一.性质 1…

qt-C++笔记之Q_DECLARE_METATYPE和qRegisterMetaType

qt-C笔记之Q_DECLARE_METATYPE和qRegisterMetaType code review! 文章目录 qt-C笔记之Q_DECLARE_METATYPE和qRegisterMetaType一.Q_DECLARE_METATYPE使用方法应用场景 二.为什么需要注册类型&#xff1f;三.使用 Q_DECLARE_METATYPE 处理自定义类型的简短示例3.1.自定义类型定…

ElasticSearch-2-核心语法集群高可用实战-Week2-3

ES批量操作 1.批量获取文档数据 这里多个文档是指&#xff0c;批量操作多个文档&#xff0c;搜索查询文档将在之后的章节讲解 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式&#xff1a;GET 请求地址&#xff1a;_mget 功能说明 &#…

(C++23) expected 基础使用

文章目录 ⭐前言⭐expected&#x1f39b;️基础使用&#x1f39b;️单子操作 (Monadic operations)&#x1f39a;️and_then & or_else&#x1f39a;️transform & transform_error ⭐END&#x1f31f;跋&#x1f31f;交流方式 ⭐前言 在 C17 中&#xff0c;提出了 op…

嵌入式系统stm32cube本地安装出现的问题

stm32cube在线安装很慢&#xff0c;本地安装中出现的一个bug stm32cube_fw_f4_v1281安装成功之后&#xff0c;如果想安装stm32cube_fw_f4_v1281会提示stm32cube_fw_f4_v1280未安装。 如果先安装stm32cube_fw_f4_v1280之后&#xff0c;再安装stm32cube_fw_f4_v1281还会提示这个…

算法练习题24——leetcode3296移山所需的最小秒数(二分模拟)

【题目描述】 【代码示例&#xff08;java&#xff09;】 class Solution {// 计算让工人们将山的高度降到0所需的最少时间public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {long left 0; // 最少时间初始为0long right 0; // 最大时间初始化为0// …

java--面向对象编程(中级部分)

IDE&#xff08;集成开发环境&#xff09; java-----IDE&#xff08;集成开发环境&#xff09;-CSDN博客 包 包的三大作用 区分相同名字的类 当类很多时,可以很好的管理类[看Java API 文档] 控制访问范围 包基本语 package com.hsppedu; 说明: 1. package 关键字,表示打…

Java内存泄漏排查

内存泄漏排查 1. 堆内存快照导出2. 导入内存分析工具 1. 堆内存快照导出 获取 Java 进程 ID Windows&#xff1a;执行 jps 命令&#xff0c;或任务管理器查看&#xff0c;又或者执行 tasklist 命令。 注意&#xff1a;当有多个 Java 进程时&#xff0c;任务管理器或 tasklist |…

C++从入门到起飞之——多态 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.1.1 实现多态还有两个必须重要条件&…

BFS解决拓扑排序问题

文章目录 拓扑排序有向无环图&#xff08;DAG图&#xff09;AOV网&#xff08;顶点活动图&#xff09;拓扑排序实现拓扑排序 207. 课程表题目解析算法原理代码实现 LCR 113. 课程表 IILCR 114. 火星词典题目链接算法原理代码实现 拓扑排序 有向无环图&#xff08;DAG图&#x…

科研绘图系列:R语言组合多个图形

文章目录 介绍加载R包画图介绍 通过patchworkR包组合多个ggplot数据图形对象。 加载R包 library(ggplot2) library(patchwork)画图 画图theme_set(theme_bw() +theme(

全面介绍 CSS 属性值计算 —— 掌握它就了解大部分 CSS

CSS 的核心之一就在此&#xff0c;直接影响我们开发中的调试和布局&#xff01;&#xff01;&#xff01; 举个 &#x1f330;&#xff1a;页面上存在一个 h1 元素&#xff0c;不设置任何样式&#xff0c;但是当我们点开 computed 查看&#xff0c;几乎 MDN 上的 CSS 属性都存…

2206. 将数组划分成相等数对(排序/哈希)

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给你一个整数数组 nums &#xff0c;它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对&#xff0c;满足&#xff1a; 每个元素…

Python画笔案例-058 绘制单击画酷炫彩盘

1、绘制单击画酷炫彩盘 通过 python 的turtle 库绘制 单击画酷炫彩盘,如下图: 2、实现代码 绘制单击画酷炫彩盘,以下为实现代码: """单击画酷炫彩盘.py"""from turtle import Turtle # 导入海龟类 from random import randint…

经典大语言模型解读(3):参数量更大、泛化性能更强的生成式模型GPT-2

概述 在GPT-1的基础上&#xff0c;OpenAI提出了包含15亿参数&#xff08;GPT-1参数量的10倍以上&#xff09;的GPT-2模型。该模型在一个更大规模的文本数据集WebText上进行预训练。与GPT-1依赖特定任务上的有监督微调来提升性能不同&#xff0c;GPT-2具备更强的零样本&#xf…

「OC」引用计数(一)

iOS学习 前言自动引用计数引用计数引用计数的思考方式自己生成的对象&#xff0c;自己持有非自己生成的对象&#xff0c;自己也能持有不再需要自己持有的对象时释放无法释放非自己持有的对象 总结 前言 在学习oc时对引用计数略有了解&#xff0c;现在进行系统的学习总结。 自动…

Spring AOP - 配置文件方式实现

目录 AOP基础概念 示例1&#xff1a;模拟在com.text包及子包项下所有类名称以ServiceImpl结尾的类的所有方法执行前、执行后、执行正常后返回值、执行过程中出异常的情况 示例2&#xff1a;统计com.text包及子包项下所有类名称以DaoImpl结尾的类的所有方法执行时长情况 AOP基…

英伟达开源 NVLM 1.0 引领多模态 AI 变革

新闻 NVLM 1.0 是由英伟达&#xff08;Nvidia&#xff09;最新推出的一系列前沿级别的多模态大型语言模型&#xff08;MLLM&#xff09;&#xff0c;这些模型在视觉-语言任务上取得了与领先专有模型&#xff08;例如 GPT-4o&#xff09;和开放访问模型&#xff08;例如 Llama 3…

文件上传、重定向、Gin路由

文件上传 单个文件上传 index.html 文件上传前端页面代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><title>index</title> </head> <body> <form action"/upload" method"post"…

【WPF】桌面程序开发之窗口的用户控件详解

使用Visual Studio开发工具&#xff0c;我们可以编写在Windows系统上运行的桌面应用程序。其中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;项目是一种常见的选择。然而&#xff0c;对于初学者来说&#xff0c;WPF项目中xaml页面的布局设计可能是一…