热门标签 | 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


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


        湖北师范大学



        推荐阅读
        • 导航栏样式练习:项目实例解析
          本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
        • 优化ListView性能
          本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
        • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
        • 深入解析Android自定义View面试题
          本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
        • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
        • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
        • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
        • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
        • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
          本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
        • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
        • Android 渐变圆环加载控件实现
          本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
        • UNP 第9章:主机名与地址转换
          本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
        • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
        • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
        • RecyclerView初步学习(一)
          RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
        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社区 版权所有