打字小游戏

Posted HAI6545

tags:

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

/* 浏览器和标签都有默认的样式 清除默认样式 */
*
    margin: 0;padding: 0

/* 清除加粗标签的默认样式 */
b,strong
    font-weight: normal

/* 清除倾斜标签的默认样式 */
i,em
    font-style: normal

/* 清除默认下划线 */
a,u
    text-decoration: none

/* 清除列表的默认符号样式 */
ul,ol,li
    list-style: none

/* 万能清除法 解决高度塌陷 */
.clear-fix::after
    content: '';
    display: block;
    width: 100%;
    height: 0;
    clear: both;
    overflow: hidden;
    visibility: hidden;

/* 兼容写法 */
.clear-fix
    zoom: 1 /* 兼容IE */
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./02-reset.css">
    <title>Document</title>
</head>
<style>
    body,
    html 
        height: 100%;
    
    
    body 
        display: flex;
        justify-content: center;
        align-items: center;
        background-color: #000;
    

    .div 
        width: 1000px;
        height: 350px;
        display: flex;
        flex-wrap: wrap;
        align-content: space-around;
        justify-content: center;

    

    .row 
        width: 100%;
        height: 100px;
        display: flex;
        justify-content: space-around;
        align-items: center;
    

    .row:nth-child(2) 
        width: 90%;
    

    .row:nth-child(3) 
        width: 80%;
    

    .row li 
        width: 80px;
        height: 80px;
        background-color: #fff;
        font-size: 22px;
        font-weight: 600;
        text-align: center;
        line-height: 80px;
        border-radius: 15px;
    

    .row li.li1 
        background-color: #c91a35;
    

    .row li.li2 
        background-color: #e36947;
    

    .row li.li3 
        background-color: #e67a36;
    

    .row li.li4 
        background-color: #f7d847;
    

    .row li.li5 
        background-color: #ede886;
    

    .row li[name="xz"] 
        transform-style: preserve-3d;
        /* transform: scale(1.1); */
        background: none;
        color: #c91a35;
        border: 1px solid #e36947;
        animation: xz .3s infinite;
    

    @keyframes xz 
        0% 
            transform: translate(0);
        

        20% 
            transform: translate(-2px, 2px);
        

        40% 
            transform: translate(-2px, -2px);
        

        60% 
            transform: translate(2px, -2px);
        

        80% 
            transform: translate(-2px, -2px);
        

        100% 
            transform: translate(0);
        
    

    h2 
        width: 100px;
        height: 30px;
        background-color: pink;
        position: absolute;
        top: 50px;
        left: calc(50% - 50px);
        text-align: center;
        line-height: 30px;
    

    p 
        width: 300px;
        height: 50px;
        background-color: pink;
        position: absolute;
        top: 100px;
        left: calc(50% - 150px);
        text-align: center;
        line-height: 50px;
        font-size: 20px;
    

    h3 
        width: 200px;
        height: 30px;
        background-color: pink;
        position: absolute;
        top: 150px;
        left: calc(50% - 100px);
        text-align: center;
        line-height: 30px;
    
</style>

<body>
    <h2></h2>
    <p>分数每累计 5 分,速度会提升</p>
    <h3></h3>
    <div class="div">
        <ul class="row">
            <li class="li1">Q</li>
            <li class="li2">W</li>
            <li class="li3">E</li>
            <li class="li4">R</li>
            <li class="li5">T</li>
            <li class="li5">Y</li>
            <li class="li4">U</li>
            <li class="li3">I</li>
            <li class="li2">O</li>
            <li class="li1">P</li>
        </ul>
        <ul class="row">
            <li class="li1">A</li>
            <li class="li2">S</li>
            <li class="li3">D</li>
            <li class="li4">F</li>
            <li class="li5">G</li>
            <li class="li4">H</li>
            <li class="li3">J</li>
            <li class="li2">K</li>
            <li class="li1">L</li>
        </ul>
        <ul class="row">
            <li class="li1">Z</li>
            <li class="li2">X</li>
            <li class="li3">C</li>
            <li class="li4">V</li>
            <li class="li3">B</li>
            <li class="li2">N</li>
            <li class="li1">M</li>
        </ul>
    </div>
