当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 原生js实现打字动画游戏

原生js实现打字动画游戏

2019年03月27日  | 移动技术网IT编程  | 我要评论

这是昨天用原生的js写的打字动画游戏,主要用的间歇定时器,对象,还有math方法,感觉还行,主要看消除字母的时间快慢,但是也有bug,就是字母都是一次性生成的,所以一开始,看起来感觉会有种爆炸的感觉,如果能够一次性生成一批,然后分批往下掉就好了,求大神帮忙改改,大家也可以参考参考。

<!doctype html>
<html>
<head lang="en">
 <meta charset="utf-8">
 <title></title>
 <style>
  body,button{
   margin: 0;
   padding: 0;
  }
  body {
   background: #333;
  }
  #game {
   width: 400px;
   margin: 0 auto;
  }
  #start {
   width: 80px;
   height: 40px;
  }
  span {
   margin: 20px;
   color: white;
  }
  .letter {
   position: absolute;
   color: yellow;
   font: bold 30px "arial";
  }
 </style>
 <script>
  window.onload= function () {
   var start = document.getelementbyid("start");
   var scroll = document.getelementbyid("scroll");
   var time = document.getelementbyid("time");
   var g = 1 ;//gravity
   var timenum = 0 ;//时间的计数
   var num = 0 ;//成绩的计数
   var gameover = false ;
   var timeandtime = null;
   var letters = null ;
   //字母放在一个字符串里面,随机选取
   var str = "abcdefghijklmnopqrstuvwxyz";
   //点击开始按钮,字母会自动生成,从顶部,以随机速度落下
   //用户操作:按钮对应字母的按钮,然后字母就会消失
   //用户没有点击到的按钮到达底部以后会回到顶上重新落下;
   //用户清除所有字母后,弹出对话框,显示分数和文字。
   //封装一个对象,里面包含获取事件对象,页面位置,清除冒泡,获取事件目标的兼容性方法
   var eventutil = {
    getevent: function (event) {
     return event || window.event;
    },
    getpagex: function (event) {
     return event.pagex || event.clientx + document.documentelement.scrollleft;
    },
    getpagey: function (event) {
     return event.pagey || event.clienty + document.documentelement.scrolltop;
    },
    stoppropagation: function (event) {
     if (event.stoppropagation) {
      event.stoppropagation();
     } else {
      event.cancelbubble = true;
     }
    },
    gettarget: function (event) {
     return event.target || event.srcelement;
    }
   };
   start.onclick= function () {
    for(var i = 0 ;i<26;i++){
     new letter();
    }
    letters = document.body.children;//将页面中所有的div全部放入一个伪数组中,第一个除外,属于game,因此遍历从1开始
    //在键盘上,按下对应的字母键,字母会立即消失,同时分数会增加,并且在上面重新生成;
    document.onkeydown = function (event) {
     var evt = eventutil.getevent(event);
     var keychar = string.fromcharcode(evt.keycode);//将按下的字母键盘码转换成直接的大写字母
     for(var i = 1 ;i<letters.length;i++){
      if(keychar===letters[i].innerhtml){
       num++;
       scroll.innerhtml = num;
       document.body.removechild(letters[i]);
      }
     }
    }
    timeandtime=setinterval(function () {
     timenum = timenum + 1 ;
     console.log(letters);
     if(letters.length==1){//当伪数组的长度只有一个时,那么游戏就结束
      gameover = true ;
      clearinterval(timeandtime);
      alert("用时"+timenum+"秒,再接再厉!突破10秒!");
     } else {
      time.innerhtml = timenum;
     }
    },1000)
   }
   //封装函数
   function letter(){
    this.x=math.random()*900+100; //设置位置在100-1000之间
    this.y=0;
    this.speedy = math.random()*4+1; //速度随机设置在1-5之间
    this.value = str[parseint(math.random()*25)]; //在26个字母中随机生成一个字母
    var letdiv = document.createelement("div");
    letdiv.classname = "letter";
    letdiv.style.top = this.y+"px";
    letdiv.style.left = this.x+ "px";
    letdiv.innerhtml = this.value;
    document.body.appendchild(letdiv);
    //字母往下掉
    var that = this ;
    this.timer=setinterval(function () {
     //leader = leader + step;
     that.y = that.y + that.speedy;
     if(that.y>=client().height-letdiv.offsetheight){
      that.y = 0;
      that.x = math.random()*900+100;
     }
     if(!gameover){
      letdiv.style.left = that.x + "px";
      letdiv.style.top = that.y + "px";
     } else {
      clearinterval(that.timer);
     }
    },15)
   }
   // 获取可视窗口的宽度和高度窗,兼容性问题
   function client() {
    return {
     width: window.innerwidth || document.documentelement.clientwidth || document.body.clientwidth || 0,
     height: window.innerheight || document.documentelement.clientheight || document.body.clientheight || 0
    };
   }
  }
 </script>
</head>
<body>
<div id="game">
 <button id="start">开始</button>
 <span>得分:<i id="scroll">0</i></span>
 <span>计时:<i id="time">0</i></span>
</div>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持移动技术网!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网