js案例:选字游戏

news2024/9/21 18:41:47

目录

效果预览图

游戏规则 

整体思路 

完整代码 

html部分

js部分


效果预览图

游戏规则 

1.游戏时间为30s,30s倒计时结束弹出游戏结束和对应的游戏分数。

2.根据中间大字的颜色,点击下面对应的文字。 大字的颜色 == 点击的文字(列如:大字的文字是绿,颜色为黄色,则点击下面的小字黄 得分加一,如果点击其他文字则不加分,即使其他文字的颜色是黄色) 分数加一分。

3.点击错误不加分,也不减分。

整体思路 

  1. 定义变量和数组:

    • 创建一个变量 并初始化为零,用于记录得分。
    • 创建一个数组 ,包含游戏中可能出现的颜色名称。
    • 创建一个数组,包含游戏中可能出现的文字。
  2. 创建一个函数dx()开始游戏:

    • 在函数中,使用 setInterval 函数设置一个计时器,每秒减少剩余时间。
    • 定义一个变量num并初始化为 30,用于倒计时。
    • 在计时器的回调函数中,更新剩余时间并将其显示在页面上,如果剩余时间为零,清除计时器,结束游戏。。
  3. 打乱数组的顺序

  4. 设置处理点击事件:

    • 在函数中,获取点击的元素的文字和颜色。
    • 如果颜色与文字匹配,将得分变量加一,并更新页面上的得分显示。
    • 否则,不得分。

完整代码 

html部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文字游戏</title>
    <link rel="stylesheet" href="./css/style.css"> <!-- 引用外部样式表文件 -->
</head>
<body>
    <div class="rongqi">
        <h3 class="r">剩余时间:<var>30</var> S</h3> <!-- 显示剩余时间的元素 -->
        <h3 class="l">得分: <b>0</b> </h3> <!-- 显示得分的元素 -->
        <div id="dwz">
            <!-- 待选文字的容器 -->
        </div>
        <div id="xwz">
            <span></span> <!-- 选中文字的容器 -->
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
    </div>
</body>
</html>
<script src="./js/wzyx.js"></script> <!-- 引用外部 JavaScript 文件实现游戏逻辑 -->

js部分

// 定义选择器函数 $
function $(ele) {
  // 判断传入的参数是否为空字符串、undefined、或者是数字或对象
  if (ele == '' || ele == undefined || typeof ele == "number" || typeof ele == "object") {
    return; // 返回空值
  }
  // 获取传入参数的第一个字符
  let first = ele.charAt();
  if (first == '#') { // 如果第一个字符是 #
    // 返回通过 id 获取的元素
    return document.getElementById(ele.slice(1));
  } else if (first == '.') { // 如果第一个字符是 .
    // 返回通过 class 获取的元素集合
    return document.getElementsByClassName(ele.slice(1));
  } else {
    // 返回通过标签名获取的元素集合
    return document.getElementsByTagName(ele);
  }
}

// 剩余时间倒计时
let num = 30; // 初始倒计时时间
let n = null; // 用于存放计时器的标识
let sum = 0; // 得分初始化为 0
let timer;

n = setInterval(function() {
  num--; // 每秒减少剩余时间
  $('var')[0].innerHTML = num; // 更新倒计时显示

  if (num <= 0) { // 时间归零
    clearInterval(n); // 清除计时器
    // 弹出游戏结束的提示框,并显示得分
    alert(`游戏结束,您的得分为${sum}分`);
  }
}, 1000);

// 声明颜色数组 cols,存放五种颜色
let cols = ['red', 'yellow', 'blue', 'green', 'purple'];
// 声明文字数组 wz,用于存放点击时的文字
let wz = ['红', '黄', '蓝', '绿', '紫'];

