当前位置:首页 > JavaScript

js实现翻牌游戏

2026-02-03 06:57:16JavaScript

翻牌游戏的基本实现思路

翻牌游戏通常涉及一组卡片,玩家需要翻开两张卡片,如果匹配则保留翻开状态,否则翻回背面。以下是使用JavaScript实现翻牌游戏的核心步骤:

创建HTML结构

<div id="game-board" class="game-board"></div>

添加CSS样式

.game-board {
  display: grid;
  grid-template-columns: repeat(4, 100px);
  gap: 10px;
}

.card {
  width: 100px;
  height: 100px;
  background-color: #ccc;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 24px;
  cursor: pointer;
  transition: transform 0.3s;
}

.card.flipped {
  transform: rotateY(180deg);
  background-color: white;
}

JavaScript核心逻辑

document.addEventListener('DOMContentLoaded', () => {
  const cards = ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'];
  let flippedCards = [];
  let matchedPairs = 0;

  // 洗牌函数
  function shuffleArray(array) {
    return array.sort(() => Math.random() - 0.5);
  }

  // 初始化游戏板
  function initGame() {
    const gameBoard = document.getElementById('game-board');
    gameBoard.innerHTML = '';
    const shuffledCards = shuffleArray([...cards]);

    shuffledCards.forEach((card, index) => {
      const cardElement = document.createElement('div');
      cardElement.classList.add('card');
      cardElement.dataset.value = card;
      cardElement.dataset.index = index;
      cardElement.addEventListener('click', flipCard);
      gameBoard.appendChild(cardElement);
    });
  }

  // 翻牌函数
  function flipCard() {
    if (flippedCards.length < 2 && !this.classList.contains('flipped')) {
      this.classList.add('flipped');
      this.textContent = this.dataset.value;
      flippedCards.push(this);

      if (flippedCards.length === 2) {
        checkForMatch();
      }
    }
  }

  // 检查匹配
  function checkForMatch() {
    const [card1, card2] = flippedCards;

    if (card1.dataset.value === card2.dataset.value) {
      matchedPairs++;
      flippedCards = [];

      if (matchedPairs === cards.length / 2) {
        setTimeout(() => alert('恭喜你赢了!'), 500);
      }
    } else {
      setTimeout(() => {
        card1.classList.remove('flipped');
        card2.classList.remove('flipped');
        card1.textContent = '';
        card2.textContent = '';
        flippedCards = [];
      }, 1000);
    }
  }

  initGame();
});

功能扩展建议

  1. 计时功能:添加游戏计时器,记录玩家完成游戏所用时间
  2. 计步功能:统计玩家翻牌的次数
  3. 难度选择:提供不同大小的游戏板(4x4、6x6等)
  4. 动画效果:为卡片翻转添加更流畅的动画
  5. 音效:为翻牌和匹配成功添加音效反馈

性能优化考虑

  1. 使用事件委托代替为每张卡片单独添加事件监听
  2. 避免频繁的DOM操作,可以缓存DOM元素
  3. 对于大型游戏板,考虑虚拟滚动技术

以上代码提供了翻牌游戏的基本实现框架,可以根据具体需求进一步扩展和完善功能。

js实现翻牌游戏

标签: 游戏js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…