</body>
<script src="./utils.js"></script>
<script>
    // 获取所有 li 标签
    var lis = document.querySelectorAll("li");
    // 定义一个26个字母
    var str = "ABCDEFGHIJKLNMOPQISTUVWXYZ"

    randomkey()

    // 创建函数 - 随机获得按键
    function randomkey() 
        //调用随机数
        var randomletter = getRandom(0, 26);
        // 遍历所有 li 标签
        for (var i = 0; i < lis.length; i++) 
            // 判断 随机字符 与 哪个 li 内容对等
            if (str[randomletter] === lis[i].innerText) 
                // console.log(str[randomletter])
                for (var j = 0; j < lis.length; j++) 
                    lis[j].setAttribute("name", "")
                
                lis[i].setAttribute("name", "xz")
            
        
    



    //定义一个计数器 - 分数
    var num = 0;
    // 定义一个变量a,接收定时器的执行时间
    var a = 3000;
    // 定义一个全局变量的timerId接收定时器 - 便于调用
    var timerId;
    // 定义定时器,每三秒换个键
    timerId = setInterval(randomkey, a)
    //获取h2标签
    document.querySelector("h2").innerText = "分数:" + num
    //获取 h3 标签 
    document.querySelector("h3").innerText = "现在速度:" + a + "毫秒"



    // 创建键盘按下事件
    document.addEventListener("keydown", function () 
        // 获取事件对象
        var evt = window.event
        // 获取键盘输出的字母
        var keyboard = String.fromCharCode(evt.keyCode)
        // 获取被选中的 li
        var li = document.querySelector(".row li[name=xz]")


        // 判断键盘输入的字母是否与选中li内容相等
        if (keyboard === li.innerText) 
            // 如果相等则分数+1
            //运行一次函数,更换下个键位
            randomkey();
            num++
            // 116 对应键盘上的 F5键
        

        // 判断,如果输入的键位不符合则游戏失败
        // 116 对应键盘上的 F5键
        else if (evt.keyCode != 116) 
            clearInterval(timerId)
            num = 0
            a = 3000
            alert("游戏失败")
        
        // // 如果分数够 30 则游戏通过
        // if (num === 30) 
        //     clearInterval(timerId)
        //     num = 0
        //     a = 3000
        //     alert("游戏通关")
        // 
        // 将分数放在 h2 中
        document.querySelector("h2").innerText = "分数:" + num
    )

    //创建键盘抬起事件
    document.addEventListener("keyup", function () 
        //每五次加速
        if (num % 5 == 0 && num !== 0) 
            if (a > 1000 ) 
                a -= 500
             else if (a <= 1000) 
                a -= 100
                if (a === 200) 
                    a = 200
                
            
        
        //获取 h3 标签 
        document.querySelector("h3").innerText = "现在速度:" + a + "毫秒"
        // 先停止定时器 -  解决定时器会造成 键位 的频繁切换
        clearInterval(timerId)
        // 从新定义新的定时器,继续循环
        timerId = setInterval(randomkey, a)
    )
</script>

</html>
/**
 * 获取随机数的函数
 * @param number a 代表范围的数字
 * @param number b 代表范围的数字
 * @return number 返回范围内的随机整数
 */
function getRandom(a, b)
    var max = a>b?a:b
    var min = a>b?b:a
    return parseInt(Math.random() * (max - min)) + min

/**
 * 获取16进制的随机颜色值
 */
function getColor()
    var color = '#'
    for(var i=0;i<3;i++)
        var num = getRandom(0, 256)
        var hex = num.toString(16)
        hex = hex.length === 1 ? '0' + hex : hex;
        color += hex
    
    return color

/**
 * 批量设置样式的函数
 * @param node ele 被设置样式的标签对象
 * @param object styleObj 要设置的样式组成的键值对
 */
function setStyle(ele, styleObj)
    for(var key in styleObj)
        ele.style[key] = styleObj[key]
    

 

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

Java JUI打字小游戏项目

打字游戏

打字小游戏

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

打字小游戏

js打字小游戏