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

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

javascript開發實現貪吃蛇游戲

瀏覽:26日期: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://www.b3g6.com/bcjs/js/js輔助式響應.js' type='text/javascript' charset='utf-8'></script> <link rel='stylesheet' type='text/css' href='http://www.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://www.b3g6.com/bcjs/js/swiperEvent.js' type='text/javascript' charset='utf-8'></script> <script src='http://www.b3g6.com/bcjs/js/index.js' type='text/javascript' charset='utf-8'></script> </body></html>

結果:

javascript開發實現貪吃蛇游戲

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美一区二区三区精品观看| 亚洲永久字幕| 男女精品网站| 午夜国产精品视频免费体验区| 亚洲二区视频| 蜜桃av一区二区三区电影| 日韩不卡一区二区三区| 麻豆91在线播放| 成人自拍av| 在线一区免费观看| 婷婷视频一区二区三区| 国产精品一区二区三区av麻| 精品国产99| 激情五月综合| 日韩av一区二区三区| a天堂资源在线| 99国产一区| 国产精品亚洲四区在线观看| 日韩国产一区二区| 99综合视频| 国产高清精品二区| 国内精品99| 日本三级亚洲精品| 国产福利一区二区精品秒拍| 999国产精品| 亚洲精品第一| 日韩成人高清| 日韩高清三区| 久久亚洲国产| 国产精品xxx在线观看| 欧美丝袜一区| 国产精品分类| 亚洲少妇一区| 国产精品福利在线观看播放| 在线日韩欧美| 久久99青青| 模特精品在线| 国产黄大片在线观看| 日本亚洲不卡| 亚洲无线一线二线三线区别av| 日韩高清在线不卡| 999国产精品永久免费视频app| 欧美精品国产白浆久久久久| 午夜精品婷婷| 国产夫妻在线| 国产欧美精品久久| 午夜在线播放视频欧美| 高清久久精品| 欧美日韩一区二区三区不卡视频 | 亚洲一级大片| 亚洲黄色中文字幕| 国产亚洲人成a在线v网站| 亚洲一级黄色| 国产精品密蕾丝视频下载| 神马午夜在线视频| 日韩不卡一区二区三区| 亚洲一区二区动漫| 久久男人av资源站| 久久国产免费看| 蜜臀av在线播放一区二区三区| 91亚洲成人| 国产精品v一区二区三区| 国产精品视区| 国产91久久精品一区二区| 国产成人精品一区二区免费看京 | 首页欧美精品中文字幕| 伊人久久av| 国产精品一区二区免费福利视频| 丝袜亚洲另类欧美| 日韩视频在线一区二区三区 | 国产精选在线| 精品无人区麻豆乱码久久久| 青草国产精品| 亚洲日产国产精品| 尹人成人综合网| 欧美日韩精品在线一区| 日韩深夜视频| 日韩一区欧美| av资源亚洲| se01亚洲视频 | 日本va欧美va瓶| 亚洲日本欧美| 一本一道久久a久久| 美国三级日本三级久久99| 欧美日韩国产亚洲一区| 免费成人网www| 亚洲婷婷免费| 不卡视频在线| 在线一区免费| 丝袜亚洲另类欧美| 亚洲精品影院在线观看| 日韩有吗在线观看| 日韩精品中文字幕一区二区| 亚洲欧洲美洲国产香蕉| 亚洲人亚洲人色久| 91亚洲无吗| 国产激情一区| 国产精品久久观看| 日韩精品一卡| 自拍日韩欧美| 亚洲色图网站| 日韩在线网址| 91成人精品在线| 久久久久九九精品影院| 久久午夜影院| 久久久人人人| 久久国产成人| 欧美日本三区| 国产aⅴ精品一区二区三区久久 | 国产精品久久久久9999高清| 久久福利在线| 深夜福利视频一区二区| 免费黄色成人| 亚洲理论在线| 久久精品97| 97精品中文字幕| 欧美日韩第一| 视频国产精品| 激情综合婷婷| 欧美特黄a级高清免费大片a级| 六月丁香综合| 国产精品一区二区三区av| 中文av在线全新| 免费久久99精品国产自在现线| 日韩福利视频一区| 91免费精品| 中文一区一区三区免费在线观| 国产亚洲一区二区三区不卡 | 日韩一二三区在线观看| 国产激情综合| 免费国产自久久久久三四区久久 | 青青草伊人久久| 国产精品久久观看| 老司机精品久久| 欧美激情视频一区二区三区在线播放| 日本一区二区免费高清| 夜久久久久久| 日韩中文av| 日韩不卡视频在线观看| 亚洲人www| 91日韩免费| 中文在线日韩| 激情视频网站在线播放色| 国产精品日本| 老司机精品视频在线播放| 亚洲二区三区不卡| 久久av电影| 免费在线成人网| 黄色在线网站噜噜噜| 蜜桃一区二区三区在线| 老司机免费视频一区二区三区| 美女毛片一区二区三区四区| 亚洲综合激情在线| 成人欧美一区二区三区的电影| 免费在线欧美视频| 日韩深夜视频| 欧美精品观看| 亚洲女人av| 欧美三级网址| 久久99精品久久久野外观看| 亚洲激情黄色| 日韩久久电影| 欧美xxxx性| 少妇高潮一区二区三区99| 久久精品国语| 麻豆视频久久| 日韩国产精品久久久久久亚洲| 麻豆网站免费在线观看| 久久激情五月婷婷| 在线观看亚洲精品福利片| 欧美肉体xxxx裸体137大胆| 国产精品videosex极品| 亚洲日韩中文字幕一区| 午夜av一区| 欧洲一区二区三区精品| 国产精品videossex| 亚洲免费成人av在线| 亚洲精品在线观看91| 国产精品成久久久久| 欧美日韩一视频区二区| 亚洲精品综合| 国产亚洲高清视频| 91视频精品| 国精品产品一区| 国产精品久久久久久模特| 日韩国产欧美一区二区三区| 免费人成精品欧美精品| 91久久在线| 黄色精品网站| 黄色免费成人| 国产视频一区在线观看一区免费| 久久久久久免费视频| 日本高清不卡一区二区三区视频| 荡女精品导航| 水蜜桃精品av一区二区| 极品av在线| 久久蜜桃资源一区二区老牛| 精品成av人一区二区三区| 国产精品theporn| 国产欧美精品久久|