原生js實(shí)現(xiàn)打字動畫游戲
更新時(shí)間:2017年02月04日 11:24:33 作者:Atom_L
本文主要分享了原生js實(shí)現(xiàn)打字動畫游戲的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
這是昨天用原生的js寫的打字動畫游戲,主要用的間歇定時(shí)器,對象,還有Math方法,感覺還行,主要看消除字母的時(shí)間快慢,但是也有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 ;//時(shí)間的計(jì)數(shù) var num = 0 ;//成績的計(jì)數(shù) var gameover = false ; var timeandtime = null; var letters = null ; //字母放在一個(gè)字符串里面,隨機(jī)選取 var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //點(diǎn)擊開始按鈕,字母會自動生成,從頂部,以隨機(jī)速度落下 //用戶操作:按鈕對應(yīng)字母的按鈕,然后字母就會消失 //用戶沒有點(diǎn)擊到的按鈕到達(dá)底部以后會回到頂上重新落下; //用戶清除所有字母后,彈出對話框,顯示分?jǐn)?shù)和文字。 //封裝一個(gè)對象,里面包含獲取事件對象,頁面位置,清除冒泡,獲取事件目標(biāo)的兼容性方法 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全部放入一個(gè)偽數(shù)組中,第一個(gè)除外,屬于game,因此遍歷從1開始 //在鍵盤上,按下對應(yīng)的字母鍵,字母會立即消失,同時(shí)分?jǐn)?shù)會增加,并且在上面重新生成; document.onkeydown = function (event) { var evt = eventUtil.getEvent(event); var keychar = String.fromCharCode(evt.keyCode);//將按下的字母鍵盤碼轉(zhuǎn)換成直接的大寫字母 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){//當(dāng)偽數(shù)組的長度只有一個(gè)時(shí),那么游戲就結(jié)束 gameover = true ; clearInterval(timeandtime); alert("用時(shí)"+timenum+"秒,再接再厲!突破10秒!"); } else { time.innerHTML = timenum; } },1000) } //封裝函數(shù) function letter(){ this.x=Math.random()*900+100; //設(shè)置位置在100-1000之間 this.y=0; this.speedY = Math.random()*4+1; //速度隨機(jī)設(shè)置在1-5之間 this.value = str[parseInt(Math.random()*25)]; //在26個(gè)字母中隨機(jī)生成一個(gè)字母 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>計(jì)時(shí):<i id="time">0</i></span> </div> </body> </html>
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
javaScript實(shí)現(xiàn)網(wǎng)頁版的彈球游戲
這篇文章主要為大家詳細(xì)介紹了javaScript實(shí)現(xiàn)網(wǎng)頁版的彈球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07微信小程序自定義菜單切換欄tabbar組件代碼實(shí)例
這篇文章主要介紹了微信小程序自定義菜單切換欄tabbar組件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12JavaScript類的繼承多種實(shí)現(xiàn)方法
這篇文章主要介紹了JavaScript類的繼承多種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Javascript實(shí)現(xiàn)蘋果懸浮虛擬按鈕
本文給大家分享的是使用javascript實(shí)現(xiàn)仿制蘋果的懸浮虛擬按鈕的代碼,非常的簡單,給大家一個(gè)思路,大家可以根據(jù)自己的情況自由擴(kuò)展。2016-04-04