返回顶部
首页 > 资讯 > 前端开发 > JavaScript >基于JS编写一个看字说颜色小游戏
  • 470
分享到

基于JS编写一个看字说颜色小游戏

2024-04-02 19:04:59 470人浏览 泡泡鱼
摘要

目录前言一、游戏介绍与规则二、大体设计与代码讲解① 看图模式具体思路核心代码② 答题模式具体思路核心代码三、仓库地址与体验地址前言 最近偷懒,一直没开工参与游戏活动的文章。终于在这几

前言

最近偷懒,一直没开工参与游戏活动的文章。终于在这几天,整理了一下之前微信小程序写好的看字说颜色(小程序名:工具宝盒),整理出来弄了个html版本。(分成了两个小模式)

同时,趁着这次机会,把我做的《看字说颜色》小游戏,给大家也讲解讲解我的思路。(该游戏设计完全笔者自己想出来的~ 欢迎大家一起讨论,或者有更好的想法也可提出~ 再多嘴一句,笔者是后端java,所以前端会有点拉~ 望大佬多多包涵~)

一、游戏介绍与规则

游戏名称:《看字说颜色》

游戏模式:① 看图模式 ② 答题模式

游戏规则:① 看图模式,根据窗体生成的字与字体颜色,说出对应的字体颜色。(字是干扰项) ② 答题模式,根据题目要求;选出正确答案。

干扰等级:入门(5种颜色)、初级(8种颜色)、中级(10种颜色)、高级(12种颜色)

二、大体设计与代码讲解

① 看图模式

具体思路

首先,定义颜色对应的字、和对应颜色的十六进制(这里是有12种颜色)

