打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

在这里插入图片描述

文章目录

  • 打字通小游戏制作教程:用HTML5和JavaScript提升打字速度
    • 体验地址
    • 准备工作
    • 创建HTML结构
    • 添加CSS样式
    • 编写JavaScript逻辑
    • 测试游戏
    • 全部代码
    • 🎉 结语
    • 🎉 往期精彩回顾

打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

在这篇文章中,我们将一起学习如何使用HTML5和JavaScript来制作一个简单的打字通小游戏。这个小游戏可以帮助用户练习打字速度和准确性。通过这个教程,你将了解如何创建游戏界面、处理用户输入、实现倒计时以及计算得分。即使你是编程新手,也能跟随步骤完成这个项目。

体验地址

洛可可白⚡️打字通
在这里插入图片描述

准备工作

首先,确保你的计算机上安装了文本编辑器,如Notepad++、Sublime Text或Visual Studio Code。这些工具将帮助你编写和编辑代码。

创建HTML结构

打开你的文本编辑器,创建一个新的HTML文件,并输入以下代码:

<!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">
    <title>洛可可白打字通</title>
    <style>
        /* 在这里添加CSS样式 */
    </style>
</head>
<body>
    <div class="bigBox">
        <div class="container">你准备好了吗?</div>
        <textarea placeholder="开始输入..." style="resize: none" cols="30" rows="10"></textarea>
        <div class="operate">
            <button>开始</button>
            <div id="timer">60</div>
        </div>
    </div>
    <script>
        // 在这里添加JavaScript代码
    </script>
</body>
</html>

这是我们游戏的基本结构。<head>部分包含了页面的元数据和样式定义,<body>部分则是游戏的主要内容。

添加CSS样式

<style>标签内,我们将添加一些CSS样式来美化我们的打字通游戏。这包括游戏容器、文本区域、按钮和计时器的样式。

body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    -khtml-user-select: none;
    -o-user-select: none;
    user-select: none;
}

.bigBox {
    width: 50%;
    background-color: #ac8c3e;
    margin: 40px auto;
    box-sizing: border-box;
    padding: 20px;
    border-radius: 30px;
    box-shadow: 0px 0px 30px 9px #939393;
}

.container {
    margin: 0 auto;
    text-align: center;
    padding: 20px;
}

textarea {
    width: 100%;
    height: 200px;
    margin: 20px 0;
    font-size: 20px;
    border: none;
}

.operate {
    width: 20%;
    margin: 0 auto;
    text-align: center;
}

button {
    font-size: 24px;
    padding: 10px 20px;
    background-color: #007bff;
    color: #fff;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

#timer {
    font-size: 48px;
    margin: 20px;
}

编写JavaScript逻辑

现在,我们将在<script>标签内添加JavaScript代码,这是游戏的核心部分。我们将创建游戏文本、初始化游戏、处理用户输入、实现倒计时以及计算得分。

const text = "Believe in yourself and all that you are..."; // 游戏文本
const container = document.querySelector(".container");
const input = document.querySelector("textarea");
const button = document.querySelector("button");
const timer = document.getElementById("timer");
input.value = "";

let countdown;

function startGame() {
    // 游戏开始后,禁用按钮
    button.disabled = true;

    // 显示文本
    container.textContent = text;

    // 启动倒计时
    countdown = setInterval(() => {
        const remainingTime = parseInt(timer.textContent) - 1;
        if (remainingTime === 0) {
            // 时间用完,游戏结束
            endGame();
        }

        timer.textContent = remainingTime;
    }, 1000);
}

function endGame() {
    // 停止倒计时
    clearInterval(countdown);

    // 计算得分
    const score = calculateScore();
    const scoreMessage = `你的得分是 ${score} 分!`;
    container.textContent = scoreMessage;

    button.disabled = false;
}

function calculateScore() {
    const userText = input.value.trim();
    const correctText = text.trim();
    const userWords = userText.split(" ");
    const correctWords = correctText.split(" ");
    let score = 0;

    for (let i = 0; i < userWords.length; i++) {
        if (userWords[i] === correctWords[i]) {
            score++;
        }
    }

    return score;
}

