js实现一个猜数字游戏


Posted in Javascript onMarch 31, 2017

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

效果图:

js实现一个猜数字游戏

代码如下:

<!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>

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

Javascript 相关文章推荐
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
关于js遍历表格的实例
Jul 10 Javascript
jQuery之选项卡的简单实现
Feb 28 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
Dec 31 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
Jan 06 Javascript
Angular2库初探
Mar 01 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
Dec 12 Javascript
JS 实现分页打印功能
May 16 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
Element Input输入框的使用方法
Jul 26 Javascript
让Vue响应Map或Set的变化操作
Nov 11 Javascript
微信小程序页面间通信的5种方式
Mar 31 #Javascript
ES6新特性之Symbol类型用法分析
Mar 31 #Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 #Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 #Javascript
ES6新特性之Object的变化分析
Mar 31 #Javascript
ES6新数据结构Set与WeakSet用法分析
Mar 31 #Javascript
ES6新数据结构Map功能与用法示例
Mar 31 #Javascript
You might like
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JavaScript运算符小结
2015/06/03 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
js实现3D旋转相册
2020/08/02 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
分享python数据统计的一些小技巧
2016/07/21 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
python中uuid模块实例浅析
2020/12/29 Python
美国家具网站:Cymax
2016/09/17 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
客房部经理岗位职责
2015/02/02 职场文书
公司宣传语大全
2015/07/13 职场文书
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers