JavaScript打字小游戏代码


Posted in Javascript onDecember 26, 2011

功能模块:

程序设计:

 1.可选择游戏时间,显示倒计时

 1.定义全局变量

 2.可选择英文字母出现个数

 2.控制游戏时间函数

 3.统计得分

3.动画效果

 4.菜单选项

4.设定字母图片出现的时间

5.判断函数

6.游戏菜单

7.游戏时间选项

8.显示游戏时间

9.游戏难度选项

10.游戏得分


先上效果图:(PS:美工是硬伤)
JavaScript打字小游戏代码
主要代码设计:

 
//-------全局变量------- 
var data={ 
"10":["<img src='images/A.gif'/>"],"11":["<img src='images/B.gif'/>"],"12":["<img src='images/C.gif'/>"],"13":["<img src='images/D.gif'/>"], 
"14":["<img src='images/E.gif'/>"],"15":["<img src='images/F.gif'/>"],"16":["<img src='images/G.gif'/>"],"17":["<img src='images/H.gif'/>"], 
"18":["<img src='images/I.gif'/>"],"19":["<img src='images/J.gif'/>"],"20":["<img src='images/K.gif'/>"],"21":["<img src='images/L.gif'/>"], 
"22":["<img src='images/M.gif'/>"],"23":["<img src='images/N.gif'/>"],"24":["<img src='images/O.gif'/>"],"25":["<img src='images/P.gif'/>"], 
"26":["<img src='images/Q.gif'/>"],"27":["<img src='images/R.gif'/>"],"28":["<img src='images/S.gif'/>"],"29":["<img src='images/T.gif'/>"], 
"30":["<img src='images/U.gif'/>"],"31":["<img src='images/V.gif'/>"],"32":["<img src='images/W.gif'/>"],"33":["<img src='images/X.gif'/>"], 
"34":["<img src='images/Y.gif'/>"],"35":["<img src='images/Z.gif'/>"] 
}; 
var datas=new Array();//随机出现的 class样式以数组中偶数存储,图片以数组中奇数存储 
var now=new Date(); 
var Image; //随机出现图片 
var Divs;//随机出现层 
var count=0;//积分系统 
var key;//键盘的值 
var amounts=1;//出现字母图片的个数 
var gametime=30;//控制游戏的时间 
var gametimes;//时间为0 
var gametimess=30;//显示时钟变量 
var time1;//setInterval变量 
var time2=5000;//设定setInterval的时间 
var time3; 
var tab;//用来记录,传递tabindex焦点位置的值 
//--------这样写为了兼容FF浏览器------- 
var plug = { 
addEvent:function(o,e,f){ 
if(o.addEventListener){ 
o.addEventListener(e,f,false); 
} 
else if(o.attachEvent){ 
o.attachEvent("on"+e,f); 
} 
} 
} 
plug.addEvent(window,"load",function(){Focus()});//兼容FF浏览器 
//------1.控制游戏时间函数-------- 
function Gametime(){ 
for(gametimes=gametime;gametimes>=0;gametimes--) { 
window.setTimeout('Show(' + gametimes + ')',(gametime-gametimes+2) * 1000); 
} 
} 
function Show(gametimes){ 
if(gametimes==0){ 
clearInterval(time1);//停止游戏 
alert("游戏结束!你的得分为:"+count); 
$("#main").empty();//清除main中的div 
$(".gameapply").empty(); 
$("#select1").empty(); 
$("#select2").empty(); 
count=0;//得分清空为0 
Score();//让分数框显示为0 
Focus();//重新生成菜单选项 
} 
} 
//---------2.动画效果--------- 
function fun(){ 
datas.length=0; 
for(var i=0;i<amounts;i++){ 
Image=parseInt(Math.random() * 26)+10;//随机出现字母图片 
datas.push(Image);//图片以数组中偶数存储,从零开始 
Divs=parseInt(Math.random() * 8)+1;//随机出现层的class样式即层的不同位置 
datas.push(Divs);//样式以数组中奇数存储 
var time=parseInt(Math.random() * 2000)+3000;//完成动画的时间 
if(time<5000){ 
var $divs=$("<div class='divPop"+Divs+"'>"+data[Image]+"</div>"); 
$("#main").append($divs); 
//-----JQ动画函数---- 
$(".divPop"+Divs).animate( 
{"top":$(window).height() - $(".divPop"+Divs).height() - $(".divPop"+Divs).position().top},time,function(){$("#main").empty()}) 
} 
} 
} 
//--------3.设定字母图片出现的时间------ 
function sets(){ 
time1 = setInterval(fun,time2); 
} 
//---------4.绑定键盘--------- 
//---------兼容FF浏览器--------- 
document.onkeydown = function keydown(e){ 
e = e||window.event; 
var key = e.charCode||e.keyCode 
select(key) 
} 
//---------5.判断函数--------- 
function select(key){ 
if(key==13){ 
switch(tab){ 
case 0:Gametime();Gametimeselect();time3=setInterval(countdown,1000);sets();$("#select").hide(2000);break;//开始游戏 
case 1:Gametime();Gametimeselect();time3=setInterval(countdown,1000);sets();$("#select").hide(2000);break;//开始游戏 
case 2:alert("可以在左侧设置游戏选项");break; 
case 3:window.opener=null;window.open('','_self');window.close();break;//退出游戏 
case 4:window.opener=null;window.open('','_self');window.close();break;//退出游戏 
} 
} 
for(var j=0;j<datas.length;j=j+2){//为了让data1里面样式和图片的值不重复(即奇数跟偶数的不可能重复,m的值或者k的值要相差一定的值) 
if(key==datas[j]+55){ 
$(".divPop"+datas[j+1]).hide();//key值相等,隐藏该层 
delete datas[j]; //为了避免有重复的字母,所以数组里面每遍历到一个(key==datas[j]+55)都要删除这个值 
count+=10; 
Score(); 
break; 
} 
} 
} 
//---------6.游戏菜单------- 
function Focus(){ 
//---------初始化游戏界面-------- 
var $selects=$("<div id='select'><table id=\"tables\"><tr><td><input class=\"inputs\" type=\"text\"value=\"游戏开始\"/></td></tr><tr><td><input class=\"inputs\" type=\"text\" value=\"游戏选项\"/></td></tr><tr><td><input class=\"inputs\" type=\"text\" value=\"退出游戏\"/></td></tr></table></div>"); 
$(".gameapply").append($selects); 
for(var i=30;i<=300;i=i+30){ 
$("#select1").append('<option>' + i+ '</option>') 
} 
for(var j=1;j<=9;j++){ 
$("#select2").append('<option>' + j+ '</option>') 
} 
//---------开始时取得第一个input的焦点-------- 
$(".inputs:first").trigger("focus").addClass("input1"); 
tab=1;//因为第一个焦点是没法输入Enter,所以要调用键盘输入事件 
var tabIndex=1; 
//----------获取tr行数,input个数-------- 
$("#tables").find("tr").each(function(r) { 
$(this).find("input").attr("tabindex", r+1);//tabindex为焦点位置的值,赋初值为1,遍历为1-2-3-4 
}); 
//---------响应input的键盘上下操作 
$("#tables .inputs").bind("keydown", function(e){ 
tabIndex = parseInt($(this).attr("tabindex"));//取得当前tabindex焦点的值 
switch(e.which){ 
case 38://向上 
tabIndex-=1; 
tab=tabIndex; 
break; 
case 40://向下 
tabIndex+=1; 
tab=tabIndex; 
break; 
default: 
return; 
} 
//--------判断tabIndex焦点的值 
if (tabIndex > 0 && tabIndex < 4) { 
$(".inputs[tabindex=" + tabIndex + "]").focus().addClass("input1");//当前input获取焦点 
for(var i=0;i<=4;i++) 
{ 
if(i==tabIndex){ 
break; 
} 
else{ 
$(this).removeClass("input1"); 
} 
} 
keydown(); 
return false; 
} 
return true; 
}); 
} 
//--------7.游戏时间选项--------- 
function Gametimeselect(){ 
var option=document.getElementById("select1"); 
for(var i=0;i<option.length;++i){ 
if(option[i].selected) { 
gametime=option.options[i].text; 
gametimess=gametime; 
} 
} 
} 
//-----8.显示游戏时间------- 
function countdown(){ 
var timeshows=document.getElementById("timeshow"); 
if(timeshows){//如果网页速度很慢的话,可能定时器运行的时候控件还没有加载 
if(gametimess<0){ 
clearInterval(time3);//停止计时器 
} 
else{ 
timeshows.value=gametimess; 
gametimess--; 
} 
} 
} 
//--------9.游戏难度选项--------- 
function Gameselectamount(){ 
var option=document.getElementById("select2"); 
for(var i=0;i<option.length;++i){ 
if(option[i].selected) { 
amounts=option.options[i].text; 
} 
} 
} 
//---------10.游戏得分----------- 
function Score(){ 
var sum=document.getElementById("sum"); 
sum.value=count; 
if(count==0){ //初始化文本框分数为0 
sum.value=count; 
} 
}