// 打乱文字和颜色的数组,实现随机生成
function dx() {
  // 打乱文字数组
  wz.sort(function() {
    return Math.random() - 0.5;
  });
  // 打乱颜色数组
  cols.sort(function() {
    return Math.random() - 0.5;
  });

  // 随机设置大字的颜色
  let c = Math.floor(Math.random() * 5);
  $('#dwz').style.color = cols[c];
  console.log(cols[c]);

  // 随机设置小字的颜色和位置
  for (let i = 0; i < wz.length; i++) {
    $('span')[i].innerHTML = wz[i];
    $('span')[i].style.color = cols[i];
    $('#dwz').innerHTML = wz[i];
  }

  let anc = '';
  switch (cols[c]) {
    case 'red':
      anc = '红';
      break;
    case 'yellow':
      anc = '黄';
      break;
    case 'blue':
      anc = '蓝';
      break;
    case 'green':
      anc = '绿';
      break;
    case 'purple':
      anc = '紫';
      break;
    default:
      break;
  }

  // 设置小字的点击事件
  for (let i = 0; i < wz.length; i++) {
    $('span')[i].onclick = function() {
      console.log(wz[i]);
      if (wz[i] == anc) { // 如果点击的文字和大字的颜色相同
        sum += 1; // 增加得分
      }
      dx(); // 重新生成新的文字和颜色
    };
  }
  $('b')[0].innerHTML = sum; // 更新显示得分的元素
}

dx(); // 开始游戏,调用 dx() 函数

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外汇MT4教程:如何下载和安装MT4交易平台?

对于外汇爱好者来说&#xff0c;MT4交易平台是一个不可或缺的工具。如果您是新手&#xff0c;可能还不太了解如何下载和安装MT4交易平台。本文将为您介绍如何下载和安装MT4交易平台&#xff0c;以及如何使用它进行外汇交易。 第一步&#xff1a;下载MT4交易平台 首先您需要前往…

一款内网信息收集利用工具

FuckDomainMini 简介 这是一款基于java开发Windows的内网信息收集、利用工具 可以节省您的信息收集所花费的&#xff0c;又或者是做免杀所花费的时间 现在这个版本是先行版本&#xff0c;目前先行版只有一个功能&#xff0c;更多的功能还在调试与开发中。 尽情期待&#x…

成都瀚网科技有限公司:抖音商家怎么免费入驻?

随着抖音成为全球最受欢迎的短视频平台之一&#xff0c;越来越多的商家开始关注抖音上的商机。抖音商家的进驻可以帮助商家扩大品牌影响力和销售渠道。那么&#xff0c;如何免费进入抖音成为商家呢&#xff1f;下面就为大家介绍一下具体步骤。 1、抖音商家如何免费注册&#xf…

一元多项式

过程 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<map> #include<vector> #include<queue> #include<algorithm> using namespace std;int n;double cP(const vector<double>& a, double x…

【Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

日期和时间在软件开发中经常被用到&#xff0c;无论是用于记录事件、计算时间间隔还是格式化日期以供用户友好的展示。Java 提供了强大的日期和时间处理工具&#xff0c;其中 SimpleDateFormat 类是一个重要的工具&#xff0c;用于格式化日期和时间&#xff0c;同时也支持解析日…

【Apollo 自动驾驶】Win11 中 WSL2 安装配置 Apollo 环境

【Apollo 自动驾驶】Win11 中 WSL2 安装配置 Apollo 环境 【1】Win11 WSL2 安装配置 Nvidia Cuda 【1.1】检查计算机硬件的显卡信息 计算机图标右击 -> 管理 -> 设备管理器 -> 显示适配器&#xff1b; 【1.2】检查对应显卡并安装 Nvidia 显卡驱动 下载对应的 Nv…

C#winform导出DataGridView数据到Excel表

前提&#xff1a;NuGet安装EPPlus&#xff0c;选择合适的能兼容当前.net framwork的版本 主要代码&#xff1a; private void btn_export_Click(object sender, EventArgs e) {SaveFileDialog saveFileDialog new SaveFileDialog();saveFileDialog.Filter "Excel Files…

Mybatis传参parameterType方法汇总记录

这里分别记录使用过的七种传参方式&#xff1a; 1、在入参只有一个的情况下,Mapper.java中直接传即可 2、而在参数有两三个的情况下,Mapper.java中可以用Param注解来指定入参 程序就知道哪个参对应拼接完SQL的哪个条件字段 并且Mapper.xml中parameterType不用去指定&#xff…

