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

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

原生js編寫貪吃蛇小游戲

瀏覽:203日期:2024-03-26 14:02:57

本文實(shí)例為大家分享了js編寫貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下

剛學(xué)完js模仿著教程,把自己寫的js原生小程序。

HTML部分

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title> <link rel='stylesheet' href='http://www.b3g6.com/bcjs/css/index.css' ></head><body> <div class='content'> <!-- 游戲開啟按鈕 --><div class='btn startBtn'><button></button></div><!-- 蛇身 --><div id='snakeWrap'></div> </div> <!-- 引入外部js文件 --> <script src='http://www.b3g6.com/bcjs/js/index.js'></script></body></html>

css部分

/* 整體樣式 */.content{ width: 640px; height: 640px; margin: 100px auto; position: relative;} .btn{ width: 100%; height: 100%; position: absolute; left: 0; top: 0; background-color: rgba(0, 0, 0, 0.3); z-index: 2;}.btn button{ background: none; border: none; background-size: 100% 100%; cursor: pointer; outline: none; position: absolute; left: 50%; top: 50%;}.startBtn button{ width: 200px; height: 80px; background: url(../images/Snipaste_2021-05-08_08-52-45.png) no-repeat; background-size: contain; margin-left: -100px; margin-top: 222px;}#snakeWrap{ width: 600px; height: 600px; background: #73aad4; border: 20px solid #13649c; position: relative;}.snakeHead{ background-color: yellowgreen; border-radius: 50%;}.snakeBody{ background-color: black; border-radius: 50%;}.food{ background-color: red; border-radius: 50%;}

js部分