// 添加按钮点击事件监听器
button.addEventListener("click", () => {
    // 设置倒计时时间
    timer.textContent = "60";

    // 清空输入框和输出文本区域
    input.value = "";
    container.textContent = "";

    // 启动游戏
    startGame();
});

在这个脚本中,我们首先定义了游戏的文本。然后,我们创建了开始游戏的函数startGame,它将显示游戏文本并启动倒计时。我们还定义了结束游戏的函数endGame,它将停止倒计时并计算得分。calculateScore函数用于计算用户的得分。最后,我们为开始按钮添加了一个点击事件监听器,当用户点击按钮时,游戏将开始。

测试游戏

保存你的HTML文件,并在浏览器中打开它。你应该能看到一个打字通游戏的界面。点击“开始”按钮,游戏将开始,你可以尝试在限定时间内尽可能准确地输入显示的文本。时间结束后,你的得分将被计算出来。

全部代码

<!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" />
    <title>洛可可白⚡️打字通</title>
    <style>
      body {
        font-family: Arial, sans-serif;
        margin: 0;
        padding: 0;
        -moz-user-select: none;
        /*火狐*/
        -webkit-user-select: none;
        /*webkit浏览器*/
        -ms-user-select: none;
        /*IE10*/
        -khtml-user-select: none;
        /*早期浏览器*/
        -o-user-select: none;
        user-select: none;
      }

      .bigBox {
        width: 50%;
        background-color: #ac8c3e;
        margin: 40px auto;
        box-sizing: border-box;
        padding: 20px;
        border-radius: 30px;
        box-shadow: 0px 0px 30px 9px #939393;
      }

      .container {
        margin: 0 auto;
        text-align: center;
        padding: 20px;
      }

      textarea {
        width: 100%;
        height: 200px;
        margin: 20px 0;
        font-size: 20px;
        border: none;
      }

      .operate {
        width: 20%;
        margin: 0 auto;
        text-align: center;
      }

      button {
        font-size: 24px;
        padding: 10px 20px;
        background-color: #007bff;
        color: #fff;
        border: none;
        border-radius: 5px;
        cursor: pointer;
      }

      #timer {
        font-size: 48px;
        margin: 20px;
      }
    </style>
  </head>

  <body>
    <div class="bigBox">
      <div class="container">你准备好了吗?</div>
      <textarea
        name=""
        placeholder="开始输入..."
        id=""
        style="resize: none"
        cols="30"
        rows="10"
      ></textarea>
      <div class="operate">
        <button>开始</button>
        <div id="timer">60</div>
      </div>
    </div>

    <script>
      const text =
        "Believe in yourself and all that you are. Know that there is something inside you that is greater than any obstacle. This quote by Christian D. Larson reminds us that we all have the power within us to overcome any obstacle we may face. When we have confidence in ourselves and our abilities, we can achieve great things. So, let's trust ourselves, believe in our dreams, and work hard to make them a reality.";

      const container = document.querySelector(".container");
      const input = document.querySelector("textarea");
      const button = document.querySelector("button");
      const timer = document.getElementById("timer");
      input.value = "";

      let countdown;

      function startGame() {
        // 游戏开始后,禁用按钮
        button.disabled = true;

        // 显示文本
        container.textContent = text;

        // 启动倒计时
        countdown = setInterval(() => {
          const remainingTime = parseInt(timer.textContent) - 1;
          if (remainingTime === 0) {
            // 时间用完,游戏结束
            endGame();
          }

          timer.textContent = remainingTime;
        }, 1000);
      }

      function endGame() {
        // 停止倒计时
        clearInterval(countdown);

        // 计算得分
        const score = calculateScore();
        const scoreMessage = `你的得分是 ${score} 分!`;
        container.textContent = scoreMessage;

        button.disabled = false;
      }

      function calculateScore() {
        const userText = input.value.trim();
        const correctText = text.trim();
        const userWords = userText.split(" ");
        const correctWords = correctText.split(" ");
        let score = 0;

        for (let i = 0; i < userWords.length; i++) {
          console.log(userWords[i], correctWords[i]);
          if (userWords[i] === correctWords[i]) {
            score++;
          }
        }

        return score;
      }

      // 添加按钮点击事件监听器
      button.addEventListener("click", () => {
        // 设置倒计时时间
        timer.textContent = "60";

        // 清空输入框和输出文本区域
        input.value = "";
        container.textContent = "";

        // 启动游戏
        startGame();
      });
    </script>
  </body>
