js实现一个猜数字游戏

发布时间 - 2026-01-11 00:27:46    点击率:

看你需要猜几次才能猜到那个正确的数字!

效果图:

代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>猜数字游戏</title>
    <script type="text/javascript" charset="utf-8">
      window.onload = newgame; //页面载入的时候就开始一个新的游戏
      window.onpopstate = popState; //处理历史记录相关事件
      var state, ui; //全局变量,在newgame()方法中会对其初始化
      function newgame(playagain) {
        ui = {
          heading: null, //文档最上面的<h1>元素
          prompt: null, //要求用户输入一个猜测数字
          input: null, //用户输入猜测数字的地方
          low: null, //可视化的三个表格单元格
          mid: null, //猜测的数字范围
          high: null,
        };
        //查询这些元素中每个元素的id
        for(var id in ui) ui[id] = document.getElementById(id);
        //给input字段定义一个事件处理程序函数
        ui.input.onchange = handleGuess;
        //生成一个随机的数字并初始化游戏状态
        state = {
          n: Math.floor(99 * Math.random())+1, //整数: 0 < n <100
          low: 0, //可猜数字范围下限
          high: 100, //可猜数字范围上限
          guessnum: 0, //猜测的次数
          guess: undefined //最后一次猜测
        };
        //修改文档内容来显示该初始状态
        display(state);
        if (playagain === true)save(state);
      }
      function save(state) {
        if (!history.pushState) return; //如果pushState()方法没有定义,则什么也不做

        //将一个保存的状态和url关联起来
        var url = "#guess" + state.guessnum;

        history.pushState(state, //要保存的状态对象
        "", //状态标题:当前浏览器会忽视它
        url); //状态URL:对书签是没有用的
      }
      //这是onpopstate的事件处理程序,用于恢复历史状态
      function popState(event) {
        if (event.state) {
          //如果事件有一个状态对象,则恢复该状态
          state = event.state; //恢复历史状态
          display(state); //显示恢复的状态
        }else{
          history.replaceState(state, "", "#guess" + state.guessnum);
        }
      };
      //每次猜测一个数字的时候,都会调用此事件处理程序
      //此处理程序用于更新游戏的状态、保存游戏状态并显示游戏状态
      function handleGuess() {
        //从input字段中获取用户猜测的数字
        var g = parseInt(this.value);
        //如果该值是限定范围中的一个数字
        if ((g > state.low) && (g < state.high)) {
          //对应的更新状态
          if (g < state.n) state.low =g;
          else if (g > state.n) state.high = g;
          state.guess = g;
          state.guessnum++;
          //在浏览器历史记录中保存新的状态
          save(state);
          //根据用户猜测情况来修改文档
          display(state);
        }else{
          //无效的猜测:不保存状态
          alert("请输入大于" + state.low + "和小于" + state.high);
        }
      }
      //修改文档来显示游戏当前状态
      function display(state) {
        //显示文档的导航和标题
        ui.heading.innerHTML = document.title ="我在想一个" + state.low + "到" + state.high + "之间的数字!";

        //使用一个表格来显示数字的取值范围
        ui.low.style.width = state.low + "%";
        ui.mid.style.width = (state.high-state.low) + "%";
        ui.high.style.width = (100-state.high) + "%";

        //确保input字段是可见的、空的并且是聚焦的
        ui.input.style.visibility = "visible";
        ui.input.value = "";
        ui.input.focus();

        //根据用户最近猜测,设置提示
        if (state.guess === undefined)
          ui.prompt.innerHTML = "输入你的猜测:";
        else if (state.guess < state.n)
          ui.prompt.innerHTML = state.guess + "低了,再猜一次:";
        else if (state.guess > state.n)
          ui.prompt.innerHTML = state.guess + "高了,再猜一次:";
        else {
          //当猜对了的时候,就隐藏input字段并显示“再玩一次”按钮
          ui.input.style.visibility = "hidden";
          ui.heading.innerHTML = document.title = state.guess + "正确!";
          ui.prompt.innerHTML = "你赢了 <button onclick='newgame(true)'>再玩一次</button>";
        }
      }
    </script>
    <style>
      #prompt { font-size: 16pt;}
      table { width: 90%; margin:10px; margin-left:5%;}
      #low, #high { background-color:lightgray; height:1em; }
      #mid { background-color:green;}
    </style>
  </head>
  <body>
    <h1 id="heading">我在想一个数字...</h1>
    <table>
      <tr>
        <td id="low"></td>
        <td id="mid"></td>
        <td id="high"></td>
      </tr>
    </table>
    <label id="prompt"></label>
    <input id="input" type="text">
  </body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 猜数字  # js猜数字小游戏的简单实现代码  # JS实现网页端猜数字小游戏  # JavaScript实现猜数字游戏  # JS猜数字游戏实例讲解  # 基于JavaScript实现猜数字游戏代码实例  # 纯JavaScript实现猜数字游戏  # 用js实现猜数字小游戏  # JavaScript实现猜数字小功能  # 文档  # 我在  # 历史记录  # 这是  # 几次  # 对其  # 看你  # 请输入  # 不做  # 赢了  # 高了  # 中会  # 单元格  # 不保存  # 有一个  # 对了  # 全局变量  # 就开始  # var  # mid 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  网站制作壁纸教程视频,电脑壁纸网站?  如何正确选择百度移动适配建站域名?  Laravel怎么使用artisan命令缓存配置和视图  BootStrap整体框架之基础布局组件  如何用PHP工具快速搭建高效网站?  bing浏览器学术搜索入口_bing学术文献检索地址  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  python中快速进行多个字符替换的方法小结  Laravel如何使用查询构建器?(Query Builder高级用法)  EditPlus中的正则表达式 实战(4)  实例解析Array和String方法  原生JS实现图片轮播切换效果  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Android自定义控件实现温度旋转按钮效果  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  Laravel怎么判断请求类型_Laravel Request isMethod用法  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  JS中对数组元素进行增删改移的方法总结  Bootstrap整体框架之JavaScript插件架构  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  香港服务器建站指南:免备案优势与SEO优化技巧全解析  JS实现鼠标移上去显示图片或微信二维码  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Laravel如何发送系统通知?(Notification渠道示例)  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何在Windows 2008云服务器安全搭建网站?  phpredis提高消息队列的实时性方法(推荐)  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何在腾讯云服务器快速搭建个人网站?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel如何使用Vite进行前端资源打包?(配置示例)  如何快速辨别茅台真假?关键步骤解析  如何在万网主机上快速搭建网站?  如何为不同团队 ID 动态生成多个独立按钮  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  网站页面设计需要考虑到这些问题  昵图网官网入口 昵图网素材平台官方入口  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  iOS验证手机号的正则表达式  C++时间戳转换成日期时间的步骤和示例代码  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何在 Pandas 中基于一列条件计算另一列的分组均值