封装一个方法获取一个字(颜色)与一个不对应颜色的十六进制(如:蓝(#000000),就是显示蓝字,字体颜色是黑色)

设置对应等级,生成生成“二维表格”(入门:5种颜色,5x5;初级:8种颜色,8x8;中级:10种颜色,10x10;高级:12种颜色,12x12.)

开搞!

核心代码

定义设置颜色(12种颜色)

// 定义设置颜色(12种颜色) 
let colorNameList = ['红', '绿', '蓝', '黄', '黑', '白', '灰', '紫', '粉', '青', '橙', '棕'];
// 对应颜色的十六进制
let colorHexList = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#000000', '#FFFFFF',
'#999999', '#9933FF', '#ff00cc', '#65ffcd', '#ffa500', '#D2691E'];
// 颜色对应的map形式
let colORMap = {
    '红': '#FF0000','绿': '#00FF00','蓝': '#0000FF','黄': '#FFFF00',
    '黑': '#000000','白': '#FFFFFF','灰': '#999999','紫': '#9933FF',
    '粉': '#ff00cc','青': '#65ffcd','橙': '#ffa500','棕': '#D2691E'
}

封装获取一个字和不对应字体颜色的方法

/ 获取一个颜色对象
function getRandomColor(size) {
    // size是传入的等级所用的参数
    // console.log(size)
    var numHex = Math.floor(Math.random() * size);
    var numName = Math.floor(Math.random() * size);
    if (numHex == numName) { // 避免“字”和“字”的颜色相同
        if (numHex > 1 && numHex < size) {
            numHex -= 2;
        } else {
            numHex += 2;
        }
    };
    var color = {
        colorHex: colorHexList[numHex],
        colorName: colorNameList[numName],
        numHex: numHex,
        numName: numName
    }
    return color; // 可均衡获取 0 到 9 的随机整数.
}

获取“二维表格”(画“图”)

// 获取二维坐标系(画“图”)
function getTwoArray(size) {
    // console.log(e);
    var textList = new Array();
    for (var i = 0; i < size; i++) {
        textList[i] = new Array();
    }
    // console.log(textList)
    var textStr = "";
    for (var i = 0; i < size; i++) {
        if (i % 2 == 0) {
            textStr += "<div style='background: #cce8f5;margin:0px;'>";
        } else {
            textStr += "<div style='background: #ffd4d4;margin:0px;'>";
        }
        for (var j = 0; j < size; j++) {
            var theColor = getRandomColor(size);
            textList[i][j] = theColor;
            textStr += "<span class='the-color-span' style='color:" + theColor.colorHex + "'>" + theColor.colorName + "</span>";
        }
        textStr += "</div>";
    }
    return textStr; // 可均衡获取 0 到 9 的随机整数.
}

图片模式操作

// 显示图片模式
function bindImg() {
    var traget = document.getElementById("show-img-div");
    var btnList = document.getElementsByClassName("nfz-btn");
    if (traget.style.display == "none") {
        traget.style.display = "block";
        that.bindBtn(btnList);
    } else {
        traget.style.display = "none";
        that.bindBtn(btnList);
    }
}

// 图片模式显示对应的
function showImg(e) {
    var size = e.getAttribute("data-value");
    size = parseInt(size);
    that.bindImg();
    const colorList = getTwoArray(size);
    // console.log(colorList);
    var imgBody = document.getElementById("imgBody");
    imgBody.innerHTML = colorList;
}

禁止其他按钮

// 禁止按钮
function bindBtn(btnList) {
    for (var btn of btnList) {
        btn.disabled = !btn.disabled;
    }
}

② 答题模式

具体思路

首先,需要在图片模式的基础下(除了图片模式操作的方法)。同样的,需要有定义颜色对应的字、和对应颜色的十六进制(这里是有12种颜色)

封装一个方法获取一个字(颜色)与一个不对应颜色的十六进制(如:蓝(#000000),就是显示蓝字,字体颜色是黑色)

还需要定义颜色下标、选项等等一些相关操作(具体可以看代码注释)

封装获取题的方法、点击选项方法、下一道题、显示分数、重置游戏...

开搞!

核心代码

相关需要定义的参数

// 这里还有前面定义的颜色,就不重复写入这里了(可参考完整代码)
// 颜色下标(方便记录,去掉相同颜色,避免出现相同颜色)
var numberList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
// console.log(colorMap);
var optList = ["A", "B", "C", "D"];// 选项
var msg = ""; // 提示语
var isNext = true; // 是否下一题
var optRightNum = 0; // 正确答案下标
let questionNumber = 10; // 默认题目数量 10(下标从0开始)
let theQuerstionNumber = 0; // 题目数
let theResultNum = 0; // 分数
var theRightNum = 0; // 正确选项

显示答题模式

// 显示答题
function showQuestion(e) {
    that.bindQuestion();
    if (e && e.getAttribute("data-value")) {
        questionNumber = e.getAttribute("data-value");
    }
    var questionNum = document.getElementById("questionNum");
    questionNum.innerHTML = questionNumber;
    that.getQuestion();
}

来一道题


// 来一道题
function getQuestion() {
    optRightNum = Math.floor(Math.random() * 4); // 正确答案下标(获取随机数0~3)
    var size = questionNumber;
    size = parseInt(size);
    var theColor = getRandomColor(size);
    // console.log(theColor);
    // for(var i =0;i<questionNumber;i++){
    var num = Math.floor(Math.random() * 2); // 随机获取0 or 1;为0时候是读字;为1时是读颜色
    var titleStr = theQuerstionNumber + "、题目:";
    // console.log(num)
    if (num == 0) {
        titleStr += "选择该字对应的文字";
        theRightNum = theColor.numName;
    } else {
        titleStr += "选择该字对应的颜色";
        theRightNum = theColor.numHex;
    }
    titleStr += "<div class='the-title-span' style='color:" + theColor.colorHex + "'>" + theColor.colorName + "</div>";

    // console.log(titleStr);
    // }
    var themDiv = document.getElementById("opt-them");
    var titleDiv = document.getElementById("opt-title");
    titleDiv.innerHTML = titleStr;

    var newNumList = [].concat(numberList);

    newNumList.splice(theRightNum, 1); // 删除正确答案的下标(防止出现相同答案)

    // console.log("numberList",numberList);
    // console.log("newNumList",newNumList);
    // console.log(newNumList.length);

    var optStr = "<div class='opt-them'>";

    for (var i = 0; i < 4; i++) {
        optStr += "<div class='opt-item' onclick='onclickOpt(this)' data-value='" + i + "'>" + optList[i] + ". ";
        var colorNum = Math.floor(Math.random() * newNumList.length);
        if (i == optRightNum) {
            optStr += colorNameList[theRightNum];
            optStr += "</div>";
            continue;
        }
        optStr += colorNameList[newNumList[colorNum]];
        newNumList.splice(colorNum, 1); // 删除已出现过的选项的下标(防止出现相同选项)
        optStr += "</div>";
    }
    optStr += "</div>";
    // console.log(optStr);
    // console.log("正确答案:"+(optRightNum+1));
    themDiv.innerHTML = optStr;
}

点击选择选项答案

// 点击选项方法(事件)
function onclickOpt(e) {
    if (!isNext) { // 当前状态不能进行下一题
        return;
    }
    var result = document.getElementById("result");
    var theOpt = "";
    if (e && e.getAttribute("data-value")) {
        theOpt = e.getAttribute("data-value");
    } else {
        return;
    }
    isNext = false;
    if (optRightNum == theOpt) {
        theResultNum++;
        result.innerHTML = theResultNum;
        // console.log("选择正确!");
        msg = "选择正确!";
    } else {
        // console.log("选择错误!");
        msg = "选择错误!";
    }
    if (theQuerstionNumber == questionNumber) {
        msg = "游戏结束!一共:" + questionNumber + "题;<br>您的最终得分是:" + theResultNum;
        that.bindShowResult(msg);
        return;
    }
    that.bindShowResult(msg);
}

显示分数、重置游戏

// 显示分数
function bindShowResult(msg) {
    var showMsg = document.getElementById("show-msg");
    if (showMsg.style.display == "none") {
        showMsg.children[0].innerHTML = msg;
        showMsg.style.display = "block";
    } else {
        showMsg.style.display = "none";
    }
}

// 重置游戏
function reset() {
    theQuerstionNumber = 1;
    isNext = true;
    theResultNum = 0;
    result.innerHTML = theResultNum;
    that.getQuestion();
}

三、仓库地址与体验地址

在线体验(pc端):传送门  

仓库地址:等建好活动GitHub的要求申请了,就给大家放~(着急想要的可以直接去扒我的网站~) 传送门

以上就是基于js编写一个看字说颜色小游戏的详细内容,更多关于JS看字说颜色游戏的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于JS编写一个看字说颜色小游戏

本文链接: https://lsjlt.com/news/146953.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于JS编写一个看字说颜色小游戏
    目录前言一、游戏介绍与规则二、大体设计与代码讲解① 看图模式具体思路核心代码② 答题模式具体思路核心代码三、仓库地址与体验地址前言 最近偷懒,一直没开工参与游戏活动的文章。终于在这几...
    99+
    2024-04-02
  • 基于JS怎么编写看字说颜色小游戏
    本篇内容介绍了“基于JS怎么编写看字说颜色小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、游戏介绍与规则游戏名称:《看字说颜色》游戏...
    99+
    2023-06-30
  • 基于JavaScript编写一个翻卡游戏
    目录前言翻卡动画生成随机分布数组均匀元素下的随机算法不均匀元素下的随机算法生成最终数组点击事件完整代码前言 首先将这个游戏需求拆分成三个部分: 翻卡动画生成随机分布数组点击事件 翻卡...
    99+
    2023-02-15
    JavaScript实现翻卡游戏 JavaScript翻卡游戏 JavaScript游戏
  • 基于Python编写一个宝石消消乐小游戏
    目录开发工具环境搭建原理简介开发工具 python版本:3.6.4 相关模块: pygame;以及一些python自带的模块。 环境搭建 安装python并添加到环境变量,pip安装...
    99+
    2024-04-02
  • 基于JS制作一个网页版的猜数字小游戏
    目录一. 游戏简介二. 页面预览三. 页面实现四. 功能实现五. 参考源码 一. 游戏简介 在输入框内输一个数字,点击后面的“猜”按钮,系统会根据你...
    99+
    2024-04-02
  • 基于JavaScript如何编写一个翻卡游戏
    这篇文章主要介绍“基于JavaScript如何编写一个翻卡游戏”,在日常操作中,相信很多人在基于JavaScript如何编写一个翻卡游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于JavaScript如...
    99+
    2023-07-05
  • 基于Python编写一个中秋节嫦娥投食小游戏
    目录游戏设计1、游戏背景2、功能设计效果展示代码素材代码素材山河远阔,烟火人间,又一年,千里婵娟~ 今天给大家带来的是给玉兔投喂月饼的小游戏。八月十五中秋夜晚,让我们对着月亮许愿:希...
    99+
    2024-04-02
  • 基于C语言编写一个简单的抽卡小游戏
    目录效果图展示开始的界面输入1输入10输入0实现代码test4.26.c许愿.cgame.h下载小奔最近学了C语言不少的东西,但是想用学到的东西来搞一个小游戏。 不过小奔就不做那些猜...
    99+
    2024-04-02
  • 基于PyQt5制作一个猜数字小游戏
    开始之前,直接来看一下实现后的效果。想自己实现或者需要源码的童鞋直接进场... 将PyQt5的相关模块直接导入即可。 from PyQt5.QtGui import * from ...
    99+
    2024-04-02
  • 基于JavaSwing制作一个Pong小游戏
    之前呢我们用Python的Pygame做过这个Pong游戏 这一次,我们用Java的Swing来实现类似的效果 首先我们列出本次的项目结构 这个程序分为四个部分,一个程序入口,一...
    99+
    2023-01-05
    Java Swing制作Pong游戏 Java Pong游戏 Java Swing 游戏
  • 使用Java编写一个2048小游戏
    本文章向大家介绍使用Java编写一个2048小游戏的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页...
    99+
    2023-06-06
  • 使用JavaScript编写一个2048小游戏
    今天就跟大家聊聊有关使用JavaScript编写一个2048小游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • 基于JS制作一个简易的2048游戏
    效果图 实现代码 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-T...
    99+
    2024-04-02
  • 利用java编写一个弹球小游戏
    本篇文章给大家分享的是有关利用java编写一个弹球小游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。弹球游戏实现原理:  隔一定时间(小于1秒)重新绘制图像,因为Graphi...
    99+
    2023-05-31
    java ava
  • 使用java编写一个猜字母游戏
    使用java编写一个猜字母游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-06
  • 怎么用C++编写一个井字游戏
    这篇文章主要介绍“怎么用C++编写一个井字游戏”,在日常操作中,相信很多人在怎么用C++编写一个井字游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C++编写一个井字游戏”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • 基于Python写个"点球大战"小游戏
    先说下题目: 首先这个游戏的核心,就是判断玩家和电脑选择的方向是不是一样。 玩家的选择通过input输入获取,电脑的选择我们可以用random随机数模块来产生要 注意的点在于两种结...
    99+
    2022-12-30
    Python点球大战游戏 Python点球大战 Python 游戏
  • 怎么用Elixir语言编写一个小游戏
    本篇内容主要讲解“怎么用Elixir语言编写一个小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Elixir语言编写一个小游戏”吧!通过编写“猜数字”游戏来学习 Elixir 编程语言...
    99+
    2023-06-15
  • 基于JS实现一个小型编译器
    目录前言ParseTransformTraversal(遍历)Visitors(访问)Code generate代码实现词法分析器(tokenizer)语法分析器(parser)遍历...
    99+
    2024-04-02
  • 如何基于Vue制作一个猜拳小游戏
    目录前言:项目效果展示:代码实现思路:实现代码:总结:前言: 在工作学习之余玩一会游戏既能带来快乐,还能缓解生活压力,跟随此文一起制作一个小游戏吧。 描述:石头剪子布,是一种猜拳游戏...
    99+
    2023-01-05
    vue 小游戏 vue猜拳小游戏 vue 小游戏动画
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作