js+html实现打字游戏v1

实现逻辑:设置定时器每秒刷新一次,定时器刷新多少次执行一次生成单词操作来决定单词的生成速度,例如初始单词生成速度为1,那么定时器刷新5次才生成一次单词,每个单词用span来装,每组10个单词放到div里。监听键盘按下事件,用一个变量str记录键盘连续按下的字母组成的字符串,当字符串str包含span中的字符串,则span变红,同时右下角得分数加1,当div中的一排span都变红时,从body里删掉该div。如果有高中必备3500单词作为单词库,每次生成的一组10个单词从中随机选取,效果更加,既能练习打字又能熟悉单词拼写。
上代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        span{
            font-size: larger;
            margin: 20px;
        }

        #score{
            background-color: red;
            color: white;
            position: absolute;
            left:90%;
            top: 90%;
        }
    </style>
</head>
<span id="score">
0
</span>

<body>
<script>

    var content = "";
    var score = 0;
    //这里可以使用固定单词
    var words= ["apple","horizontal","vertical","vector","ghost","evil","banana","polo","curve","deploy"];
    var str = '';
    var count = 0;
    //单词生成速度,可以根据当前得分来设置,得分越高速度越快,比如当得分大于200时速度设为2,大于300百是速度设为3
    var speed = 1;

    setInterval(()=>{
        if(count%(6-speed)===0){
            let divElement = document.createElement('div');
            for (var i = 0; i <words.length ; i++) {
                var rand = Math.floor(Math.random()*words.length);
                var span = document.createElement('span');
                span.innerText = words[rand];
                divElement.appendChild(span);
                document.body.appendChild(divElement);
            }
        }
        count++;
    },1000)

    document.addEventListener("keydown",function (event) {
        str+=event.key;
        console.log(str);
        var spans = document.getElementsByTagName('span');
        var matchCnt = 0;
        for (var i = 0; i <spans.length ; i++) {
            if(str.includes(spans[i].innerText)){
                spans[i].style.color = 'red'
                score++;
                matchCnt++;
            }
        }
        if(matchCnt>0){
            str = '';
        }
        document.getElementById('score').innerText = score;

        //清除全部打出的一行
        var divs = document.getElementsByTagName('div');
        for (var i = 0; i <divs.length ; i++) {
            var children = divs[i].children;
            var redCnt = 0;
            for (var j = 0; j <children.length ; j++) {
                if(children[j].style.color === 'red'){
                    redCnt++;
                }
            }
            if(redCnt===children.length){
                document.body.removeChild(divs[i]);
            }
        }
    });



</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的HTML下落打字游戏的示例,使用Canvas API和requestAnimationFrame浏览器API实现: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>下落打字游戏</title> <style> canvas { border: 1px solid black; } </style> </head> <body> <canvas id="gameCanvas" width="400" height="400"></canvas> <script> // 获取画布和上下文 const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); // 定义游戏状态 let score = 0; let gameOver = false; // 定义字母下落的速度和间隔 const speed = 2; const interval = 1000; // 定义字母的属性 const letters = 'abcdefghijklmnopqrstuvwxyz'; const letterSize = 20; const letterColor = 'black'; const letterFont = '20px Arial'; // 定义字母的初始位置和速度 let letterX = canvas.width / 2; let letterY = 0; let letterSpeed = speed; // 定义键盘事件处理函数 function handleKeyDown(event) { if (event.key === letters.charAt(Math.floor(Math.random() * letters.length)))) { score++; letterY = 0; letterX = Math.random() * (canvas.width - letterSize); letterSpeed += 0.1; } else { gameOver = true; } } // 定义游戏循环函数 function gameLoop() { // 清空画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 绘制字母 ctx.fillStyle = letterColor; ctx.font = letterFont; ctx.fillText(letters.charAt(Math.floor(Math.random() * letters.length)), letterX, letterY); // 更新字母位置 letterY += letterSpeed; // 判断游戏是否结束 if (letterY > canvas.height) { gameOver = true; } // 更新分数 ctx.fillText('Score: ' + score, 10, 20); // 循环调用游戏循环函数 if (!gameOver) { requestAnimationFrame(gameLoop); } else { ctx.fillText('Game Over!', 150, 200); } } // 添加键盘事件监听器 document.addEventListener('keydown', handleKeyDown); // 开始游戏循环 gameLoop(); </script> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值