var sw = 20,//一個(gè)方塊的寬 sh = 20,//一個(gè)方塊的寬 tr = 30,//行數(shù) td = 30;//列數(shù)var snake = null, //生成蛇的實(shí)例 food = null; //生成食物的實(shí)例 game = null; //創(chuàng)建游戲?qū)嵗? //把整體看成是一個(gè)一個(gè)小方塊 移動的的時(shí)候創(chuàng)建和刪除方塊(后續(xù)所有方塊的生成都會調(diào)用)// 方塊構(gòu)造函數(shù)function Square(x,y,classname){ //對應(yīng)css中三種蛇的樣式(蛇頭 蛇身 蛇尾) this.x = x * sw; this.y = y * sh; this.class = classname; this.viewContent = document.createElement(’div’); this.viewContent.className = this.class; //將創(chuàng)建出來的div添加對應(yīng)css樣式 this.parent = document.getElementById(’snakeWrap’); }//在方塊構(gòu)造函數(shù)的 原型鏈 上創(chuàng)建create方法 確定新div的具體信息//this指向SquareSquare.prototype.create = function(){ this.viewContent.style.position = ’absolute’; this.viewContent.style.width = sw + ’px’; this.viewContent.style.height = sh + ’px’; this.viewContent.style.left = this.x + ’px’; this.viewContent.style.top = this.y + ’px’; this.parent.appendChild(this.viewContent); //把新創(chuàng)建的div添加到頁面}//在方塊構(gòu)造函數(shù)的 原型鏈 上創(chuàng)建remove方法 用于移動時(shí)刪除方塊Square.prototype.remove = function(){ this.parent.removeChild(this.viewContent);}// 蛇function Snake(){ this.head = null; //存儲蛇頭信息 this.tail = null; //存儲蛇尾信息 this.pos = []; //存儲蛇身上的每一個(gè)方塊的位置 this.directionNum = { //存儲蛇走的方向left : { x : -1, y : 0},right : { x : 1, y : 0},up : { x : 0, y : -1},down : { x : 0, y : 1} }}//this 指向 SnakeSnake.prototype.init = function(){ //初始化 // 創(chuàng)建蛇頭 var snakeHead = new Square(2,0,’snakeHead’); snakeHead.create(); this.head = snakeHead; this.pos.push([2,0]); //儲存蛇頭信息 // 創(chuàng)建蛇身1 var snakeBody1 = new Square(1,0,’snakeBody’); snakeBody1.create(); this.pos.push([1,0]); //儲存蛇身信息 // 創(chuàng)建蛇尾 var snakeBody2 = new Square(0,0,’snakeBody’); snakeBody2.create(); this.tail = snakeBody2; this.pos.push([0,0]); /儲存蛇尾信心 //形成鏈表關(guān)系 //蛇頭 蛇身 蛇尾的前后關(guān)系 snakeHead.last = null; snakeHead.next = snakeBody1; snakeBody1.last = snakeHead; snakeBody1.next = snakeBody2; snakeBody2.last = snakeBody1; snakeBody2.next = null; //給蛇 添加一個(gè)默認(rèn)方向 向右 this.direction = this.directionNum.right;}// 獲取蛇頭的下一個(gè)位置對應(yīng)的元素(this指向Snake)// 獲取下一個(gè)點(diǎn)的坐標(biāo)并儲存到nextPos數(shù)組Snake.prototype.getNextPos = function(){ var nextPos = [this.head.x/sw + this.direction.x, //this.direction.x、y 下面會將方向與鍵盤事件綁定 來確定下一個(gè)點(diǎn)生成的位置this.head.y/sh + this.direction.y ]// 下個(gè)點(diǎn)是自己,撞到了自己 游戲結(jié)束 var selfCollied = false; this.pos.forEach(function(value){ //forEach遍歷數(shù)組 兩數(shù)組比較看是否有重復(fù)坐標(biāo)if (value[0] == nextPos[0] && value[1] == nextPos[1]){ selfCollied = true;} }) //撞到了自己 游戲結(jié)束 if(selfCollied){this.、.die.call(this);return; } // 下個(gè)點(diǎn)是圍墻 游戲結(jié)束if(nextPos[0] > 29 || nextPos[0] < 0 || nextPos[1] > 29 || nextPos[1] < 0){this.strategies.die.call(this);return; } // 下個(gè)點(diǎn)是食物 吃 if(food && food.pos[0] == nextPos[0] && food.pos[1] == nextPos[1]){this.strategies.eat.call(this);return; } // 下個(gè)點(diǎn)什么都不是 走 this.strategies.move.call(this);}// 碰撞后要做的事Snake.prototype.strategies = { move : function(format){ //參數(shù)用于判斷是否刪除蛇尾// 創(chuàng)建一個(gè)newbody,刪掉蛇頭var newBody = new Square(this.head.x/sw,this.head.y/sh,’snakeBody’)newBody.next = this.head.next;newBody.next.last = newBody;newBody.last = null;this.head.remove();newBody.create();// 創(chuàng)建一個(gè)新蛇頭var newx = this.head.x/sw + this.direction.x;var newy = this.head.y/sh + this.direction.y;var newHead = new Square(newx,newy,’snakeHead’)newHead.next = newBody;newBody.last = newHead;newHead.last = null;newHead.create();// 更新蛇身的坐標(biāo)this.pos.splice(0,0,[newx,newy]);this.head = newHead;//如果為false 則吃if(!format){ this.tail.remove(); this.tail = this.tail.last; this.pos.pop();} }, eat : function(){this.strategies.move.call(this,true);game.score ++;createFood(); }, die : function(){game.over(); }}snake = new Snake();// 創(chuàng)建食物function createFood(){ // 食物小方塊坐標(biāo) var x = null; var y = null; var include = true; while(include){x = Math.round(Math.random()*(td - 1));y = Math.round(Math.random()*(tr - 1));snake.pos.forEach(function(value){ if(x != value[0] && y != value[1]){include = false; }}); } // 生成食物 food = new Square(x,y,’food’); food.pos = [x,y]; var foodDom = document.querySelector(’.food’); if(foodDom){foodDom.style.left = x * sw + ’px’;foodDom.style.top = y * sh + ’px’; }else{food.create(); }}// 創(chuàng)建游戲邏輯function Game(){ this.timer = null; this.score = 0;}Game.prototype.init = function(){ snake.init(); createFood(); //這里曾經(jīng)的e.keycode e.which 都已禁用 使用e.key window.addEventListener(’keydown’,function(e){if(e.key == ’ArrowLeft’ && snake.direction != snake.directionNum.right){ snake.direction = snake.directionNum.left;}else if(e.key == ’ArrowUp’ && snake.direction != snake.directionNum.down){ snake.direction = snake.directionNum.up;}else if(e.key == ’ArrowRight’ && snake.direction != snake.directionNum.left){ snake.direction = snake.directionNum.right;}else if(e.key == ’ArrowDown’ && snake.direction != snake.directionNum.up){ snake.direction = snake.directionNum.down;} }); this.start();}Game.prototype.start = function(){ this.timer = setInterval(function(){snake.getNextPos(); },0.0000000000000001)}Game.prototype.over = function(){ clearInterval(this.timer); alert(’你的得分為’ + this.score); // 游戲回到最初始狀態(tài) var snakeWrap = document.getElementById(’snakeWrap’); snakeWrap.innerHTML = ’’; snake = new Snake(); game = new Game(); var startBtnWrap = document.querySelector(’.startBtn’); startBtnWrap.style.display = ’block’;}// 開啟游戲game = new Game();var startBtn = document.querySelector(’.startBtn button’);startBtn.onclick = function(){ startBtn.parentNode.style.display = ’none’; game.init();}