解决eNSP和HCL Cloud兼容性的问题

问题&#xff1a;eNSP或HCL无法启动 不兼容的原因&#xff1a;eNSP支持Virtual Box是5.2.44&#xff1b;HCL支持的Virtual Box版本是6.0.14 解决方案&#xff1a;注册表欺骗 再进行重新安装前先把之前的都卸载掉&#xff1a;eNSP、VirtualBox、HCL等 1、先安装Virtual Box 5.…

JS中call(),apply()是什么,call(),apply()的原理是什么?如何手写一个call(),apply()?Symbol是什么,怎么用Symbol调优?含详细解析

&#x1f389;call() &#x1f495;call()的参数 thisArg&#xff1a;在调用 func 时要使用的 this 值 arg1, …, argN &#xff08;可选&#xff09; 函数的参数 ✨call()的描述&#xff1a; 首先声明 func是一个函数&#xff0c;person是一个对象 针对这段代码&#xff1a;f…

python中如何使用正则表达匹配\本身?(文末赠书)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 将军向宠&#xff0c;性行淑均。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python钻石群【空】问了一个Python正则表达式的问题&#xff0c;一起…

CSS笔记(黑马程序员pink老师前端)定位

定位可以让盒子自由的在某个盒子内移动位置或者固定在屏幕中某个位置&#xff0c;并且可以压住其他盒子。 定位 定位模式 边偏移 定位模式说明static静态定位,按标准流特性摆放,没有边偏移,很少用relative相对定位,相对自身原有位置移动,原有位置继续占有&#xff08;不脱标…

《好笑的爱》阅读笔记

《好笑的爱》阅读笔记 是暑期认识的一位川大的同学推荐的&#xff0c;说他喜欢的一个作家是米兰昆德拉&#xff0c;喜欢他的短篇小说集《好笑的爱》。于是去武汉中心书城顺便买了两本书&#xff0c;另外还买了一本是《帷幕》&#xff0c;至今还没有看。 这本书总共包含了几篇短…

JDK8的 ConcurrentHashMap 源码分析

目录 1. 导读 2. ConcurrentHashMap 成员变量解读 3. ConcurrentHashMap 初始化 3.1 ConcurrentHashMap 无参构造源码解读 3.2 ConcurrentHashMap 带参构造源码解读 3.3 tableSizeFor 方法作用解读 3.4 ConcurrenthashMap初始化总结 4. ConcurrentHashMap 添加元素方法…

14 - 多线程之锁优化(下):使用乐观锁优化并行操作

前两讲讨论了 Synchronized 和 Lock 实现的同步锁机制&#xff0c;这两种同步锁都属于悲观锁&#xff0c;是保护线程安全最直观的方式。 我们知道悲观锁在高并发的场景下&#xff0c;激烈的锁竞争会造成线程阻塞&#xff0c;大量阻塞线程会导致系统的上下文切换&#xff0c;增…

springBoot-使用idea创建项目添加依赖并实现数据查询

一、使用idea创建springBoot项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

Python小知识 - Python装饰器

Python装饰器 在Python中&#xff0c;装饰器是一个特殊的函数&#xff0c;可以将其他函数包装在装饰器函数中&#xff0c;并且将被包装的函数作为参数传递给装饰器函数。 使用装饰器的好处是可以自动在被包装的函数前后执行一些额外的代码&#xff0c;比如在函数执行前后打印日…

Linux之防火墙

目录 什么是防火墙 分类&#xff1a; Netfilter(数据包过滤) 防火墙无法完成的任务 iptables 与 firewalld 区别 iptables iptables执行原则 规则链 概念 分析 流程图 规则链分类 iptables 流量处理动作 iptables表 四种规则表 安装iptables 预处理 管理命令 …

SpringBoot整合RabbitMQ图文过程以及RabbitTemplate常用API介绍

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

GUI知识点总结(二)(java)

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f993;事件 &#x1f3e8;Adapter 适配器&#x1f415;对话框&#x1f98d;showMessageDialog()&#xff1a;消息对话框&#x1f98d;showConfirmDialog()&#xff1a;确认对话…