首页 > 其他分享 >经典记忆卡片游戏html代码

经典记忆卡片游戏html代码

时间:2024-08-19 16:19:26浏览次数:12  
标签:document timeLeft 卡片 difficulty html grid 记忆 let card

记忆卡片游戏是一款简单而富有挑战性的经典游戏,旨在锻炼玩家的记忆力和观察力。游戏通常由一组图案相同的卡片组成,玩家需要通过翻转卡片找到匹配的对。每当找到一对匹配的卡片时,玩家将获得一定的分数或奖励,游戏结束时,分数最高者获胜。 无论是与朋友竞技,还是单独训练,这款游戏都适合各个年龄段的玩家。它不仅带来乐趣,还能有效提升记忆力、专注力以及反应能力。在这个快节奏的现代生活中,经典记忆卡片游戏无疑是一个值得一试的好选择。 下面我们就来一起写一个这个html,主要是一个难度选择、一个倒计时的功能。

点击查看代码
<p>选择难度:</p>
<select id="difficulty">
<option value="easy">简单</option>
<option value="medium">中等</option>
<option value="hard">困难</option>
</select><button onclick="startGame()">开始游戏</button>
<div id="grid" class="grid">&nbsp;</div>
<p id="message" class="message">&nbsp;</p>
<p id="timer" class="timer">时间: 60</p>

这些代码放入内body

用到的js是下面这个

点击查看代码
<script>
    let cards = [];
    let firstCard = null;
    let secondCard = null;
    let hasFlippedCard = false;
    let lockBoard = false;
    let matchedPairs = 0;
    let timer;
    let timeLeft = 60;

    function setCardData(difficulty) {
        if (difficulty === 'easy') {
            cards = ['A', 'A', 'B', 'B'];
            timeLeft = 30;
        } else if (difficulty === 'medium') {
            cards = [
                'A', 'A', 'B', 'B', 
                'C', 'C', 'D', 'D'
            ];
            timeLeft = 60;
        } else {
            cards = [
                'A', 'A', 'B', 'B', 
                'C', 'C', 'D', 'D',
                'E', 'E', 'F', 'F', 
                'G', 'G', 'H', 'H'
            ];
            timeLeft = 90;
        }
    }

    function startGame() {
        const difficulty = document.getElementById('difficulty').value;
        setCardData(difficulty);

        document.getElementById('grid').innerHTML = '';
        matchedPairs = 0;
        document.getElementById('message').innerText = '';
        document.getElementById('timer').innerText = `时间: ${timeLeft}`;
        clearInterval(timer);
        createBoard();
    }

    function shuffle(array) {
        return array.sort(() => Math.random() - 0.5);
    }

    function createBoard() {
        const grid = document.getElementById('grid');
        shuffle(cards).forEach(value => {
            const card = document.createElement('div');
            card.classList.add('card');
            card.setAttribute('data-value', value);
            card.addEventListener('click', flipCard);
            grid.appendChild(card);
        });
        startTimer();
    }

    function startTimer() {
        timer = setInterval(() => {
            timeLeft--;
            document.getElementById('timer').innerText = `时间: ${timeLeft}`;
            if (timeLeft <= 0) {
                clearInterval(timer);
                document.getElementById('message').innerText = '时间到!游戏结束!';
                lockBoard = true;
            }
        }, 1000);
    }

    function flipCard() {
        if (lockBoard || this === firstCard) return;

        this.classList.toggle('flipped');
        this.innerText = this.getAttribute('data-value');

        if (!hasFlippedCard) {
            hasFlippedCard = true;
            firstCard = this;
        } else {
            secondCard = this;
            lockBoard = true;
            checkForMatch();
        }
    }

    function checkForMatch() {
        const isMatch = firstCard.getAttribute('data-value') === secondCard.getAttribute('data-value');
        
        if (isMatch) {
            matchedPairs++;
            resetBoard();
            document.getElementById('message').innerText = `找到 ${matchedPairs} 对!`;
            if (matchedPairs === cards.length / 2) {
                clearInterval(timer);
                document.getElementById('message').innerText = '恭喜你,完成游戏!';
            }
        } else {
            setTimeout(() => {
                firstCard.classList.remove('flipped');
                secondCard.classList.remove('flipped');
                firstCard.innerText = '';
                secondCard.innerText = '';
                resetBoard();
            }, 1000);
        }
    }

    function resetBoard() {
        [hasFlippedCard, lockBoard] = [false, false];
        [firstCard, secondCard] = [null, null];
    }