簡單的一個(gè)小游戲,如有問題請大佬指正。

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩不卡手机在线v区| 国产欧美精品久久| 先锋亚洲精品| 国产精品嫩草99av在线| 美女精品网站| 视频在线在亚洲| 国产欧美91| 日韩中文字幕区一区有砖一区| 自拍日韩欧美| 亚洲精品成人一区| 欧美日韩 国产精品| 国内精品麻豆美女在线播放视频| 精品国产午夜肉伦伦影院| 另类中文字幕国产精品| 久久影视一区| 亚洲欧美视频| 香蕉成人久久| 欧美在线看片| 国产中文字幕一区二区三区| 理论片午夜视频在线观看| 亚洲成人va| 国产韩日影视精品| 91欧美精品| 欧美日一区二区在线观看| 国产精品日本一区二区三区在线 | 日韩国产欧美在线播放| 日韩1区2区| 亚洲精品激情| 国产精品蜜月aⅴ在线| 国产精品视区| 日韩高清不卡在线| 精品色999| 黄色日韩在线| 国产精品一区二区三区美女| 日韩大片免费观看| 国产亚洲欧美日韩精品一区二区三区| 国产精品一区免费在线| 99精品国产一区二区三区| 国产精品久久国产愉拍| av综合电影网站| 午夜亚洲福利| 亚洲91视频| 国产精品密蕾丝视频下载| 黑丝美女一区二区| 美女视频网站久久| 日韩欧美激情| 日韩av二区| 日韩国产欧美三级| 91精品一区二区三区综合| 欧美日本二区| 欧美日韩精品一本二本三本| 国产乱码精品一区二区三区亚洲人| 日韩中文在线播放| 国产欧美午夜| 久色成人在线| 久久五月天小说| 精品国产黄a∨片高清在线| 视频一区视频二区在线观看| 亚洲综合在线电影| 欧美91在线|欧美| 天堂va欧美ⅴa亚洲va一国产| 欧美成人精品| 国产成人精品三级高清久久91| 在线观看视频免费一区二区三区| 99久久精品网| 国产精品一区二区精品视频观看| 黑丝一区二区三区| 天堂√8在线中文| 国产精品久久久网站| 中文字幕日韩欧美精品高清在线| 亚洲va中文在线播放免费| 麻豆视频久久| 国产日韩亚洲欧美精品| 蜜桃传媒麻豆第一区在线观看| 亚洲手机在线| 99精品国产一区二区三区| 成人国产综合| 免费看一区二区三区| 91午夜精品| 亚洲精品美女91| 久久高清国产| 欧美特黄一区| 黄色亚洲免费| 亚洲男女av一区二区| 亚洲v在线看| 91精品国产乱码久久久久久久| 久久uomeier| 日韩国产一区二区| 亚洲国产成人二区| 成人午夜网址| av资源中文在线| 久久久久免费| 青青青免费在线视频| 桃色一区二区| 欧美日韩尤物久久| 欧美日韩第一| 亚洲自啪免费| 蜜臀久久99精品久久久久宅男 | 成人精品亚洲| 日本韩国欧美超级黄在线观看| 91精品xxx在线观看| 91精品国产成人观看| 欧美精品一二| 亚洲久久一区| 国产日韩一区二区三区在线| 国产精品白丝一区二区三区| 欧美精品97| 国产91欧美| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 99视频精品视频高清免费| 欧美羞羞视频| 国产精品日韩久久久| 亚洲三区欧美一区国产二区| 97久久亚洲| 精品国产三区在线| 久久一区二区三区喷水| 亚洲国产一区二区三区在线播放| 亚洲欧美日韩视频二区| 日韩精品第二页| 国产精品一卡| 97精品在线| 久久精品亚洲人成影院 | 欧美一区三区| 天堂久久av| 日本久久黄色| 亚洲一区二区三区高清不卡| 日韩精品中文字幕一区二区| 国产欧美欧美| 99久久婷婷这里只有精品| 亚洲影院天堂中文av色| 欧美精品二区| 红桃视频亚洲| 久久99影视| 精品一区亚洲| 日韩一区二区三免费高清在线观看 | 日韩动漫一区| 国产一区福利| 国产精品美女久久久| 国产精品一区二区av交换 | 国产精品自在| 在线日韩av| 日韩av网站免费在线| 日韩在线二区| 日韩二区三区在线观看| 久久久久国产精品一区三寸| 亚洲欧美在线综合| 日韩一区二区中文| 欧美日韩在线精品一区二区三区激情综合| 裤袜国产欧美精品一区| 亚洲精品日本| 美女网站视频一区| 日韩精品乱码av一区二区| 日韩啪啪电影网| 日本不卡视频在线| 成人精品中文字幕| 免费在线欧美黄色| 亚洲尤物av| 蜜桃成人精品| 国产欧美一区二区精品久久久| 9久re热视频在线精品| 国产一区二区三区四区二区| 日韩在线a电影| 日韩欧美一区二区三区在线观看| 日韩高清不卡在线| 午夜在线精品偷拍| 日本在线精品| 国产成人久久精品麻豆二区 | 日本久久成人网| 国产精品99久久免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 香蕉人人精品| av中文字幕在线观看第一页| 国产精品一区二区美女视频免费看 | 日本精品另类| 久久国产精品毛片| 群体交乱之放荡娇妻一区二区| 国产精品99精品一区二区三区∴| 男女男精品视频网| 久久高清免费| 成人福利av| 欧美激情另类| 欧美国产中文高清| 久久国产精品免费精品3p| 亚洲午夜国产成人| 不卡av一区二区| 91看片一区| 日韩在线短视频| 久久久久久网| 色婷婷亚洲mv天堂mv在影片| 国产精品调教| 国产精品扒开腿做爽爽爽软件| 久久国内精品| 中文字幕av一区二区三区四区| 99久久精品费精品国产| 岛国av免费在线观看| 精品99久久| 国产aⅴ精品一区二区四区| 高清一区二区| 日韩大片免费观看| 天堂日韩电影|