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

您的位置:首頁技術(shù)文章
文章詳情頁

JS實(shí)現(xiàn)簡單貪吃蛇小游戲

瀏覽:212日期:2024-04-13 16:15:34

本文實(shí)例為大家分享了JS實(shí)現(xiàn)簡單貪吃蛇游戲的具體代碼,供大家參考,具體內(nèi)容如下

1、使用語言 HTML+CSS+JavaScript2、使用工具 visual studio code3、GitHub項(xiàng)目地址:貪吃蛇4、項(xiàng)目運(yùn)行截圖:

JS實(shí)現(xiàn)簡單貪吃蛇小游戲

5、項(xiàng)目功能分析:主要使用數(shù)組來存儲(chǔ)蛇的位置,地圖和蛇都是一個(gè)二維數(shù)組,對于有蛇的地方,地圖的CSS就會(huì)發(fā)生改變,同時(shí)添加了添加了一個(gè)音樂播放按鈕,通過CSS動(dòng)畫實(shí)現(xiàn)旋轉(zhuǎn)。

6、項(xiàng)目代碼:(項(xiàng)目代碼有詳細(xì)的注釋)

snake.html

<!-- * @Author: CSU_XZY * @Date: 2020-10-13 22:06:51 * @LastEditors: CSU_XZY * @LastEditTime: 2020-10-18 17:08:54 * @FilePath: 第二天貪吃蛇snake.html * @Description: just to play--><!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><html xmlns='http://www.w3.org/1999/xhtml'><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>eatSnake</title><head> <style type='text/css'> *{ margin:0; padding:0; border: 0px; } body{ background: #444; } table{ border-collapse:collapse; overflow: hidden; border:1px solid #ddd; margin:10px auto 10px auto; } td{ display: table-cell; width:20px; height:20px; background: #fff; border:1px #eeeeee solid; } .snake{ background: #3388ee; } .notsnake{ background: #fff; } .food{ background: #33aa33; } .snake_head{ background: #dd4444; } .notice{ width:450px; text-align: center; margin:50px auto; color:#fff; font-size: 14px; } </style></head><body><p class='notice'>提示:空格鍵控制開始/ 暫停,方向鍵控制蛇的移動(dòng)方向,F(xiàn)5刷新</p><script type='text/javascript' src='http://m.b3g6.com/bcjs/snake.js'></script></body></html>

snake.js

/* * @Author: CSU_XZY * @Date: 2020-10-17 12:38:26 * @LastEditors: CSU_XZY * @LastEditTime: 2020-10-18 22:40:24 * @FilePath: 第二天snakesnake.js * @Description: just to play */window.onload = function(){ var snake = function(width,height,snakeId,speed){ this.width = width || 10; this.height = height || 10; this.snakeId = snakeId || 'snake'; this.goX = 0; this.goY = 0; this.speed = this.oldSpeed = speed || 10; this.Grid = []; //存放td的二維數(shù)組 this.snakeGrid = []; //存放蛇的數(shù)組 this.foodGrid = []; this.snakeTimer = null; this.derectkey = 39; this.stop = true; this.init(); document.getElementById('myAudio').play(); box.style.animationPlayState = ’running’ } snake.prototype = { //創(chuàng)建二維數(shù)組 multiArray : function(m , n) { var array = new Array(m); //長 for(let i = 0; i < m; i++) { array[i] = new Array(n); //寬 } return array; }, //函數(shù)修正this bind : function(fn,context) { return function(){ return fn.apply(context,arguments); } }, //移動(dòng)的主函數(shù) move:function(){ var _this = this; if(_this.snakeTimer){clearInterval(_this.snakeTimer);} _this.snakeTimer = setInterval(_this.bind(_this.main,_this),Math.floor(3000/this.speed)); }, //重來 reset() { this.goX = 0; this.goY = 0; this.speed = this.oldSpeed; this.derectkey = 39; this.stop = true; this.init(); }, //確定鍵盤事件 keyDown : function(e) { var e = e || window.event; var keycode = e?e.keyCode:0; if(keycode == 116 ) window.location.reload(); if(keycode == 32) { if(this.stop) { this.move(); this.stop = false; } else{ if(this.snakeTimer) clearInterval(this.snakeTimer); this.stop = true; } } if(keycode>=37 && keycode <= 40) { if(!this.stop) this.derectkey = keycode; } return false; }, //創(chuàng)建地圖 creatMap : function() { var table = document.createElement('table'); var tbody = document.createElement('tbody'); for(let i = 0; i < this.width; i++) { var tr = document.createElement('tr'); for(let j = 0; j < this.height; j++) { var td = document.createElement('td'); this.Grid[i][j] = tr.appendChild(td); } tbody.appendChild(tr); } table.appendChild(tbody); table.id = this.snakeId; document.body.appendChild(table); }, //產(chǎn)生隨機(jī)點(diǎn) randomPoint : function(initX,initY,endX,endY) { var p = []; //用來存放產(chǎn)生的隨機(jī)點(diǎn)的數(shù)組 var initX = initX || 0; var initY = initY || 0; var endX = endX || this.width; var endY = endY || this.height; p[0] = Math.floor(Math.random()*(endX - initX)) + Math.floor(initX); p[1] = Math.floor(Math.random()*(endY - initY)) + Math.floor(initY) return p; }, //初始化食物的位置 initFood : function() { this.foodGrid = this.randomPoint(); if(this.isInSnake(this.foodGrid)) { this.initFood(); return false; } this.Grid[this.foodGrid[0]][this.foodGrid[1]].className = 'food'; }, //判斷點(diǎn)是否在蛇身上 isInSnake : function(point,pos) { var snakeGrid = this.snakeGrid; if(point instanceof Array) { let n = snakeGrid.length; for(let i = pos || 0; i < n; i++) { if(point[0] == snakeGrid[i][0] && point[1] == snakeGrid[i][1]) return true; } } return false; }, //給蛇涂顏色 paintSnake : function(){ var snakeGrid = this.snakeGrid; for(let i = 0; i < snakeGrid.length; i++) { this.Grid[snakeGrid[i][0]][snakeGrid[i][1]].className = 'snake_body'; } }, //初始化蛇的位置 initSnake : function() { this.snakeGrid = []; this.snakeGrid.push([1,3]); this.snakeGrid.push([1,2]); this.snakeGrid.push([1,1]); this.paintSnake(); this.Grid[this.snakeGrid[0][0]][this.snakeGrid[0][1]].className = 'snake_head'; this.Grid[this.snakeGrid[this.snakeGrid.length-1][0]][this.snakeGrid[this.snakeGrid.length-1][1]].className = 'snake_tail'; }, //判斷蛇是否撞墻 isInWall : function(point){ if(point instanceof Array){ if(point[0] < 0 || point[0] > this.width1 - 1 || point[1] < 0 || point[1] > this.height - 1) return true; } return false; }, //初始化條件 //控制函數(shù)運(yùn)行的主函數(shù) main : function(){ var snakeGrid = this.snakeGrid; var temp = snakeGrid[snakeGrid.length-1], isEnd = false; headX = snakeGrid[0][0]; headY = snakeGrid[0][1]; msg = ''; switch(this.derectkey) { case 37: if(this.goY!=1){this.goY=-1;this.goX=0} //防止控制蛇往相反反方向走 break; case 38: if(this.goX!=1){this.goX=-1;this.goY=0} break; case 39: if(this.goY!=-1){this.goY=1;this.goX=0} break; case 40: if(this.goX!=-1){this.goX=1;this.goY=0} } headX += this.goX; headY += this.goY; if(headX == this.foodGrid[0] && headY == this.foodGrid[1]) { this.snakeGrid.unshift(this.foodGrid); this.initFood(); if(this.snakeGrid.length>4){ //控制蛇加速 if(this.snakeGrid.length==5){ this.speed += 5; } else if(this.snakeGrid.length==10){ this.speed += 3; } else if(this.snakeGrid.length==20){ this.speed += 3; } else if(this.snakeGrid.length==30){ this.speed += 3; } this.move(); } } else { for(var i=this.snakeGrid.length-1;i>0;i--){ this.snakeGrid[i] = this.snakeGrid[i-1] ; } this.snakeGrid[0] = [headX,headY]; if(this.isInSnake(this.snakeGrid[0],1)){ isEnd=true; msg = '哈皮,吃到自己啦!!'; } //判斷是否撞墻 else if(this.isInWall(this.snakeGrid[0])){ isEnd =true; msg = '撒比偉哥,撞墻了!!'; } if(isEnd) { if(this.snakeTimer) clearInterval(this.snakeTimer); var score; let len = this.snakeGrid.length; if(len <= 5) score = len-3; else if(len>5 && len<=10) { score = 2 + 2*(len-5) } else if(len>10 && len <= 20) score = 12 + 3*(len-10); else score = 27 + 5*(len - 15); if(confirm(msg+'你的分?jǐn)?shù)是:'+score+'! 是否重新開始?')){ this.reset(); } return false; } this.Grid[temp[0]][temp[1]].className = 'notSnake'; } this.paintSnake(); this.Grid[headX][headY].className = 'snake_head'; this.Grid[this.snakeGrid[this.snakeGrid.length-1][0]][this.snakeGrid[this.snakeGrid.length-1][1]].className = 'snake_tail'; }, init : function(){ var _this = this; snake_id = document.getElementById(_this.snakeId)||0 ; if(snake_id){ document.body.removeChild(snake_id); } _this.Grid = _this.multiArray(_this.width,_this.height); _this.creatMap(); _this.initSnake(); _this.initFood(); document.onkeydown = _this.bind(_this.keyDown,_this); } } new snake(20,20,'snake',10);}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩二区在线观看| 国产精品极品国产中出| 国产精品男女| 日韩av片子| 国产在视频一区二区三区吞精| 成人在线免费观看91| 亚洲午夜国产成人| 国产视频一区三区| 蜜桃免费网站一区二区三区| 久久亚洲欧美| 国产亚洲一区二区三区啪| 国产欧美日韩影院| 欧美亚洲网站| 成人国产精选| 欧美sss在线视频| 免费在线观看视频一区| 日韩一区二区三区免费视频| 亚洲精品午夜av福利久久蜜桃| 久久最新视频| 日韩一区中文| 高清日韩欧美| 中文一区一区三区免费在线观| 青青国产精品| 国产精品3区| 亚洲午夜精品久久久久久app| 黄色日韩精品| 在线观看亚洲精品福利片| 国产精品videossex久久发布| 不卡一二三区| 日韩在线观看一区二区| 久久精品国产网站| 亚洲精品网址| 国产精品福利在线观看播放| 国产美女精品| а√天堂8资源在线| 蜜臀久久99精品久久久久久9| 精品亚洲二区| 午夜在线一区| 欧美精品aa| 亚洲人亚洲人色久| 久久久夜夜夜| 欧美交a欧美精品喷水| 中文字幕日本一区| 美女网站一区| 一区二区三区四区日本视频| 青草国产精品| 精品一区毛片| 日韩欧美激情| 亚洲少妇一区| 91久久久精品国产| 日韩欧美国产精品综合嫩v| 日韩精品欧美大片| 亚洲成av在线| 国产精品99视频| 精品视频网站| 精品国产99| 国产一区二区三区黄网站| 国产日韩欧美三区| 日韩精品中文字幕一区二区| 久热re这里精品视频在线6| 欧美日韩国产一区二区三区不卡| 欧美成人基地 | 欧美欧美黄在线二区| 99精品视频精品精品视频| 青青伊人久久| 国产亚洲精品美女久久| 国产九九精品| 国产亚洲一区在线| 夜夜精品视频| 视频一区国产视频| 亚洲三级观看| 国产精品美女午夜爽爽| 一区二区91| 日韩高清在线不卡| 国产精品99精品一区二区三区∴| 亚洲欧洲美洲av| 亚洲香蕉网站| 欧美1级日本1级| 首页国产欧美日韩丝袜| 视频一区视频二区中文| 日本免费在线视频不卡一不卡二| 91嫩草亚洲精品| se01亚洲视频| 亚洲一级影院| 欧美在线观看天堂一区二区三区| 国产一区日韩欧美| 蜜臀久久99精品久久久久宅男| 欧美日韩中出| 高清一区二区| 国产黄大片在线观看| 香蕉精品久久| 欧美午夜三级| 亚洲青青久久| 日韩精品免费视频人成| 日韩精品中文字幕吗一区二区| 国产日韩一区二区三区在线播放| 亚洲免费观看高清完整版在线观| 免费久久99精品国产| 久久午夜精品| 免费不卡中文字幕在线| 国产精品.xx视频.xxtv| 久久国产成人| 成人精品动漫一区二区三区| 午夜日韩在线| 韩国一区二区三区视频| 久久亚洲欧洲| 国产精品一区二区三区av麻| 国产精品永久| 日韩欧美一区免费| 日韩一区二区三区免费播放| 日韩欧美三区| 三级一区在线视频先锋| 天堂日韩电影| 九九久久国产| 国产精品久久亚洲不卡| 丝袜亚洲精品中文字幕一区| 国产日产精品_国产精品毛片 | 精品久久久亚洲| 欧美一区二区三区高清视频| 日韩精品中文字幕吗一区二区 | 国产精品久久久久久模特| 久久理论电影| 三上悠亚国产精品一区二区三区 | 精品日韩一区| 美日韩精品视频| 91久久久精品国产| 日韩精品免费一区二区在线观看| 给我免费播放日韩视频| 久久精品av麻豆的观看方式| 中文字幕av一区二区三区人| 亚洲天堂黄色| 日韩午夜黄色| 日韩视频在线一区二区三区| 色88888久久久久久影院| av中文字幕在线观看第一页| 久久天堂影院| 欧美精品二区| 97久久亚洲| 国产精品国产三级在线观看| 国产精品亚洲综合久久| 精品少妇av| 亚洲婷婷在线| 亚洲精品护士| 国产精品一区二区精品 | 99精品视频在线| 亚洲精品午夜av福利久久蜜桃| 免费人成黄页网站在线一区二区| 亚洲综合中文| 成人午夜网址| 天堂8中文在线最新版在线| 久久国产亚洲| 亚洲一区二区日韩| 欧美一级二级视频| 国产欧美69| 精品视频91| 欧美在线亚洲综合一区| 深夜福利一区| 麻豆国产精品视频| 亚洲一级少妇| 亚洲一级大片| 黄色欧美在线| 怡红院精品视频在线观看极品| 欧美中文日韩| 日韩av午夜在线观看| 国产精品毛片aⅴ一区二区三区| a天堂资源在线| 久久亚洲欧美| 蜜臀国产一区| 日韩精品视频网站| 日韩精品一区二区三区免费观影| 日韩国产在线观看| 91精品xxx在线观看| 视频一区二区三区在线| 麻豆视频在线看| 91欧美极品| 亚洲精品一二三区区别| 都市激情国产精品| 欧美在线精品一区| 午夜亚洲一区| 肉色欧美久久久久久久免费看| 国产探花一区| 精品一区欧美| 999久久久91| 日韩久久精品网| 欧美激情99| 欧美一区二区三区免费看| 视频在线观看国产精品| 欧美在线资源| 婷婷色综合网| 国产精品chinese| 日韩欧美久久| 91在线成人| 国产日韩一区二区三区在线| 日韩有码av| 视频一区视频二区在线观看| 中文国产一区| 蜜臀av一区二区三区| 免费精品视频| 少妇精品久久久一区二区| 亚洲一区二区三区无吗|