</html>

🎉 结语

恭喜你,你已经成功创建了一个打字通小游戏!这个教程涵盖了从创建基本的HTML结构到添加CSS样式,再到编写JavaScript交互逻辑的全过程。通过这个项目,你不仅学会了如何制作一个小游戏,还对前端开发有了基本的了解。随着你技能的提升,你可以尝试添加更多的功能,比如记录用户的最佳得分、添加音效或者实现更复杂的游戏逻辑。祝你编程愉快!
如果对你有帮助,点赞、收藏、关注是我更新的动力!👋🌟🚀

🎉 往期精彩回顾

  1. 拼图小游戏制作教程:用HTML5和JavaScript打造经典游戏
  • 234阅读 · 6点赞 · 8收藏
  1. Mock.js 基本语法与应用笔记
  • 215阅读 · 3点赞 · 8收藏
  1. 排序算法全景:从基础到高级的Java实现
  • 474阅读 · 22点赞 · 7收藏
  1. CentOS系统上安装Redis操作教程
  • 124阅读 · 4点赞 · 3收藏
  1. 打造你的HTML5打地鼠游戏:零基础入门教程
  • 1032阅读 · 17点赞 · 27收藏
  1. 打造你的贪吃蛇游戏:HTML、CSS与JavaScript的完美结合
  • 869阅读 · 24点赞 · 9收藏
  1. 快速上手:使用Hexo搭建并自定义个人博客
  • 579阅读 · 16点赞 · 17收藏
  1. 在Vue中处理接口返回的二进制图片数据
  • 582阅读 · 19点赞 · 15收藏
  1. 打造经典游戏:HTML5与CSS3实现俄罗斯方块
  • 1105阅读 · 31点赞 · 23收藏
  1. Spring Boot中Excel数据导入导出的高效实现
  • 1028阅读 · 23点赞 · 22收藏
  1. Spring Boot中实现图片上传功能的两种策略
  • 1187阅读 · 23点赞 · 13收藏
  1. CentOS上安装MySQL 5.7和MySQL 8.0教程
  • 806阅读 · 21点赞 · 13收藏
  1. Spring Boot工程集成验证码生成与验证功能教程
  • 1397阅读 · 38点赞 · 17收藏
  1. Spring Boot 3项目集成Swagger3教程
  • 771阅读 · 15点赞 · 8收藏
  1. CentOS上安装JDK的详细教程
  • 599阅读 · 12点赞 · 13收藏
  1. 解决前端项目中Node.js版本不一致导致的依赖安装错误
  • 845阅读 · 17点赞 · 16收藏
  1. 入门指南:使用uni-app构建跨平台应用
  • 1265阅读 · 29点赞 · 9收藏
  1. Vue项目中使用Mock.js进行API模拟
  • 650阅读 · 17点赞 · 7收藏
  1. Vue组件间通信实践
  • 863阅读 · 24点赞 · 18收藏
  1. CentOS上安装与配置Nginx
  • 649阅读 · 9点赞 · 6收藏
  1. Vue跳转页面传递参数
  • 263阅读 · 5点赞 · 4收藏
  1. vue项目如何下载使用gsap动画库
  • 544阅读 · 1点赞 · 0收藏
  1. VS Code上搭建React开发环境
  • 2263阅读 · 2点赞 · 10收藏
  1. vue命令式组件封装以及使用
  • 816阅读 · 2点赞 · 3收藏
  1. springboot项目常用配置
  • 379阅读 · 1点赞 · 0收藏
  1. 如何在Vue中使用百度地图API来创建地图应用程序。
  • 344阅读 · 3点赞 · 1收藏
  1. Nodejs搭建服务器
  • 167阅读 · 2点赞 · 1收藏
  1. 走入ES6
  • 201阅读 · 2点赞 · 1收藏
  1. Ajax技术包含Fetch和Axios
  • 175阅读 · 2点赞 · 2收藏
  1. Promise技术学这篇就够了
  • 82阅读 · 2点赞 · 1收藏
  1. 手把手教你CentOS下载Nginx配置使用
  • 463阅读 · 2点赞 · 3收藏
  1. 基于ubuntu的c语言编程简单易懂
  • 290阅读 · 3点赞 · 2收藏
  1. vue3 setup语法糖的三种书写方法
  • 2798阅读 · 5点赞 · 14收藏
  1. vue3中vuex 的使用基本使用和二次封装
  • 446阅读 · 3点赞 · 1收藏
  1. 初学Vue第一篇
  • 210阅读 · 1点赞 · 1收藏
  1. MySQL基础全套全网最详细讲解
  • 767阅读 · 3点赞 · 6收藏
  1. 数据结构之操作顺序表实战——C语言
  • 146阅读 · 3点赞 · 2收藏
  1. 前端开发之响应式布局,响应式 HTML, CSS and JavaScript 框架介绍;
  • 701阅读 · 3点赞 · 2收藏
  1. VS code搭建C/C++运行环境简单易上手
  • 2777阅读 · 5点赞 · 8收藏
  1. Vue.2&Vue.3项目引入Element-UI教程&踩坑
  • 9255阅读 · 22点赞 · 82收藏
  1. Vue项目引入Echarts可视化图表库教程&踩坑
  • 2198阅读 · 3点赞 · 5收藏
  1. VirtualBox虚拟机搭建CentOS系统教程
  • 4487阅读 · 4点赞 · 32收藏
  1. VS Code上搭建Vue开发环境
  • 10637阅读 · 13点赞 · 64收藏
  1. Color-UI 简介及使用教程
  • 5902阅读 · 2点赞 · 13收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/447365.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