总结:由于时间隔得比较久,代码方面没有优化,有个地方做得不是很好,就是字母出现的时间间隔过长,有兴趣的话可以尝试修复。代码仅供参考
在线演示:http://demo.3water.com/js/2011/StarWars/
打包下载: https://3water.com/jiaoben/40902.html
Javascript 相关文章推荐
兼容主流浏览器的JS复制内容到剪贴板
Dec 12 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
Dec 08 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 jQuery
JSON 数据格式详解
Sep 13 Javascript
小程序图片长按识别功能的实现方法
Aug 30 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
Sep 01 Javascript
手动下载Chrome并解决puppeteer无法使用问题
Nov 12 Javascript
jquery实现吸顶导航效果
Jan 08 jQuery
uni-app从安装到卸载的入门教程
May 15 Javascript
js bind 函数 使用闭包保存执行上下文
Dec 26 #Javascript
js 函数调用模式小结
Dec 26 #Javascript
JavaScript 原型继承
Dec 26 #Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 #Javascript
查看源码的工具 学习jQuery源码不错的工具
Dec 26 #Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 #Javascript
非常有用的40款jQuery 插件推荐(系列二)
Dec 25 #Javascript
You might like
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
js简单时间比较的方法
2016/08/02 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
详解Angular 自定义结构指令
2017/06/21 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
地理教师岗位职责
2014/03/16 职场文书
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python
spring boot实现文件上传
2022/08/14 Java/Android