JavaScript打字小游戏
上半年自学了JavaScript,然后就做了个打字小游戏玩玩。
功能模块: 程序设计:
1.可选择游戏时间,显示倒计时 1.定义全局变量
2.可选择英文字母出现个数 2.控制游戏时间函数
3.统计得分 3.动画效果
4.菜单选项 4.设定字母图片出现的时间
5.判断函数
6.游戏菜单
7.游戏时间选项
8.显示游戏时间
9.游戏难度选项
10.游戏得分
先上效果图:(PS:美工是硬伤)
主要代码设计:
1 //-------全局变量------- 2 var data={ 3 "10":["<img src='images/A.gif'/>"],"11":["<img src='images/B.gif'/>"],"12":["<img src='images/C.gif'/>"],"13":["<img src='images/D.gif'/>"], 4 "14":["<img src='images/E.gif'/>"],"15":["<img src='images/F.gif'/>"],"16":["<img src='images/G.gif'/>"],"17":["<img src='images/H.gif'/>"], 5 "18":["<img src='images/I.gif'/>"],"19":["<img src='images/J.gif'/>"],"20":["<img src='images/K.gif'/>"],"21":["<img src='images/L.gif'/>"], 6 "22":["<img src='images/M.gif'/>"],"23":["<img src='images/N.gif'/>"],"24":["<img src='images/O.gif'/>"],"25":["<img src='images/P.gif'/>"], 7 "26":["<img src='images/Q.gif'/>"],"27":["<img src='images/R.gif'/>"],"28":["<img src='images/S.gif'/>"],"29":["<img src='images/T.gif'/>"], 8 "30":["<img src='images/U.gif'/>"],"31":["<img src='images/V.gif'/>"],"32":["<img src='images/W.gif'/>"],"33":["<img src='images/X.gif'/>"], 9 "34":["<img src='images/Y.gif'/>"],"35":["<img src='images/Z.gif'/>"] 10 }; 11 var datas=new Array();//随机出现的 class样式以数组中偶数存储,图片以数组中奇数存储 12 var now=new Date(); 13 var Image; //随机出现图片 14 var Divs;//随机出现层 15 var count=0;//积分系统 16 var key;//键盘的值 17 var amounts=1;//出现字母图片的个数 18 var gametime=30;//控制游戏的时间 19 var gametimes;//时间为0 20 var gametimess=30;//显示时钟变量 21 var time1;//setInterval变量 22 var time2=5000;//设定setInterval的时间 23 var time3; 24 var tab;//用来记录,传递tabindex焦点位置的值 25 26 //--------这样写为了兼容FF浏览器------- 27 var plug = { 28 addEvent:function(o,e,f){ 29 if(o.addEventListener){ 30 o.addEventListener(e,f,false); 31 } 32 else if(o.attachEvent){ 33 o.attachEvent("on"+e,f); 34 } 35 } 36 } 37 plug.addEvent(window,"load",function(){Focus()});//兼容FF浏览器 38 39 40 //------1.控制游戏时间函数-------- 41 function Gametime(){ 42 for(gametimes=gametime;gametimes>=0;gametimes--) { 43 window.setTimeout('Show(' + gametimes + ')',(gametime-gametimes+2) * 1000); 44 } 45 } 46 function Show(gametimes){ 47 if(gametimes==0){ 48 clearInterval(time1);//停止游戏 49 alert("游戏结束!你的得分为:"+count); 50 $("#main").empty();//清除main中的div 51 $(".gameapply").empty(); 52 $("#select1").empty(); 53 $("#select2").empty(); 54 count=0;//得分清空为0 55 Score();//让分数框显示为0 56 Focus();//重新生成菜单选项 57 } 58 } 59 60 61 //---------2.动画效果--------- 62 function fun(){ 63 datas.length=0; 64 for(var i=0;i<amounts;i++){ 65 Image=parseInt(Math.random() * 26)+10;//随机出现字母图片 66 datas.push(Image);//图片以数组中偶数存储,从零开始 67 Divs=parseInt(Math.random() * 8)+1;//随机出现层的class样式即层的不同位置 68 datas.push(Divs);//样式以数组中奇数存储 69 var time=parseInt(Math.random() * 2000)+3000;//完成动画的时间 70 if(time<5000){ 71 var $divs=$("<div class='divPop"+Divs+"'>"+data[Image]+"</div>"); 72 $("#main").append($divs); 73 //-----JQ动画函数---- 74 $(".divPop"+Divs).animate( 75 {"top":$(window).height() - $(".divPop"+Divs).height() - $(".divPop"+Divs).position().top},time,function(){$("#main").empty()}) 76 } 77 } 78 } 79 80 81 //--------3.设定字母图片出现的时间------ 82 function sets(){ 83 time1 = setInterval(fun,time2); 84 } 85 86 87 //---------4.绑定键盘--------- 88 //---------兼容FF浏览器--------- 89 document.onkeydown = function keydown(e){ 90 e = e||window.event; 91 var key = e.charCode||e.keyCode 92 select(key) 93 } 94 95 96 //---------5.判断函数--------- 97 function select(key){ 98 if(key==13){ 99 switch(tab){100 case 0:Gametime();Gametimeselect();time3=setInterval(countdown,1000);sets();$("#select").hide(2000);break;//开始游戏101 case 1:Gametime();Gametimeselect();time3=setInterval(countdown,1000);sets();$("#select").hide(2000);break;//开始游戏102 case 2:alert("可以在左侧设置游戏选项");break;103 case 3:window.opener=null;window.open('','_self');window.close();break;//退出游戏104 case 4:window.opener=null;window.open('','_self');window.close();break;//退出游戏105 }106 }107 for(var j=0;j<datas.length;j=j+2){//为了让data1里面样式和图片的值不重复(即奇数跟偶数的不可能重复,m的值或者k的值要相差一定的值)108 if(key==datas[j]+55){ 109 $(".divPop"+datas[j+1]).hide();//key值相等,隐藏该层110 delete datas[j]; //为了避免有重复的字母,所以数组里面每遍历到一个(key==datas[j]+55)都要删除这个值111 count+=10;112 Score();113 break;114 }115 }116 }117 //---------6.游戏菜单------- 118 function Focus(){119 //---------初始化游戏界面--------120 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>");121 $(".gameapply").append($selects); 122 for(var i=30;i<=300;i=i+30){123 $("#select1").append('<option>' + i+ '</option>')124 }125 for(var j=1;j<=9;j++){126 $("#select2").append('<option>' + j+ '</option>')127 }128 //---------开始时取得第一个input的焦点--------129 $(".inputs:first").trigger("focus").addClass("input1");130 tab=1;//因为第一个焦点是没法输入Enter,所以要调用键盘输入事件131 var tabIndex=1;132 133 //----------获取tr行数,input个数--------134 $("#tables").find("tr").each(function(r) {135 $(this).find("input").attr("tabindex", r+1);//tabindex为焦点位置的值,赋初值为1,遍历为1-2-3-4136 });137 //---------响应input的键盘上下操作138 $("#tables .inputs").bind("keydown", function(e){139 tabIndex = parseInt($(this).attr("tabindex"));//取得当前tabindex焦点的值140 switch(e.which){141 case 38://向上142 tabIndex-=1;143 tab=tabIndex;144 break;145 case 40://向下146 tabIndex+=1;147 tab=tabIndex;148 break;149 default:150 return;151 }152 //--------判断tabIndex焦点的值153 if (tabIndex > 0 && tabIndex < 4) {154 $(".inputs[tabindex=" + tabIndex + "]").focus().addClass("input1");//当前input获取焦点155 for(var i=0;i<=4;i++)156 {157 if(i==tabIndex){158 break;159 }160 else{161 $(this).removeClass("input1");162 }163 }164 keydown();165 return false;166 }167 return true;168 });169 }170 171 //--------7.游戏时间选项---------172 function Gametimeselect(){173 var option=document.getElementById("select1");174 for(var i=0;i<option.length;++i){ 175 if(option[i].selected) { 176 gametime=option.options[i].text;177 gametimess=gametime;178 }179 }180 }181 182 //-----8.显示游戏时间-------183 function countdown(){184 var timeshows=document.getElementById("timeshow");185 if(timeshows){//如果网页速度很慢的话,可能定时器运行的时候控件还没有加载186 if(gametimess<0){187 clearInterval(time3);//停止计时器188 }189 else{190 timeshows.value=gametimess;191 gametimess--;192 }193 }194 }195 196 197 //--------9.游戏难度选项---------198 function Gameselectamount(){199 var option=document.getElementById("select2");200 for(var i=0;i<option.length;++i){ 201 if(option[i].selected) { 202 amounts=option.options[i].text;203 } 204 }205 }206 207 208 //---------10.游戏得分-----------209 function Score(){210 var sum=document.getElementById("sum");211 sum.value=count;212 if(count==0){ //初始化文本框分数为0213 sum.value=count;214 }215 }
总结:由于时间隔得比较久,代码方面没有优化,有个地方做得不是很好,就是字母出现的时间间隔过长,有兴趣的话可以尝试修复。代码仅供参考
源码下载
出处: http://www.cnblogs.com/ForEvErNoME/
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐 或 关注
转载于:https://www.cnblogs.com/ForEvErNoME/archive/2011/12/26/2301818.html
JavaScript打字小游戏相关推荐
- 用javascript编写的打字小游戏
最近在学ExtJs,看了蔡世友老师的视频课程,在第十课中留了一个小作业,就是用javascript写一个打字小游戏,于是按照前几课所讲的知识自己编写了一个. 一.需求:网页上在随机位置会出现字母,字母 ...
- JavaScript-事件和事件对象、实现键盘打字小游戏
JavaScript-事件和事件对象 一.事件介绍 事件一般是用于浏览器和用户操作进行交互.最早是IE和Netscape Navigator中出现,作为分担服务器端运算负载的一种手段.直到几乎所有的浏 ...
- 原生JS实现一个简单的打字小游戏
原生JS实现一个简单的打字小游戏 利用javascript制作一个简单的打字小游戏 之前写了一个贪吃蛇小游戏好像反响不错 今天我来写一个比贪吃蛇更low更简单的打字小游戏 打字小游戏原理 接下来咋们直 ...
- html+css+javascript实现小游戏2048(详解,附源代码)
html+css+javascript实现小游戏2048(详解,附源代码) 1.上下左右的移动原理相同,这里只详细说明向上移动的方法 2.这里的上下左右由wasd四个键控制 3-小方块空的意思就是没数 ...
- Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇)
Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇) 代码实现 窗口类 小车类 玩家类 电脑类 赛道类 小树类 打字类 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) ...
- JAVA实现打字小游戏
目录 一.效果 二.教程 三.代码 一.效果 首先我们先看效果,左上角的分数是用来记录我们打对了多少字母.字母是从上面开始往下落.每打对一个字母,分数增加,增加到一定分数后,字母下落的速度也会增加.( ...
- java实验2总结心得,打字小游戏JAVA实验总结及心得体会
篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...
- Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇)
Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇) 资源下载 完整代码 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) Python 打字小游戏开发,来体验不一样的 ...
- Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇)
Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) 前言 游戏素材准备 游戏项目结构 项目里面的类说明 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇) Python ...
最新文章
- js和java中URI的编码和解码
- List 的add()与addAll()的区别
- 解决iIntelliJ IDEA导入jstl后,jsp中taglib指令无法自动添加uri地址
- 异步I/O 设备内核对象,事件内核对象,可提醒I/O 接收I/O通知
- 使用JAXB将XML Schema绑定到Java类
- 图片的base64编码实现以及网页上显示
- linux python安装教程_Linux系统如何安装Python?新手教程
- 云漫圈 | AR VR傻傻分不清楚。。。
- 三层加过的注释java_spring框架中三层架构相关的注解
- keepalived安装实录
- 步步为营:Asp.Net序列化与反序列化
- 火星人谚语系列之三:正确的答案一定简单
- 少儿编程、软硬编程课件、创意Scratch的项目小游戏,可单独上一节课
- 如何下载windows自带的锁屏壁纸
- Java一些零散知识点--9.19更
- 自媒体爆文标题怎么写?6种实用小技巧分享!
- linux中设置ssh登录时显示的banner
- windows打印机服务开启方法
- 斑马zpl指令二维码换行
- java算法之因式分解
热门文章
- e5 2680 v性能服务器,E5 V2处理器性能全面测试_浪潮服务器_服务器评测与技术-中关村在线...
- 用nginx搭建http透明代理
- 翻边活动法兰_百度百科
- 卡拉兹(Callatz)猜想(c/c++)
- 全球首个AI模型开发管理标准正式发布,九章云极DataCanvas公司助力AI工程化新发展
- 国内AI众包竞赛加速发展,云计算成助推器
- Informatica的FTP功能如何使用|infa怎么实现ftp文件自动上传
- 英语总结系列(二十):八月有些小惊喜
- 2.特定领域知识图谱融合方案:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】
- 程序员下班以后做什么副业合适?