欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

原生js实现打字动画游戏

程序员文章站 2023-11-16 09:27:16
这是昨天用原生的js写的打字动画游戏,主要用的间歇定时器,对象,还有math方法,感觉还行,主要看消除字母的时间快慢,但是也有bug,就是字母都是一次性生成的,所以一开始,...

这是昨天用原生的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>

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