热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

原生JS实现谁去拿外卖游戏(改编)

\x26gt;这个游戏还是挺有意思的,逻辑不是很难,但是很多细节问题需要耐心调整\x26gt;整

>这个游戏还是挺有意思的,逻辑不是很难,但是很多细节问题需要耐心调整


>整体逻辑

        1、每次点击产生一个100以内的随机数

        2、列表中只能显示十个数,且十个数中没有重复数字

        3、最小的那个数的那一列进行强调标注

        4、最小数在第一个时,若后续数字没有比它大的,那么它一直在第一位保持,每次删除第二位


看效果(css样式自己调整,active就是最小数的样式(动态添加))

该效果图为本人csdn上下载


具体代码如下


















    最小数在前




    点我产生一个随机数




    • 11

    • 12

    • 25

    • 32

    • 41

    • 35

    • 23

    • 14

    • 21

    • 31










      body,
      html {
      width: 100%;
      padding: 0;
      margin: 0;
      box-sizing: border-box;
      }


      .wrapper {
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: row;
      }




      /* 生成随机数主界面 */


      h2 {
      font-size: 26px;
      font-weight: bold;
      }


      #plat {
      width: 600px;
      height: 700px;
      margin: 2px auto;
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
      }


      .box {
      width: 200px;
      height: 50px;
      margin: 20px auto;
      border: 1px solid rgb(38, 222, 255);
      background-color: rgb(38, 222, 255);
      border-radius: 12px;
      text-align: center;
      color: rgb(255, 255, 255);
      line-height: 50px;
      font-size: 20px;
      text-shadow: 1px 1px 2px rgb(255, 255, 255);
      box-shadow: 3px 3px 5px rgb(212, 212, 212);
      }


      .box:hover {
      cursor: pointer;
      }


      .random {
      width: 400px;
      height: 450px;
      position: relative;
      * padding: 28px; */
      border: 1px solid rgba(0, 204, 255, 0.863);
      border-radius: 12px;
      background-color: rgba(0, 204, 255, 0.863);
      box-shadow: 4px 6px 6px rgba(199, 199, 199, 0.863);
      }




      /* .random::after {
      content: '';
      display: block;
      width: 350px;
      height: 400px;
      border: 1px solid rgba(0, 204, 255, 0.863);
      border-radius: 12px;
      margin: 25px auto;
      position: relative;
      } */


      #list {
      width: 330px;
      height: 380px;
      border: 1px solid rgba(0, 204, 255, 0.863);
      border-radius: 12px;
      padding: 10px;
      position: absolute;
      top: 24px;
      left: 24px;
      background-color: #fff;
      overflow: hidden;
      }


      #list li {
      width: 315px;
      height: 37px;
      border-bottom: 1px solid #333;
      line-height: 37px;
      text-indent: 20px;
      }


      .active {
      background-color: rgb(128, 128, 128);
      border-color: rgb(128, 128, 128);
      color: rgb(255, 251, 30);
      }




      /* 右侧3D盒子 */


      #rightBox {
      width: 300px;
      height: 300px;
      border: 1px solid #333;
      margin-right: 320px;
      }


      .item {
      width: 120px;
      height: 120px;
      background-color: aquamarine;
      margin-bottom: 1px;
      }

        window.Onload= function() {
        获取ul节点
        var ul = document.getElementById('list');
        / 生成随机数列表
        function init(index) {
        var li = document.createElement('li');
        li.innerHTML = temp[index];
        ul.append(li);
        }
        //点击按钮生成随机数
        // 首先获取按钮节点
        var box = document.getElementsByClassName('box')[0];
        var temp = [11, 12, 25, 32, 41, 35, 23, 14, 21, 31]; //生成一个变量,存储后面生成的随机数
        var count = 10; //生成一个变量,存储生成的随机数的个数
        box.addEventListener('click', function() {
        var Ctemp = temp; //保存创建新数之前的数组
        var randomNum = initRandom(); //创建随机数
        while (isTrue(Ctemp, randomNum)) { //检查新随机数和原数组中的数是否有重复
        randomNum = initRandom(); //有则创建新随机数
        }
        temp[count] = randomNum;
        if (count <10) { //如果不设置默认列表,则需要该代码
        init(count);
        count++;
        } else {
        // 添加条件,如果第一个数是十个数中最小的那个,就不移出第一个,而是移出第二个
        if (findMin(temp) == 0) {
        temp.splice(1, 1); //数组剪切第二个元素
        ul.removeChild(ul.children[1]); //移除第二个
        } else {
        ul.removeChild(ul.firstElementChild); //移出第一个随机数
        temp.shift(); //数组剪切第一个元素
        }
        count--; //元素呗剪切了,数组最后一位空缺
        console.log(temp);
        init(count); //同时生成新的随机数并放在队尾
        count++; //保证列表始终是十列
        //count ++这是一个bug点,如果不加这条语句,每次轮到执行else语句之后,count的值变为9,继续执行if模块,导致需要点击两次才能更新队尾值
        }
        var lis = document.querySelectorAll('li');
        for (var item in lis) {
        if (lis.hasOwnProperty(item)) {
        lis[item].className = ''; //先清除所有li的样式
        }
        }
        //给最小数的li添加动态样式
        addClass(temp);
        }, false);
        //给生成的随机数中最小数添加动态样式
        function addClass(temp) {
        // console.log(Math.min(...temp)) //结构赋值,找出数组中最小的那个数
        // console.log(Math.min.apply(null, temp))//改变this指向方法也可以
        var minIndex = findMin(temp);
        ul.children[minIndex].className = 'active';
        }
        //找到最小值和最小值索引
        function findMin(temp) {
        var minIndex = 0;
        var min = temp[0];
        for (let i = 1; i
        if (min > temp[i]) {
        min = temp[i];
        minIndex = i;
        }
        }
        return minIndex;
        }
        //生成随机数
        function initRandom() {
        return Math.floor(Math.random() * 100);
        }
        //判断新随机数在原数组中是否存在
        function isTrue(arr, newValue) {
        return arr.some(function(e) { //只要原数组中有一个和新随机数一样返回true
        return e == newValue;
        })
        }
        }

        小游戏可以锻炼逻辑思维,同时也可以回顾JS的api,帮助记忆


        附csdn地址:https://blog.csdn.net/weixin_45774485?spm=1000.2115.3001.5343&type=blog


        一起学前端,我们一起知道的更多!


        湖北师范大学



        推荐阅读
        • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
          在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
        • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
        • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
          本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
        • 网站访问全流程解析
          本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
        • javascript分页类支持页码格式
          前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
        • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
          在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
        • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
          双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
        • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
        • IOS Run loop详解
          为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
        • 最详尽的4K技术科普
          什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
        • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
        • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
        • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
        • 利用REM实现移动端布局的高效适配技巧
          在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
        • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
        author-avatar
        手机用户2502876011
        这个家伙很懒,什么也没留下!
        PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
        Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有