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 相关文章推荐
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
让IE8浏览器支持function.bind()方法
Oct 16 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
Vue实现点击后文字变色切换方法
Feb 11 Javascript
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
react写一个select组件的实现代码
Apr 03 Javascript
react中Suspense的使用详解
Sep 01 Javascript
原生js拖拽实现图形伸缩效果
Feb 10 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
PHP5 安装方法
2006/10/09 PHP
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Python异常的检测和处理方法
2018/10/26 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
车贷收入证明范本
2014/01/09 职场文书
工作过失检讨书
2014/02/23 职场文书
任命书模板
2014/06/04 职场文书
房屋租赁协议书
2014/10/18 职场文书
看上去很美观后感
2015/06/10 职场文书
基层党建工作简报
2015/07/21 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS