电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

javascript開發實現貪吃蛇游戲

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

結果:

javascript開發實現貪吃蛇游戲

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 劳动法网-专业的劳动法和劳动争议仲裁服务网| 层流手术室净化装修-检验科ICU改造施工-华锐净化工程-特殊科室建设厂家 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | IP检测-检测您的IP质量 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | TPE塑胶原料-PPA|杜邦pom工程塑料、PPSU|PCTG材料、PC/PBT价格-悦诚塑胶 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 纯水设备_苏州皙全超纯水设备水处理设备生产厂家 | 精密模具制造,注塑加工,吹塑和吹瓶加工,EPS泡沫包装生产 - 济南兴田塑胶有限公司 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 防弹玻璃厂家_防爆炸玻璃_电磁屏蔽玻璃-四川大硅特玻科技有限公司 | ★塑料拖链__工程拖链__电缆拖链__钢制拖链 - 【上海闵彬】 | 专业音响设备_舞台音响设备_会议音响工程-首选深圳一禾科技 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 杭州ROHS检测仪-XRF测试仪价格-百科 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 |