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 相关文章推荐
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
Mar 06 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
jQuery使用ajaxSubmit()提交表单示例
Apr 04 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
Sep 21 Javascript
Javascript使用post方法提交数据实例
Aug 03 Javascript
coffeescript使用的方式汇总
Aug 05 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
Nov 30 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
Jan 27 jQuery
详解javascript void(0)
Jul 13 Javascript
JavaScript仿京东轮播图效果
Feb 25 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
Python 学习笔记
2008/12/27 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
python的launcher用法知识点总结
2020/08/07 Python
《识字五》教学反思
2014/03/01 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
挂靠协议书范本
2014/04/22 职场文书
中英文求职信范文
2015/03/19 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书