看你需要猜几次才能猜到那个正确的数字!
效果图:
代码如下:
<!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,猜数字
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“js实现一个猜数字游戏”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
2024年11月14日
2024年11月14日
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]