热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用JavaScript实现《铁甲无敌奖门人》“开口中”猜数游戏

JavaScript在常人看来都是门出不了厅堂的小语言,仅管它没有明星语言的闪耀,但至少网页的闪耀还是需要它的,同时它是一门很实用的语言,本人平时就喜欢拿它来写点实用工具或应用,本文演示用JavaSc

Javascript在常人看来都是门出不了厅堂的小语言,仅管它没有明星语言的闪耀,但至少网页的闪耀还是需要它的,同时它是一门很实用的语言,本人平时就喜欢拿它来写点实用工具或应用,本文演示用Javascript实现的《铁甲无敌奖门人》“开口中”猜数游戏,以后我还会陆续上传自己写的小东西,都是些工作之余的小作。

《铁甲无敌奖门人》是TVB综艺节目,香港艺人曾志伟就是其中重要的主持人,节目中有众多好玩又刺激的游戏,其中有一个叫“开口中”的猜数游戏正是本文要实现的功能。游戏规则大致是:首先电脑在1到100内选一个数字作为最终答案(这个答案嘉宾一开始是不知道的),然后嘉宾轮流喊1到100以内的数字,每喊一次,如果不是答案,就把范围缩小到嘉宾喊的那个数,直到有人喊中答案为止,最后喊中答案的人要接受玩游戏,如果游戏过关了,不用罚,否则将要受罚。

具体玩法请看视频,TVB综艺节目《铁甲无敌奖门人》32集视频播放地址:
http://www.tudou.com/programs/view/M4_z5KU0UFA/
“开口中”猜数游戏环节从视频的26分钟开始进行。

先看看效果:【查看演示

游戏界面预览