</script>

css样式可以用这个,这个可以自己调试下

点击查看代码
<style>
        body {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
            margin: 0;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background-color: #f0e5d3;
        }
        h1 {
            margin-bottom: 20px;
        }
        .grid {
            display: grid;
            grid-template-columns: repeat(4, 100px);
            grid-gap: 10px;
            margin-top: 20px;
        }
        .card {
            width: 100px;
            height: 100px;
            background-color: #4CAF50;
            color: white;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 24px;
            cursor: pointer;
            user-select: none;
        }
        .flipped {
            background-color: #fff;
            color: black;
        }
        .message, .timer {
            margin-top: 20px;
            font-size: 18px;
            font-weight: bold;
        }
        #difficulty {
            margin-bottom: 20px;
        }
    </style>

我弄的案列可以看这个:http://diuta.com/app/kp.html

在学习阶段,后面有时间在完善下。

标签:document,timeLeft,卡片,difficulty,html,grid,记忆,let,card
From: https://www.cnblogs.com/diuta/p/18367511

相关文章

  • HTML5+CSS3学习笔记补充——移动端网页+Bootstrap框架
    移动端网页和Bootstrap框架1.视口:用来约束HTML尺寸<!--视口标签是HTML骨架默认生成的设置网页宽度与逻辑分辨率(即设备)宽度一致--><metaname="viewport"content="width=device-width,initial-scale=1.0">2.二倍图:防止设计稿图片在高分辨率屏幕下模糊失真3.......
  • 易优CMS插件html.php页面缓存配置
    插件html.php页面缓存配置作用于插件前台,指定需要缓存的页面,这只在运营模式下才有效。参数规则:mca:weapp_控制器_操作名filename:生成在/data/runtime目录下的指定路径,建议参考以下p:当前url控制器的操作方法传入的全部参数变量名cache:页面缓存有效时间,单位是秒案例:假设......
  • html表单提交前判断
    <divid="add_yuliao_div"style="width:50%;background-color:white;border:1pxsolidblack;position:absolute;left:25%;top:30px;padding-left:10px;box-shadow:4px4px8pxgrey;border-radius:5px;......
  • 粒子群算法和引力搜索算法的混合算法(PSOGSA)优化长短期记忆神经网络原理及matlab代码
    目录0引言1数学模型2模型对比3matlab代码3.1伪代码示意图3.2PSOGSA-LSTM4视频讲解0引言基于已发表智能算法文献研究,SeyedaliMirjalili等人在发现PSO的开发能力与GSA的探索能力有者较好结合性能,因此基于二者算法优势点提出混合算法PSOGSA。该算法主要利用PSO......
  • 实战练习:html+css
    1.网站favicon图标①制作favicon图标②https://www.bitbug.net/制作.ico类型图标,放根目录③用到的页面进行引入<linkrel="shortcuticon"href="favicon.ico"/> 超出部分隐藏、一行显示、省略号结尾 四个li,前三个有after伪元素 设置好图片的大小,可以实现无论li里......
  • Web大学生网页作业成品——24节气立夏介绍网页设计与实现(HTML+CSS)(1个页面)
    ......
  • 浏览器解析html文件src静态资源路径问题
    相对路径src资源引号内部不以/分割符开头,浏览器从当html文件前路径拼接url:场景a<imgsrc="static/1.jpeg"width="258"height="39"/>当前请求地址xxxx:80/html/1.html浏览器解析图片地址为xxxx:80/html/static/1.jpeg场景b<imgsrc="../static/1.jpeg"width="......
  • (nice!!!)LeetCode 552. 学生出勤记录 II(动态规划dp递归版、记忆化dfs)
    题目:552.学生出勤记录II思路:记忆化搜索dfs,细节看注释classSolution{public:constintmod=1e9+7;//状态f[u][a][b]表示:在选择第u个位置前,缺勤次数为a次,且当前连续迟到次数为b次时,可以得到的合法出勤次数intf[100010][5][5];intdfs(intu,int......
  • html xml 区别
    HTML(HyperTextMarkupLanguage)和XML(eXtensibleMarkupLanguage)都是标记语言,用于结构化文档。但是它们有一些重要的区别:HTML和XML的区别目的和用途:HTML:主要用于显示网页内容。它是设计用于显示信息,并且预定义了一些标签,用于表示网页中的各种元素(如段落、标题、......
  • html+css 实现hover 故障效果按钮
    前言:哈喽,大家好,今天给大家分享html+css实现hover故障效果按钮!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......