strlen和sizeof的应用与区别

sizeof和strlen作为都能求大小的工具两者之间有何不同, strlen: 1. strlrn计算的是什么的大小 strlen计算的是字符串长度的大小&#xff0c;所以strlen在计算字符串长度时会一直顺着字符串的元素一个一个的查找&#xff0c;一直到查询到了/0才会停止 2.strlen属于库函数&am…

C# 用 System.Xml 读 Freeplane.mm文件,生成测试用例.csv文件

Freeplane 是一款基于 Java 的开源软件&#xff0c;继承 Freemind 的思维导图工具软件&#xff0c;它扩展了知识管理功能&#xff0c;在 Freemind 上增加了一些额外的功能&#xff0c;比如数学公式、节点属性面板等。 先写一个测试程序 test_read_Xml.cs 如下 using System;…

基于springboot+vue实现开放实验室管理系统项目【项目源码+论文说明】

基于springbootvue实现企业任务管理追踪系统演示 摘要 信息技术永远是改变生活的第一种创新方式&#xff0c;各种行业的发展更是脱离不了科技化的支持。原本传统的行业正在被科技行业的切入悄悄的发生变化。就拿我们生活当中常见的事情举例而言&#xff0c;在外卖行业还没有发…

Linux/Windows下部署OpenCV环境(Java/SpringBoot/IDEA)

环境 本文基于Linux&#xff08;CentOS 7&#xff09;、SpringBoot部署运行OpenCV 4.5.5&#xff0c;并顺带记录Windows/IDEA下如何调试SpringBoot调用OpenCV项目。 Windows下调试 首先我们编写代码&#xff0c;并在Windows/IDEA下调试通过。 下载Windows版安装包&#xff0…

macbook pro 2018 安装 arch linux 双系统

文章目录 友情提醒关于我的 mac在 mac 上需要提前做的事情复制 wifi 驱动 在 linux 上的操作还原 wifi 驱动连接 wifi 网络磁盘分区制作文件系统挂载分区 使用 archinstall 来安装 arch linux遗留问题 友情提醒 安装 archl linux 的时候&#xff0c;mac 的键盘是没法用的&#…

堆宝塔(Python)

作者 陈越 单位 浙江大学 堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小&#xff0c;按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下&#xff1a; 首先准备两根柱子&#xff0c;一根 A 柱串宝塔&#xff0c;一根 B 柱用于…

在高并发、高性能、高可用 三高项目中如何设计适合实际业务场景的分布式id(一)

分布式ID组件&#xff1a;黄金链路上的关键基石 在现代分布式系统中&#xff0c;分布式ID组件无疑扮演着至关重要的角色。作为整个系统的黄金链路上的关键组件&#xff0c;它的稳定性和可靠性直接关乎到整个系统的正常运作。一旦分布式ID组件出现问题&#xff0c;黄金链路上的…

