日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

javascript開發實現貪吃蛇游戲

瀏覽:29日期:2023-06-18 14:19:43

貪吃蛇的例子:

在此例子中,利用snake數組的第0個元素和direction對象中的x值和y值做加法,算出蛇的下一個位置。利用間隔函數,不停的修改類名來進行渲染操作,感覺是一個很靈活的例子。

style.css

*{ margin: 0; padding: 0; box-sizing: border-box;}.page{ width: 100vw; height: 100vh; position: absolute; left: 0; top: 0;}body{ font-size: 0.16rem;}.startGame{ /* display: none; */ background: purple; display: flex; justify-content: center; align-items: center;}.startBtn,.reStartBtn{ width:2rem; height: 0.5rem; text-align: center; line-height: 0.5rem; background: deepskyblue; color: #fff;}.endGame{ display: none; /* display:flex; */ flex-direction: column; justify-content: center; align-items: center; background: lightsalmon;}.endGame h1{ margin: 1rem 0; color: #fff;}.gaming{ display: none; background: black; color: #fff; }.gaming .score{ display: flex; justify-content: space-between; height: 0.5rem; align-items: center; width: 100vw; padding: 0 0.25rem;}.gaming .score .pauseBtn{ width: 0.8rem; height: 0.3rem; line-height: 0.3rem; background: #999; text-align: center; }.gaming .mainGame{ /* 15*20 */ width: 3.45rem; height:4.6rem ; background: #555; margin: 0.3rem auto; display: flex; flex-wrap: wrap; border-top: 1px solid #ccc; border-left: 1px solid #ccc; box-sizing: content-box;}.gaming .mainGame .gezi{ width: 0.23rem; height: 0.23rem; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc;}.gaming .mainGame .gezi.snake{ width: 0.23rem; height: 0.23rem; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; background-color: #fff;}.gaming .mainGame .gezi.food{ width: 0.23rem; height: 0.23rem; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; /* background-color: orangered; */}.gaming .mainGame .gezi.food:before{ width: 100%; height: 100%; content: ''; display: block; background:yellow; animation: food 1s alternate infinite ; box-shadow: 0 0 10px #ffffcc;}.gaming .mainGame .gezi.food[data-food=redStar]:before{ background:deeppink;}@keyframes food{ from{ transform: scale(1) rotate(0deg); } to{ transform: scale(0.5) rotate(360deg); }}.gaming .mainGame .gezi.snake:before{ content:'' ; display: block; width: 100%; height: 100%; background: #ccc; animation: snake 0.4s; box-sizing: border-box;}@keyframes snake{ from{ background: #fff; box-shadow:0 0 15px rgba(255,255,255,1); } to{ background: #ccc; box-shadow:0 0 15px rgba(255,255,255,0.5); }}

index.js主要實現了所有的貪吃蛇的頁面的各種操作

var startBtn = document.querySelector('.startBtn')var startPage = document.querySelector('.page.startGame')var gamingPage = document.querySelector('.gaming')var endGamePage = document.querySelector('.endGame')var mainGame = document.querySelector('.mainGame')var numDom = document.querySelector('.score .left .num')var endGameScore = document.querySelector('.endGame .num')var reStartBtn = document.querySelector(’.reStartBtn’);var pauseBtn=document.querySelector('.pauseBtn');var snake = [{x:0,y:1},{x:1,y:1},{x:2,y:1}];var snakeFood = { x:10,y:10}//初始化得分var score = 0;var interId;var ispaused=false;//定義蛇運動的方向//從右向左{x:-1,y:0}//從左向右{x:1,y:0}//從上到下{x:0,y:1}//從下到上{x:0,y:-1}var direction = {x:-1,y:0}startBtn.onclick = function(){ startPage.style.display = 'none' gamingPage.style.display = 'block' gameIng()}function renderGezi(){ for(var i=0;i<20;i++){ for(var j=0;j<15;j++){ var gezi = document.createElement('div'); gezi.className = 'gezi'; gezi.id = ’x’+j+’y’+i; mainGame.appendChild(gezi) } }}renderGezi()//隨機創建蛇,function createSnake(){ var randomX = parseInt(Math.random()*13) var randomY = parseInt(Math.random()*20) snake = []; for(var i= 0;i<3;i++){ snake.push({x:randomX+i,y:randomY}) } }function renderSnake(){ snake.forEach(function(item,i){ var snakeBody = document.querySelector('#x'+item.x+'y'+item.y); snakeBody.className = 'gezi snake'; })}//渲染食物function renderFood(){ var randomX = parseInt(Math.random()*15) var randomY = parseInt(Math.random()*20) var foodDiv = document.querySelector('#x'+randomX+'y'+randomY) if(foodDiv.className == 'gezi snake'){ renderFood() }else{ foodDiv.className = 'gezi food' } }createSnake()renderFood()renderSnake()function gameIng(){ interId = setInterval(function(){ var headerX = snake[0].x + direction.x; var headerY = snake[0].y + direction.y; if(headerX<0){ headerX = 14; } if(headerX>14){ headerX = 0; } if(headerY<0){ headerY = 19; } if(headerY>19){ headerY = 0; } var snakeHeader = {x:headerX,y:headerY}; isSnake(snakeHeader) if(!isFood(snakeHeader)) { //將刪除的蛇,找到相對應的dom,將其class類名修改成正常的gezi var snakeFooter = snake.pop()//返回刪除的對象 var snakeFooterDiv = document.querySelector('#x'+snakeFooter.x+'y'+snakeFooter.y); snakeFooterDiv.className = 'gezi'; } snake.unshift(snakeHeader)//在數組最前面加入 renderSnake() },100)}function isSnake(snakeHeader){ var newHeader = document.querySelector('#x'+snakeHeader.x+'y'+snakeHeader.y) if(newHeader.className == 'gezi snake'){ clearInterval(interId); gamingPage.style.display = 'none' endGamePage.style.display = 'flex' endGameScore.innerHTML = score; return true; }else{ return false; }}function isFood(snakeHeader){ var newHeader = document.querySelector('#x'+snakeHeader.x+'y'+snakeHeader.y) if(newHeader.className == 'gezi food'){ score ++; numDom.innerHTML = score; renderFood() return true; }else{ return false; }}var body = document.bodybody.addEventListener('keydown',function(e){ console.log(e) //方向不能直接顛倒向上時原來不能是向下的。 if(e.key == 'ArrowUp'&&direction.y!=1){ direction = {x:0,y:-1} } if(e.key=='ArrowRight'&&direction.x!=-1){ direction = {x:1,y:0} } if(e.key == 'ArrowDown'&&direction.y!=-1){ direction = {x:0,y:1} } if(e.key=='ArrowLeft'&&direction.x!=1){ direction = {x:-1,y:0} }})ylEvent.init(body);body.addEvent('swiperLeft',function(){ if(direction.x!=1){ direction = {x:-1,y:0} }})body.addEvent('swiperRight',function(){ if(direction.x!=-1){ direction = {x:1,y:0} }})body.addEvent('swiperTop',function(){ if(direction.y!=1){ direction = {x:0,y:-1} }})body.addEvent('swiperBottom',function(){ if(direction.y!=-1){ direction = {x:0,y:1} }})reStartBtn.onclick = function(){ location.reload();}pauseBtn.onclick=function(){ if(ispaused){ ispaused=false; gameIng(); }else{ ispaused=true; clearInterval(interId); }}

js輔助式響應.js

(function(){function xys(){ var userAgent=navigator.userAgent var html=document.querySelector('html'); //userAgent.indexOf('iPhone')通過此方法可以獲取iPhone在字符串中的索引值(開頭位置) //沒有找到返回-1 html.className=''; if((userAgent.indexOf('iPhone'))!=-1){ html.classList.add('iphone'); }else if((userAgent.indexOf('Android'))!=-1) { html.classList.add('android'); }else if((userAgent.indexOf('iPad'))!=-1){ html.classList.add('ipad'); }else{ html.classList.add('pc'); } if(window.innerWidth<640){ html.classList.add(’lt640’); html.classList.add(’lt960’); html.classList.add(’lt1200’); }else if(window.innerWidth<960){ html.classList.add(’lt960’); html.classList.add(’lt1200’); html.classList.add(’gt640’); }else if(window.innerWidth<1200){ html.classList.add(’lt1200’); html.classList.add(’gt640’); html.classList.add(’gt960’); }else{ html.classList.add(’gt640’); html.classList.add(’gt960’); html.classList.add(’gt1200’); } var screenWidth = window.innerWidth; var danwei = screenWidth/3.75;//屏幕的寬度/設計稿占滿全屏的寬度為多少rem var html = document.querySelector('html') html.style.fontSize = danwei + ’px’; } xys(); window.onresize=function(){ xys(); }})()

swiperEvent.js

var ylEvent = { eventAll:{ //'自定義的事件名稱':[’事件要觸發執行的函數1’,’事件要觸發執行的函數2’,’事件要觸發執行的函數3’] }, init:function(dom){ dom.eventAll = {}, dom.addEvent = this.addEvent; dom.emit = this.emit; dom.removeEvent = this.removeEvent dom.touchData = {}; //body.emit(’swiperLeft’,'msg') dom.addEventListener('touchstart',function(e){ //console.log(e) this.touchData.startX = e.touches[0].pageX; this.touchData.startY = e.touches[0].pageY }) dom.addEventListener(’touchmove’,function(e){ this.touchData.endX = e.touches[0].pageX; this.touchData.endY = e.touches[0].pageY; }) dom.addEventListener('touchend',function(e){ //console.log(e) var x = this.touchData.endX - this.touchData.startX; var y = this.touchData.endY - this.touchData.startY if( (Math.abs(x) > Math.abs(y)) && Math.abs(x)>100){ if(x>0){ //console.log(’向右滑動’) e.swiperDir = ’swiperRight’ body.emit(’swiperRight’,e) }else{ //console.log(’向左滑動’) e.swiperDir = ’swiperLeft’ body.emit(’swiperLeft’,e) } }else if((Math.abs(x) < Math.abs(y)) && Math.abs(y)>100){ if(y>0){ //console.log(’向下滑動’) e.swiperDir = ’swiperBottom’ body.emit(’swiperBottom’,e) }else{ //console.log(’向上滑動’) e.swiperDir = ’swiperTop’ body.emit(’swiperTop’,e) } } }) }, addEvent:function(eventName,callBackFn){ if(this.eventAll[eventName]==undefined){ this.eventAll[eventName] = [] } this.eventAll[eventName].push(callBackFn) }, emit:function(eventName,eventMsg){ if(this.eventAll[eventName]!=undefined){ this.eventAll[eventName].forEach(function(item,i){ item(eventMsg) }) } }, removeEvent:function(eventName,callBackFn){ var that = this this.eventAll[eventName].forEach(function(item,i){ if(item==callBackFn){ that.eventAll[eventName].splice(i,1) } }) }, }

index.html

<!DOCTYPE html><html> <head> <meta charset='utf-8' /> <title></title> <meta name='viewport' content='width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no' /> <script src='http://m.b3g6.com/bcjs/js/js輔助式響應.js' type='text/javascript' charset='utf-8'></script> <link rel='stylesheet' type='text/css' href='http://m.b3g6.com/bcjs/css/style.css' /> </head> <body> <!-- 1、貪吃蛇頁面結構和樣式 2、能夠繪制蛇 3、能夠繪制食物 4、讓蛇運動起來 5、蛇能夠吃食物 6、蛇碰到自己就會失敗 --> <div class='page startGame'> <div class='startBtn'>開始游戲</div> </div> <div class='page gaming'> <div class='score'> <div class='left'> score:<span class='num'>0</span> </div> <div class='pauseBtn'> 暫停 </div> </div> <div class='mainGame'> </div> </div> <div class='page endGame'> <h1>您最終獲取分數是<span class='num'>0</span>分</h1> <div class='reStartBtn'>重新開始</div> </div> <script src='http://m.b3g6.com/bcjs/js/swiperEvent.js' type='text/javascript' charset='utf-8'></script> <script src='http://m.b3g6.com/bcjs/js/index.js' type='text/javascript' charset='utf-8'></script> </body></html>

結果:

javascript開發實現貪吃蛇游戲

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
福利一区视频| 国产精成人品2018| 国产麻豆久久| 国产精品字幕| 亚洲综合不卡| 日韩福利视频一区| 成人精品动漫一区二区三区| 日韩欧美一区二区三区免费看| 日韩一区二区三区免费播放| 久久久人人人| 蜜臀av性久久久久蜜臀aⅴ四虎| 青草av.久久免费一区| 青青草伊人久久| 色8久久久久| 精品入口麻豆88视频| 亚洲黄页一区| 欧美日韩一区自拍| 99成人在线视频| 日韩一区二区三区精品| 麻豆久久一区| 伊人久久婷婷| 精品一区视频| 视频一区二区三区入口| 国语对白精品一区二区| 亚洲欧洲国产精品一区| 亚洲va中文在线播放免费| 亚洲另类av| 欧美精选视频一区二区| 男人操女人的视频在线观看欧美| 国产精品一区二区精品| 日韩视频在线一区二区三区| 鲁大师精品99久久久| 亚洲女人av| 水蜜桃精品av一区二区| 911精品国产| 日韩欧乱色一区二区三区在线| 色一区二区三区四区| 国产视频一区二区在线播放| 中文一区二区| 久久久国产精品一区二区中文| 日本视频一区二区| 日韩专区一卡二卡| av最新在线| 嫩草伊人久久精品少妇av杨幂| 四虎精品一区二区免费| 91超碰国产精品| 国产中文一区| 午夜国产欧美理论在线播放| 久久久人人人| 欧美精品九九| 午夜一级久久| 亚洲一区二区三区久久久| 亚洲国产不卡| 亚洲黄页一区| 日韩激情啪啪| 久久不见久久见中文字幕免费| 国产日韩欧美高清免费| 日产欧产美韩系列久久99| 日本aⅴ亚洲精品中文乱码| 国产三级一区| 中文在线а√在线8| 亚洲电影在线| 亚洲一级淫片| 麻豆精品在线视频| 999精品一区| 精品一区二区男人吃奶 | 亚洲美女91| 日本成人在线一区| 国产亚洲观看| 97久久中文字幕| 91嫩草精品| 精品中文在线| 久久精品国产www456c0m| 国产亚洲综合精品| 日韩欧美在线精品| 麻豆一区二区三区| 999久久久免费精品国产| 亚洲成人日韩| 婷婷综合在线| 欧美啪啪一区| 日韩欧美少妇| 黄色成人在线网址| 日韩精品三区四区| 国产精品成人a在线观看| 久久久久欧美精品| 美女国产精品| 97精品97| 在线日韩成人| 黄色aa久久| 亚洲视频电影在线| 久久的色偷偷| 玖玖玖国产精品| 牛牛精品成人免费视频| 国户精品久久久久久久久久久不卡| 日本欧美在线看| 日韩黄色大片网站| 欧美日韩一区二区三区不卡视频| 日韩中文首页| 欧美日韩1区| 中文字幕成在线观看| 亚洲综合中文| 91精品精品| 久久久免费人体| 国产精品毛片在线| 国产精品麻豆久久| 国产香蕉精品| 婷婷亚洲成人| 亚洲精品一区二区在线看| 国产中文欧美日韩在线| 日韩av黄色在线| 亚洲精品免费观看| 黄色在线一区| 日韩欧美字幕| 欧美激情精品| 亚久久调教视频| 亚洲高清毛片| 日韩精品麻豆| jizzjizz中国精品麻豆| 欧美日韩va| 日韩精品91亚洲二区在线观看| 99riav1国产精品视频| 日韩国产一区| 精品久久网站| 老牛国内精品亚洲成av人片| 亚洲乱亚洲高清| 免费在线看一区| 999在线观看精品免费不卡网站| 色88888久久久久久影院| 精品久久久网| 久久一区精品| 国产乱人伦精品一区| 日韩高清二区| 欧美日韩一区自拍| 国产精品magnet| 日韩av自拍| 99视频精品全国免费| 美女网站一区| 亚洲午夜国产成人| 亚洲精品日韩久久| 国产免费久久| 亚洲精品永久免费视频| 久久九九电影| 丝袜美腿亚洲色图| 日韩国产在线观看一区| 国产精品chinese| 国产乱码精品一区二区亚洲| 国产精品日本一区二区不卡视频| 日韩av一区二区在线影视| 免费一区二区三区在线视频| 久久国产精品美女| 99视频精品全国免费| 国产日韩综合| 国产精品一区二区精品视频观看 | 电影91久久久| 免费久久久久久久久| 免费观看久久久4p| 久久精品xxxxx| 蜜桃视频欧美| 久久尤物视频| 99久久夜色精品国产亚洲1000部| 亚洲一区二区免费看| 免费看久久久| 免费国产自线拍一欧美视频| 久久99蜜桃| 亚洲中午字幕| 精品国产欧美| 日韩有吗在线观看| 91欧美在线| 日日夜夜免费精品视频| 国产一区2区| 日韩在线观看中文字幕| 日韩综合精品| 精品视频高潮| 噜噜噜久久亚洲精品国产品小说| 国产中文字幕一区二区三区| 亚洲三级精品| 日本在线精品| 免费一级欧美片在线观看网站| 中文国产一区| 电影亚洲精品噜噜在线观看| 国产精品v亚洲精品v日韩精品| 男女性色大片免费观看一区二区 | 亚洲免费毛片| 夜夜嗨一区二区| 韩国精品主播一区二区在线观看| 婷婷精品在线| 一区二区三区四区日韩| 激情久久久久久久| 日韩国产专区| 精品捆绑调教一区二区三区| 在线人成日本视频| 中文字幕人成乱码在线观看| 精品国产亚洲一区二区在线观看| 久久国产精品免费一区二区三区| 综合一区在线| 欧美亚洲三区| 乱一区二区av| 丝袜诱惑一区二区| 久久久一本精品| 91成人超碰|