js實(shí)現(xiàn)一個(gè)猜數(shù)字游戲
更新時(shí)間:2017年03月31日 10:46:28 作者:bad丶小
本文主要介紹了js實(shí)現(xiàn)一個(gè)猜數(shù)字游戲的實(shí)例代碼。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
看你需要猜幾次才能猜到那個(gè)正確的數(shù)字!
效果圖:
代碼如下:
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>猜數(shù)字游戲</title> <script type="text/javascript" charset="utf-8"> window.onload = newgame; //頁面載入的時(shí)候就開始一個(gè)新的游戲 window.onpopstate = popState; //處理歷史記錄相關(guān)事件 var state, ui; //全局變量,在newgame()方法中會(huì)對其初始化 function newgame(playagain) { ui = { heading: null, //文檔最上面的<h1>元素 prompt: null, //要求用戶輸入一個(gè)猜測數(shù)字 input: null, //用戶輸入猜測數(shù)字的地方 low: null, //可視化的三個(gè)表格單元格 mid: null, //猜測的數(shù)字范圍 high: null, }; //查詢這些元素中每個(gè)元素的id for(var id in ui) ui[id] = document.getElementById(id); //給input字段定義一個(gè)事件處理程序函數(shù) ui.input.onchange = handleGuess; //生成一個(gè)隨機(jī)的數(shù)字并初始化游戲狀態(tài) state = { n: Math.floor(99 * Math.random())+1, //整數(shù): 0 < n <100 low: 0, //可猜數(shù)字范圍下限 high: 100, //可猜數(shù)字范圍上限 guessnum: 0, //猜測的次數(shù) guess: undefined //最后一次猜測 }; //修改文檔內(nèi)容來顯示該初始狀態(tài) display(state); if (playagain === true)save(state); } function save(state) { if (!history.pushState) return; //如果pushState()方法沒有定義,則什么也不做 //將一個(gè)保存的狀態(tài)和url關(guān)聯(lián)起來 var url = "#guess" + state.guessnum; history.pushState(state, //要保存的狀態(tài)對象 "", //狀態(tài)標(biāo)題:當(dāng)前瀏覽器會(huì)忽視它 url); //狀態(tài)URL:對書簽是沒有用的 } //這是onpopstate的事件處理程序,用于恢復(fù)歷史狀態(tài) function popState(event) { if (event.state) { //如果事件有一個(gè)狀態(tài)對象,則恢復(fù)該狀態(tài) state = event.state; //恢復(fù)歷史狀態(tài) display(state); //顯示恢復(fù)的狀態(tài) }else{ history.replaceState(state, "", "#guess" + state.guessnum); } }; //每次猜測一個(gè)數(shù)字的時(shí)候,都會(huì)調(diào)用此事件處理程序 //此處理程序用于更新游戲的狀態(tài)、保存游戲狀態(tài)并顯示游戲狀態(tài) function handleGuess() { //從input字段中獲取用戶猜測的數(shù)字 var g = parseInt(this.value); //如果該值是限定范圍中的一個(gè)數(shù)字 if ((g > state.low) && (g < state.high)) { //對應(yīng)的更新狀態(tài) if (g < state.n) state.low =g; else if (g > state.n) state.high = g; state.guess = g; state.guessnum++; //在瀏覽器歷史記錄中保存新的狀態(tài) save(state); //根據(jù)用戶猜測情況來修改文檔 display(state); }else{ //無效的猜測:不保存狀態(tài) alert("請輸入大于" + state.low + "和小于" + state.high); } } //修改文檔來顯示游戲當(dāng)前狀態(tài) function display(state) { //顯示文檔的導(dǎo)航和標(biāo)題 ui.heading.innerHTML = document.title ="我在想一個(gè)" + state.low + "到" + state.high + "之間的數(shù)字!"; //使用一個(gè)表格來顯示數(shù)字的取值范圍 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(); //根據(jù)用戶最近猜測,設(shè)置提示 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 { //當(dāng)猜對了的時(shí)候,就隱藏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">我在想一個(gè)數(shù)字...</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>
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)的在線調(diào)色板實(shí)例(附demo源碼下載)
這篇文章主要介紹了JS實(shí)現(xiàn)的在線調(diào)色板,可實(shí)現(xiàn)響應(yīng)鼠標(biāo)點(diǎn)擊動(dòng)態(tài)改變調(diào)色板顏色的功能,涉及JavaScript針對頁面元素屬性的動(dòng)態(tài)操作與計(jì)算技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-03-03JavaScript實(shí)現(xiàn)鼠標(biāo)拖拽調(diào)整div大小
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)鼠標(biāo)拖拽調(diào)整div大小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03JavaScript 程序執(zhí)行順序問題總結(jié)
今天總結(jié)下學(xué)習(xí)和開發(fā)中遇到的JavaScript執(zhí)行順序的問題,今天挖個(gè)坑,以后會(huì)慢慢填,也希望拋磚引玉,能學(xué)到更多的東西。2011-06-06webpack4 SplitChunks實(shí)現(xiàn)代碼分隔詳解
這篇文章主要介紹了webpack4 SplitChunks實(shí)現(xiàn)代碼分隔詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05基于JavaScript實(shí)現(xiàn)圖片裁剪功能
在前端開發(fā)中,當(dāng)遇到圖片或頭像上傳等功能時(shí),有尺寸分辨率限制的話,就需要用到圖片的裁剪功能。本文為大家介紹了JavaScript實(shí)現(xiàn)圖片裁剪功能的示例代碼,希望對大家有所幫助2023-02-02JavaScript圖片上傳并預(yù)覽的完整實(shí)例
上傳是個(gè)老生常談的話題了,多數(shù)情況下各位想必用的是uplodify,webUploader之類的插件,這篇文章主要給大家介紹了關(guān)于JavaScript圖片上傳并預(yù)覽的相關(guān)資料,需要的朋友可以參考下2022-01-01