【armv8 / armv9】: MMU深度学习

文章目录 一、MMU概念介绍二、虚拟地址空间和物理地址空间2.1、(虚拟/物理)地址空间的范围2.2、物理地址空间有效位(范围) 三、Translation regimes四、地址翻译/几级页表&#xff1f;4.1、思考&#xff1a;页表到底有几级&#xff1f;4.2、以4KB granule为例&#xff0c;页表的…

FreeRTOS教程1 基础知识

目录 1、准备材料 2、学习目标 3、前提知识 3.1、FreeRTOS简介 3.2、源码函数命名规律 4、动手创建一个FreeRTOS空工程 4.1、CubeMX相关配置 4.1.1、工程基本配置 4.1.2、时钟树配置 4.1.3、外设参数配置 4.1.4、外设中断配置 4.2、生成代码 4.2.1、配置Project Ma…

AIGC实战——GPT(Generative Pre-trained Transformer)

AIGC实战——GPT 0. 前言1. GPT 简介2. 葡萄酒评论数据集3. 注意力机制3.1 查询、键和值3.2 多头注意力3.3 因果掩码 4. Transformer4.1 Transformer 块4.2 位置编码 5. 训练GPT6. GPT 分析6.1 生成文本6.2 注意力分数 小结系列链接 0. 前言 注意力机制能够用于构建先进的文本…

ubuntu安装使用eigen(vscode)

1、eigen安装 安装命令如下&#xff1a; sudo apt-get update sudo apt-get install libeigen3-dev 默认安装路径为&#xff1a; /usr/include/eigen3 安装版本查询命令&#xff1a; pkg-config --modversion eigen3 2、CMakeLists.txt cmake_minimum_required(VERSION 3.…

21、电源管理入门之芯片设计中的电源管理

目录 1. 关于PCSA和SCP 2. 关于PSCI和SCMI 3. 关于芯片SoC设计中的一些要点 参考: 这里以ARM为例来进行说明,我们在做驱动软件的时候,就需要跟硬件SoC里面的IP打交道,通过操作寄存器来实现硬件功能。之前的文章:ARM SCP入门-AP与SCP通信中3和4章节已经进行了简单介绍,…

[MYSQL数据库]--表的增删查改和字段类型

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、表的增…

LeetCode203:移除链表元素

题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解题思想 使用虚拟头节点 代码 struct ListNode {int val;ListNode* next;ListNode() :val(0), next(nullptr) {};ListNode(i…

使用IDEA远程Debug调试

文章目录 背景配置IDEA设置启动脚本改造 细节细节1&#xff1a;停在本地断点&#xff0c;关闭程序后会继续执行吗?细节2&#xff1a;jar包代码和本地不一致会怎么样&#xff1f;细节3&#xff1a;日志打印在哪里&#xff1f;细节4&#xff1a;调试时其他人会不会卡住&#xff…

spring-data-elasticsearch官方文档解读(部分)

Spring Data Elasticsearch 这里主要学习的是4.4.16版本的文档 1. 版本 下表显示了 Spring Data 发行版系列使用的 Elasticsearch 版本和其中包含的 Spring Data Elasticsearch 版本&#xff0c;以及引用该特定 Spring Data 发行版系列的 Spring Boot 版本。给出的 Elastics…

【APP逆向】酒仙网预约茅台程序,包含逆向过程详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:爬虫实战,零基础、进阶教学 景天的主页:景天科技苑 文章目录 酒仙网预约抢购茅台1.抓包分析,账户名和密码登录2.短信登录3.登录+茅台预约 密码登录酒仙网预约抢购茅台 目标:账号登…

MVO-CNN-LSTM多输入时序预测|多元宇宙优化算法-卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&a…

mysql题库详解

1、如何创建和删除数据库&#xff1f; 创建数据库 CREATE DATABASE 数据库名; 删除数据库 drop database 数据库名; 2、MyISAM与InnoDB的区别&#xff1f; 1&#xff09;事务&#xff1a;MyISAM 不支持事务 InnoDB 支持 2&#xff09;行锁/表锁&#xff1a;MyISAM 支持表级锁…

力扣---最小栈

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…
最新文章