2019-09-25 11:06:53
围观(4923)
公司团建、同学聚会什么的最喜欢玩一些小游戏了。博主最近遇到了一种小游戏。
玩法
从数字 1 开始,按顺序每人递增数字,并需要报出该数字或者是说“过”,假如到自己时,数字是三的倍数或者七的倍数,再或者尾数是三 或者尾数是七的都需要说“过”,否则需要说出该数字。
详细点说就是,比如到自己时,数字是 9 ,则需要说“过”,因为 9 是 3 的倍数。而下一位玩家的数字是 10,而 10 不是 3 的倍数 也不是 7 的倍数,尾数更不是 3 或者 7,所以只需要说 “10” 。
开发
从现实到使用 JS 开发为小游戏的思路是这样的,写一个 input 输入框,默认的 value 值为 1 ,因为数字是从 1 开始。
有两个按钮,一个是“过”,一个则是“下一个”,给这两个按钮绑定两个不同的事件,当然你也可以绑定为同一个事件,涉及到优化代码的就不说了,主要是先实现功能。
写一个函数,判断数字只要是 3 的倍数、7 的倍数、尾数是 3、尾数是 7 都返回布尔值 true,否则返回 false。
function query(number) { if (number % 3 == 0 || number % 7 == 0) { return true; } var number = number.substr(number.length -1, 1); if(number == 3 || number == 7){ return true; } return false; }
点击“过”按钮时,提取输入框的数字,执行写好的判断函数,返回值是 false 时,说明选择错误,给予提示答案错误。
点击“下一个”按钮时,同样提取输入框的数字并执行判断函数,返回值是 true 时,说明答案错误。
点击按钮并且选择对的答案,设置 setTimeout 计时三秒,如果 setTimeout 的匿名函数执行,说明超时没回答。注意,需要在点击按钮时的函数方法中加入 clearTimeout 取消计时。
最高通关计数可以用 localStorage 存储数据,设置一个变量 i ,选择的答案是对的则 i++ 自增,需要判断一下已经存储通关数是否大于当前计数,如果当前计数大于存储的通关数才覆盖存储。
说到这里,思路及原理已经完成。剩下的就只有敲代码及美化界面。
放上博主写的完整代码:
<!DOCTYPE html> <html> <head> <title>三 七 过 - BBJ不败君</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"> <meta name="viewport" content="initial-scale=1, width=device-width, maximum-scale=1, user-scalable=no"> <style type="text/css"> body{ padding: 0px; margin: 0px; background: #ffc7c7; } #number{ border: none; display: block; width: 200px; height: 200px; text-align: center; font-size: 35px; margin: 0 auto; margin-top: 60px; background: #fda6a6; color: #fff; } #skip{ display: block; width: 150px; margin: 0 auto; margin-top: 60px; border: none; padding: 10px; color: #fff; background: #fb7777; } #next{ display: block; width: 150px; margin: 0 auto; margin-top: 15px; border: none; padding: 10px; color: #fff; background: #fb7777; } #account{ font-size: 13px; color: #333; text-align: center; position: absolute; bottom: 0px; left: 0px; right: 0px; } #start{ width: 100%; height: 100%; position: fixed; top: 0px; bottom: 0px; background: #ffc7c7; font-size: 13px; color: #333; } #start p{ padding: 10px; } #start p span{ color: red; } #start button{ border: none; background: #fb7777; color: #fff; padding: 20px; display: block; margin: 0 auto; width: 150px; margin-top: 100px; } #re_start{ width: 100%; height: 100%; position: fixed; top: 0px; bottom: 0px; background: #ffc7c7; font-size: 13px; color: #333; z-index: 999; display: none; } #re_start p{ padding: 10px; text-align: center; margin-top: 70%; } #re_start button{ border: none; background: #fb7777; color: #fff; padding: 20px; display: block; margin: 0 auto; width: 150px; margin-top: 50px; } </style> </head> <body> <input type="number" id="number" value="1" disabled="disabled"> <button id="skip">过</button> <button id="next">下 一 个</button> <p id="account"></p> <div id="start"> <p> 玩法: <br><br> 系统会从 1 开始按顺序给出数字,如果该数字是 <br><br> <span>( 3 或 7 的倍数 )</span> 或者是 <span>( 尾数是 3 或 7 )</span> <br><br> 则需要 点击 “过” 否则 需要点击 “下一个” <br><br> 点错则失败。 <br><br> <span>注意:只有三秒钟考虑时间,超时也为失败。</span> </p> <button id="start_btn">开始</button> </div> <div id="re_start"> <p>很遗憾,您输了</p> <button id="re_start_btn">重新开始</button> </div> <script type="text/javascript"> onload = function(){ var skip = document.getElementById("skip"); var next = document.getElementById("next"); var number = document.getElementById("number"); var start_btn = document.getElementById("start_btn"); var re_start_btn = document.getElementById("re_start_btn"); var account = 0; var time; if (localStorage.account) { document.getElementById("account").innerHTML = '你的最好成绩是连续通过:' + localStorage.account + '关'; } if(localStorage.start){ document.getElementById("start").style.display = 'none'; } next.onclick = function(){ clearTimeout(time); if (query(number.value)) { alert('很遗憾,' + number.value + '是3或7的倍/尾数'); document.getElementById("re_start").style.display = 'block'; }else{ //next number.value = Number(number.value) + 1; account++; if (account > localStorage.account || !localStorage.account) { localStorage.account = account; } time = setTimeout(function(){ alert('很遗憾,超时啦'); document.getElementById("re_start").style.display = 'block'; }, 3000); } } skip.onclick = function(){ clearTimeout(time); if (!query(number.value)) { alert('很遗憾,' + number.value + '不是3或7的倍/尾数'); document.getElementById("re_start").style.display = 'block'; }else{ //next number.value = Number(number.value) + 1; account++; if (account > localStorage.account || !localStorage.account) { localStorage.account = account; } time = setTimeout(function(){ alert('很遗憾,超时啦'); document.getElementById("re_start").style.display = 'block'; }, 3000); } } start_btn.onclick = function(){ document.getElementById("start").style.display = 'none'; localStorage.start = true; } re_start_btn.onclick = function(){ location.reload(); } function query(number) { if (number % 3 == 0 || number % 7 == 0) { return true; } var number = number.substr(number.length -1, 1); if(number == 3 || number == 7){ return true; } return false; } } </script> </body> </html>
代码还可以继续完善优化。
放上一个 DEMO 地址,进入就可以玩:www.bubaijun.com/demo/37.html
本文地址 : bubaijun.com/page.php?id=139
版权声明 : 未经允许禁止转载!
上一篇文章: PHP开发-微信公众号文章采集原理及思路
下一篇文章: TP 或者 Laravel 框架实现无限级分类