网页HTML及Javascript代码如下,非常简单,都写了注释,感兴趣的就看一下:

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=utf-8"   />
< title > 用Javascript实现《铁甲无敌奖门人》“开口中”猜数游戏 title >
< style  type ="text/css" >
{ margin : 0 ;  padding : 0 }
body 
{ font-size : 12px }
#layout 
{ width : 800px ;  height : 500px ;  text-align : center ;  margin : 25px auto ;  border : 2px solid #999 ;  background : #CCC ;  position : relative }

#numRange 
{ width : 200px ;  font-family : Arial Black ;  font-size : 20px ;  background : #000 ;  color : #FFF ;  position : absolute ;  top : 131px ;  left : 72px }

#currentNum 
{ width : 200px ;  height : 200px ;  font-family : Arial Black ;  font-size : 98px ;  line-height : 200px ;  background : #999 ;  position : absolute ;  top : 159px ;  left : 72px }

#mainBtn 
{ width : 440px ;  position : absolute ;  top : 46px ;  right : 22px }
#mainBtn input 
{ width : 140px ;  height : 30px }

#stateInfo 
{ width : 440px ;  position : absolute ;  top : 91px ;  right : 22px }

#numBtnList 
{ width : 440px ;  position : absolute ;  top : 121px ;  right : 22px }
#numBtnList input 
{ display : block ;  width : 40px ;  height : 30px ;  margin : 2px ;  float : left }

#copyRight 
{ position : absolute ;  left : 10px ;  bottom : 10px }
#copyRight a 
{ color : #000 ;  text-decoration : none ;  display : block ;  padding : 5px 8px }
#copyRight a:hover 
{ background : #999 ;  color : #FFF ;  text-decoration : none }
style >
head >

< body >
< div  id ="layout" >

< div  id ="numRange" >< span  id ="minNum" > 1 span >  →  < span  id ="maxNum" > 100 span > div >

< div  id ="currentNum" > 0 div >

< div  id ="mainBtn" >
< input  id ="startBtn"  onclick ="guessNum.start()"  value ="开始"  title ="开始游戏"  type ="button"   />
< input  id ="helpBtn"  onclick ="guessNum.showHelp()"  value ="提示"  title ="提示答案"  type ="button"   />
< input  onclick ="guessNum.restart()"  value ="重来"  type ="button"   />
div >

< div  id ="stateInfo" > State:等待开始游戏 div >

< div  id ="numBtnList" >
< input  onclick ="guessNum.userInput(1)"  value ="1"  type ="button"   />
< input  onclick ="guessNum.userInput(2)"  value ="2"  type ="button"   />
< input  onclick ="guessNum.userInput(3)"  value ="3"  type ="button"   />
< input  onclick ="guessNum.userInput(4)"  value ="4"  type ="button"   />
< input  onclick ="guessNum.userInput(5)"  value ="5"  type ="button"   />
< input  onclick ="guessNum.userInput(6)"  value ="6"  type ="button"   />
< input  onclick ="guessNum.userInput(7)"  value ="7"  type ="button"   />
< input  onclick ="guessNum.userInput(8)"  value ="8"  type ="button"   />
< input  onclick ="guessNum.userInput(9)"  value ="9"  type ="button"   />
< input  onclick ="guessNum.userInput(10)"  value ="10"  type ="button"   />
< input  onclick ="guessNum.userInput(11)"  value ="11"  type ="button"   />
< input  onclick ="guessNum.userInput(12)"  value ="12"  type ="button"   />
< input  onclick ="guessNum.userInput(13)"  value ="13"  type ="button"   />
< input  onclick ="guessNum.userInput(14)"  value ="14"  type ="button"   />
< input  onclick ="guessNum.userInput(15)"  value ="15"  type ="button"   />
< input  onclick ="guessNum.userInput(16)"  value ="16"  type ="button"   />
< input  onclick ="guessNum.userInput(17)"  value ="17"  type ="button"   />
< input  onclick ="guessNum.userInput(18)"  value ="18"  type ="button"   />
< input  onclick ="guessNum.userInput(19)"  value ="19"  type ="button"   />
< input  onclick ="guessNum.userInput(20)"  value ="20"  type ="button"   />
< input  onclick ="guessNum.userInput(21)"  value ="21"  type ="button"   />
< input  onclick ="guessNum.userInput(22)"  value ="22"  type ="button"   />
< input  onclick ="guessNum.userInput(23)"  value ="23"  type ="button"   />
< input  onclick ="guessNum.userInput(24)"  value ="24"  type ="button"   />
< input  onclick ="guessNum.userInput(25)"  value ="25"  type ="button"   />
< input  onclick ="guessNum.userInput(26)"  value ="26"  type ="button"   />
< input  onclick ="guessNum.userInput(27)"  value ="27"  type ="button"   />
< input  onclick ="guessNum.userInput(28)"  value ="28"  type ="button"   />
< input  onclick ="guessNum.userInput(29)"  value ="29"  type ="button"   />
< input  onclick ="guessNum.userInput(30)"  value ="30"  type ="button"   />
< input  onclick ="guessNum.userInput(31)"  value ="31"  type ="button"   />
< input  onclick ="guessNum.userInput(32)"  value ="32"  type ="button"   />
< input  onclick ="guessNum.userInput(33)"  value ="33"  type ="button"   />
< input  onclick ="guessNum.userInput(34)"  value ="34"  type ="button"   />
< input  onclick ="guessNum.userInput(35)"  value ="35"  type ="button"   />
< input  onclick ="guessNum.userInput(36)"  value ="36"  type ="button"   />
< input  onclick ="guessNum.userInput(37)"  value ="37"  type ="button"   />
< input  onclick ="guessNum.userInput(38)"  value ="38"  type ="button"   />
< input  onclick ="guessNum.userInput(39)"  value ="39"  type ="button"   />
< input  onclick ="guessNum.userInput(40)"  value ="40"  type ="button"   />
< input  onclick ="guessNum.userInput(41)"  value ="41"  type ="button"   />
< input  onclick ="guessNum.userInput(42)"  value ="42"  type ="button"   />
< input  onclick ="guessNum.userInput(43)"  value ="43"  type ="button"   />
< input  onclick ="guessNum.userInput(44)"  value ="44"  type ="button"   />
< input  onclick ="guessNum.userInput(45)"  value ="45"  type ="button"   />
< input  onclick ="guessNum.userInput(46)"  value ="46"  type ="button"   />
< input  onclick ="guessNum.userInput(47)"  value ="47"  type ="button"   />
< input  onclick ="guessNum.userInput(48)"  value ="48"  type ="button"   />
< input  onclick ="guessNum.userInput(49)"  value ="49"  type ="button"   />
< input  onclick ="guessNum.userInput(50)"  value ="50"  type ="button"   />
< input  onclick ="guessNum.userInput(51)"  value ="51"  type ="button"   />
< input  onclick ="guessNum.userInput(52)"  value ="52"  type ="button"   />
< input  onclick ="guessNum.userInput(53)"  value ="53"  type ="button"   />
< input  onclick ="guessNum.userInput(54)"  value ="54"  type ="button"   />
< input  onclick ="guessNum.userInput(55)"  value ="55"  type ="button"   />
< input  onclick ="guessNum.userInput(56)"  value ="56"  type ="button"   />
< input  onclick ="guessNum.userInput(57)"  value ="57"  type ="button"   />
< input  onclick ="guessNum.userInput(58)"  value ="58"  type ="button"   />
< input  onclick ="guessNum.userInput(59)"  value ="59"  type ="button"   />
< input  onclick ="guessNum.userInput(60)"  value ="60"  type ="button"   />
< input  onclick ="guessNum.userInput(61)"  value ="61"  type ="button"   />
< input  onclick ="guessNum.userInput(62)"  value ="62"  type ="button"   />
< input  onclick ="guessNum.userInput(63)"  value ="63"  type ="button"   />
< input  onclick ="guessNum.userInput(64)"  value ="64"  type ="button"   />
< input  onclick ="guessNum.userInput(65)"  value ="65"  type ="button"   />
< input  onclick ="guessNum.userInput(66)"  value ="66"  type ="button"   />
< input  onclick ="guessNum.userInput(67)"  value ="67"  type ="button"   />
< input  onclick ="guessNum.userInput(68)"  value ="68"  type ="button"   />
< input  onclick ="guessNum.userInput(69)"  value ="69"  type ="button"   />
< input  onclick ="guessNum.userInput(70)"  value ="70"  type ="button"   />
< input  onclick ="guessNum.userInput(71)"  value ="71"  type ="button"   />
< input  onclick ="guessNum.userInput(72)"  value ="72"  type ="button"   />
< input  onclick ="guessNum.userInput(73)"  value ="73"  type ="button"   />
< input  onclick ="guessNum.userInput(74)"  value ="74"  type ="button"   />
< input  onclick ="guessNum.userInput(75)"  value ="75"  type ="button"   />
< input  onclick ="guessNum.userInput(76)"  value ="76"  type ="button"   />
< input  onclick ="guessNum.userInput(77)"  value ="77"  type ="button"   />
< input  onclick ="guessNum.userInput(78)"  value ="78"  type ="button"   />
< input  onclick ="guessNum.userInput(79)"  value ="79"  type ="button"   />
< input  onclick ="guessNum.userInput(80)"  value ="80"  type ="button"   />
< input  onclick ="guessNum.userInput(81)"  value ="81"  type ="button"   />
< input  onclick ="guessNum.userInput(82)"  value ="82"  type ="button"   />
< input  onclick ="guessNum.userInput(83)"  value ="83"  type ="button"   />
< input  onclick ="guessNum.userInput(84)"  value ="84"  type ="button"   />
< input  onclick ="guessNum.userInput(85)"  value ="85"  type ="button"   />
< input  onclick ="guessNum.userInput(86)"  value ="86"  type ="button"   />
< input  onclick ="guessNum.userInput(87)"  value ="87"  type ="button"   />
< input  onclick ="guessNum.userInput(88)"  value ="88"  type ="button"   />
< input  onclick ="guessNum.userInput(89)"  value ="89"  type ="button"   />
< input  onclick ="guessNum.userInput(90)"  value ="90"  type ="button"   />
< input  onclick ="guessNum.userInput(91)"  value ="91"  type ="button"   />
< input  onclick ="guessNum.userInput(92)"  value ="92"  type ="button"   />
< input  onclick ="guessNum.userInput(93)"  value ="93"  type ="button"   />
< input  onclick ="guessNum.userInput(94)"  value ="94"  type ="button"   />
< input  onclick ="guessNum.userInput(95)"  value ="95"  type ="button"   />
< input  onclick ="guessNum.userInput(96)"  value ="96"  type ="button"   />
< input  onclick ="guessNum.userInput(97)"  value ="97"  type ="button"   />
< input  onclick ="guessNum.userInput(98)"  value ="98"  type ="button"   />
< input  onclick ="guessNum.userInput(99)"  value ="99"  type ="button"   />
< input  onclick ="guessNum.userInput(100)"  value ="100"  type ="button"   />
div >

< div  id ="copyRight" >< href ="http://blog.csdn.net/webflash"  target ="_blank" > 问道者博客:http://blog.csdn.net/webflash a > div >

div >



< script  type ="text/Javascript" >
function  clsGuessNum()
{
    
var  answer  =   0 // 初始化答案为0,用于作为判断游戏开始与否的依据,因为实际答案不可能是0
     var  currentNum  =   0 ;
    
var  currentState  =   '' ;
    
// 初始化数字范围边界,1和100是首次猜数的最小和最大边界值
     var  minNum  =   1 ;
    
var  maxNum  =   100 ;
    
    
/* *
     * 开始游戏
     
*/
    
this .start  =   function ()
    {
        answer 
=  getRand( 2 99 );  // 生成答案并保存,1~100以内的数字(不包括1和100)
        $( ' stateInfo ' ).innerHTML  =   ' State:等待输入数字 ' ;
        $(
' startBtn ' ).setAttribute( ' disabled ' true );
    }
    
    
/* *
     * 刷新页面重新开始游戏
     
*/
    
this .restart  =   function ()
    {
        window.location.reload();
        
// 处理Firefox浏览器下刷新页面禁用按钮无法自动激活问题
         var  btnList  =  document.getElementsByTagName( ' input ' );
        
for  ( var  i  in  btnList) 
        {
            
try  
            {
                btnList[i].removeAttribute(
' disabled ' );
            } 
            
catch  (e) 
            {
            }
        }
    }
    
    
/* *
     * 提示答案
     
*/
    
this .showHelp  =   function ()
    {
        
// 如果游戏还没有开始,不作提示处理
         if  (answer  !=   0
        {
            
var  btnList  =  document.getElementById( ' numBtnList ' ).getElementsByTagName( ' input ' );
            btnList[answer 
-   1 ].style.color  =   ' red ' ;
            $(
' helpBtn ' ).setAttribute( ' disabled ' true );
        }
        
else  
        {
            alert(
' 请先开始游戏! ' );
        }
    }
    
    
/* *
     * 用户选号处理函数
     * @param {Number} num 用户单次所选号码
     
*/
    
this .userInput  =   function (num)
    {
        
// 如果游戏还没有开始,直接返回,退出处理
         if  (answer  ==   0
        {
            alert(
' 请先开始游戏! ' );
            
return   false ;
        }
        
        currentNum 
=  num;
        
// 猜中答案
         if  (num  ==  answer) 
        {
            minNum 
=  maxNum  =  num;
            currentState 
=   ' 您中奖了:) ' ;
            currentNum 
=   ' '   +  num  +   ' ' ;
        }
        
else  
        {
            
// 选择数字不在正确数值范围内
             if  (num  <=  minNum  ||  num  >=  maxNum) 
            {
                currentState 
=  num  +   ' 不在选择范围 ' ;
            }
            
else  
            {
                
if  (num  >  answer) 
                {
                    minNum 
=  minNum;
                    maxNum 
=  num;
                }
                
else   if  (num  <  answer) 
                {
                    minNum 
=  num;
                    maxNum 
=  maxNum;
                }
                
// 剩下最后一个数,下一个人没得选了
                 if  (maxNum  -  minNum  ==   2
                {
                    currentState 
=   ' 天啊!接下来还有得选吗,剩下那个数不就是答案了? ' ;
                }
                
else  
                {
                    currentState 
=   ' 等待下次输入 ' ;
                }
            }
        }
        updateUI();
    }
    
    
/* *
     * getElementById快捷方式
     * @param {Object} objId DOM对象ID
     * @return {DOM}
     
*/
    
var  $  =   function (objId)
    {
        
return  document.getElementById(objId);
    }
    
    
/* *
     * 更新界面数据与UI
     
*/
    
var  updateUI  =   function ()
    {
        $(
' minNum ' ).innerHTML  =  minNum;
        $(
' maxNum ' ).innerHTML  =  maxNum;
        $(
' currentNum ' ).innerHTML  =  currentNum;
        $(
' stateInfo ' ).innerHTML  =   ' State: '   +  currentState;
        
// 禁用不在选择范围内的数字按钮
         var  btnList  =  document.getElementById( ' numBtnList ' ).getElementsByTagName( ' input ' );
        
for  ( var  i  in  btnList) 
        {
            
if  (i  <=  minNum  -   1   ||  i  >=  maxNum  -   1
            {
                btnList[i].setAttribute(
' disabled ' true );
            }
        }
    }
    
    
/* *
     * 随机获得指定范围的一个整数
     * @param {Number} minNum 最小值
     * @param {Number} maxNum 最大值
     * @return {Number} minNum~maxNum之间的一个随机整数
     
*/
    
var  getRand  =   function (minNum, maxNum)
    {
        
var  a  =  maxNum  -  minNum;
        
var  b  =  Math.random();
        
return  (minNum  +  Math.round(b  *  a));
    }
}

var  guessNum  =   new  clsGuessNum();
script >
body >
html >

推荐阅读
  • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
  • 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。下面是具体的做法:一:跳转到新页面,并且是在新窗口中打开时:复制代码代码如下:fu ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一个从入门到高手的VB.NET源代码,通过学习这些源代码,可以在21天内成为VB.NET高手。文章提供了下载地址,并提醒读者加入作者的QQ群和收藏作者的博客。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 用JavaScript实现的太空人手表
    用JavaScript实现的太空人手表-JS写的太空人手表,没有用canvas、svg。主要用几个大的函数来动态显示时间、天气这些。天气的获取用到了AJAX请求。代码中有详细的注释 ... [详细]
  • Ihavefollowingjsonarraywhichisgeneratedatruntime.Hencethenumberofnamedatapairsvarie ... [详细]
author-avatar
相对论!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有