打字游戏

Posted HAI6545

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打字游戏相关的知识,希望对你有一定的参考价值。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<button class="startBtn">开始</button>
<div class="score">得分:<b>0</b></div>
</body>
<script src="./js/utils.js"></script>
<script>
var b = document.querySelector('.score b');
// 打字游戏
/*
1.随机创建一个span
2.设置样式
3.设置定时器向下移动
4.绑定键盘事件 - 打掉他 - 重新再创建一个
5.判断是否到底 - GAME OVER

6.得分
7.开始按钮
*/
// var span
var arr = []
// var timerId

// 通过定时器调用createSpan - 每隔一会就创建一个span
var time
document.querySelector('.startBtn').onclick = function()
    createSpan()
    time = setInterval(createSpan, 1500)

// 出问题:多个span一起出现,但是他们的变量名都叫span,多个定时器叠加操作同一歌后面的span。前面的span不能移动了,后面的span越走越快

// 解决:
/*
1.将多个span放在一个集合中 - 定义span变量要换成一个集合()
*/


function createSpan()
    // 创建span
    var span = document.createElement('span')
    // 设置随机字符
    var code = getRandom(65, 91)
    // 将阿斯克码转成字符,放在span中
    span.innerText = String.fromCharCode(code)
    // 将span放在body中
    document.body.appendChild(span)
    // 获取随机的left值
    var left = getRandom(0, document.documentElement.clientWidth - 30)
    // 设置样式
    setStyle(span, 
        width: '30px',
        height: '30px',
        borderRadius: '50%',
        backgroundColor: '#f00',
        textAlign: 'center',
        lineHeight: '30px',
        position: 'absolute',
        top: 0,
        left: left + 'px',
        fontWeight: 'bold',
        color: '#fff'
    )
    // 设置定时器让span向下移动
    var timerId = setInterval(function()
        // 获取top
        var t = span.offsetTop
        // 加大
        t++
        // 判断t的最大值
        if(t >= document.documentElement.clientHeight - 30)
            t = document.documentElement.clientHeight - 30
            // 提示游戏结束
            alert('GAME OVER')
            // 停止定时器
            clearInterval(timerId)
            // 清空所有定时器
            for(var i=0;i<arr.length;i++)
                clearInterval(arr[i].timer)
            
            clearInterval(time)
        
        // 将t设置给top样式
        span.style.top = t + 'px'
    , 20)
    // 将span和timerId放在一个对象中
    arr.push(
        ele: span, 
        timer: timerId
    )

// 给浏览器绑定键盘事件
document.onkeyup = function()
    // 获取键盘码
    var keycode = window.event.keyCode
    // 将键盘码转为字符
    var word = String.fromCharCode(keycode).toUpperCase()
    // 判断是否输入的span中的字符
    // if(word === span.innerText)
    //     // 删除span
    //     span.parentElement.removeChild(span)
    //     // 清除定时器
    //     clearInterval(timerId)
    //     // 再次创建
    //     createSpan()
    // 

    // 从arr中遍历判断word是哪个span的innerText
    for(var i=0;i<arr.length;i++)
        if(arr[i].ele.innerText === word)
            // 删除span
            arr[i].ele.parentElement.removeChild(arr[i].ele)
            // 清除对应的定时器
            clearInterval(arr[i].timer)
            // 将arr[i]对象中数组中删除
            arr.splice(i, 1)
            // 将分数+1
            b.innerText = +b.innerText + 1
            break
        
    

/*

*/
</script>
</html>

以上是关于打字游戏的主要内容,如果未能解决你的问题,请参考以下文章

键盘输入盲打训练, 打字练习,打字游戏 打字教程推荐

windows端打字游戏——游戏进行

打字游戏

打字游戏

Python:游戏:测试打字速度

c#实现简单金山打字小游戏(源码)