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

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

js實(shí)現(xiàn)貪吃蛇游戲(簡(jiǎn)易版)

瀏覽:178日期:2024-04-18 10:20:17

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

直接開(kāi)始

效果圖:

js實(shí)現(xiàn)貪吃蛇游戲(簡(jiǎn)易版)

項(xiàng)目結(jié)構(gòu):圖片自己找的

js實(shí)現(xiàn)貪吃蛇游戲(簡(jiǎn)易版)

1.html

<!DOCTYPE html><html> <head> <meta charset='utf-8' /> <title></title> <style type='text/css'> * { padding: 0; margin: 0; } </style> </head> <body> <canvas id=’view’ style='border:1px solid red;'></canvas> <button id=’start’>開(kāi)始</button> <button id=’parse’>暫停</button> <button id=’restart’>重新開(kāi)始</button> <h4>最高分: <span id=’scoreMax’ style=’color:red;’>0</span></h4> <h4>分?jǐn)?shù): <span id=’score’ style=’color:skyblue;’>0</span></h4> <script src='http://m.b3g6.com/bcjs/js/config.js' type='text/javascript' charset='utf-8'></script> <script src='http://m.b3g6.com/bcjs/js/score.js' type='text/javascript' charset='utf-8'></script> <script src='http://m.b3g6.com/bcjs/js/area.js' type='text/javascript' charset='utf-8'></script> <script src='http://m.b3g6.com/bcjs/js/food.js' type='text/javascript' charset='utf-8'></script> <script src='http://m.b3g6.com/bcjs/js/snake.js' type='text/javascript' charset='utf-8'></script> <script src='http://m.b3g6.com/bcjs/js/move.js' type='text/javascript' charset='utf-8'></script> <script src='http://m.b3g6.com/bcjs/js/init.js' type='text/javascript' charset='utf-8'></script> <script type='text/javascript'> var start = document.getElementById(’start’); var parse = document.getElementById(’parse’); var restart = document.getElementById(’restart’); start.onclick = function() { parse = false; } parse.onclick = function() { parse = true; } restart.onclick = function() { snake && snake.restart(); parse = false; } </script> </body></html>

2.area.js

function render(x, y, color, img) { ctx.beginPath(); ctx.fillStyle = color || ’red’; if (img) { ctx.drawImage(img, x * w, y * h, img.width, img.height); } else { ctx.fillRect(x * w, y * h, w, h); } ctx.closePath(); ctx.fill();}function clear(x, y) { ctx.clearRect(x * w, y * h, w, h);}

3.config.js

var exit = [];var parse = true;var view = document.getElementById(’view’);var ctx = view.getContext(’2d’);var width = 400, height = 400;var w = 20, h = 20;var maxX = (width / w) - 1, maxY = (height / h) - 1;var speed = 500;var scoreMax = 0;var imgsrcs = [ ’./img/snakeheadup.png’, //圖片自己找 ’./img/snakeheaddown.png’, ’./img/snakeheadleft.png’, ’./img/snakeheadright.png’];var imgs = [];var length = 4;for (var i = 0, len = imgsrcs.length; i < len; i++) { var img = new Image(20,20); img.src = imgsrcs[i]; imgs[i] = img;}var food, snake, move, score;

4.food.js

function Food() { this.init();}Food.prototype = { init: function() { this.update(); }, update: function() { var food = this.makeCoordinate(); this.food = food; var foodX = food[0]; var foodY = food[1]; this.render(foodX, foodY); }, render: function(x, y) { render(x, y, ’blue’); }, makeCoordinate: function() { var x = this.random(0, maxX); var y = this.random(0, maxY); for (var i = 0; i < exit.length; i++) { if (exit[i].toString() == [x, y].toString()) { return this.makeCoordinate(); } } return [x, y]; }, random: function(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }}

5.init.js

function init() { food = new Food(); snake = new Snake(); move = new Move(); score = new Score(); var timer = setInterval(function() { if (!parse) { snake.move(); } }, speed);}for (var j = 0; j < imgs.length; j++) { imgs[j].onload = function() { length--; if (length == 0) { init(); } }}

6.move.js

function Move() {}Move.prototype = { up: function(s) { snake.move(’up’); }, down: function(s) { snake.move(’down’); }, left: function(s) { snake.move(’left’); }, right: function(s) { snake.move(’right’); }}document.onkeydown = function(e) { var key = e.keyCode; if(!parse){ switch (key) { case 37: case 65: move.left(snake); break; case 38: case 87: move.up(snake); break; case 39: case 68: move.right(snake); break; case 40: case 83: move.down(snake); break; default: break; } }};

7.score.js

var scoreDom = document.getElementById(’score’);var scoreMaxDom = document.getElementById(’scoreMax’);function Score() { this.score = 0;}Score.prototype = { scoreAdd: function() { this.score += 1; scoreDom.innerHTML = this.score; }, scoreClear: function() { this.score = 0; scoreDom.innerHTML = 0; }, highScore: function() { scoreMax = scoreMax > this.score ? scoreMax : this.score; scoreMaxDom.innerHTML = scoreMax; }}

8.snake.js

function Snake() { this.head = [0, 5, imgs[1]]; // x,y坐標(biāo),頭 this.body = []; // 二維數(shù)組,身體 this.snake = []; //完整的蛇 this.init(6); this.direction = ’down’; // 默認(rèn)向下運(yùn)動(dòng)}Snake.prototype = { init: function(len) { len = len ? len > 10 ? 10 : len : 5; var head = this.head = [0, len, imgs[1]]; var body = this.body; for (var i = 0; i < len; i++) { body.push([0, i]); } this.getSnake(); }, restart: function() { ctx.clearRect(0, 0, width, height); this.head = [0, 5, imgs[1]]; // x,y坐標(biāo),頭 this.body = []; // 二維數(shù)組,身體 this.snake = []; //完整的蛇 exit = []; this.direction = ’down’; // 默認(rèn)向下運(yùn)動(dòng) this.init(6); food.update(); score.scoreClear(); }, eat: function() { var head = [this.head[0], this.head[1]]; var body = this.body; if (food.food.toString() == head.toString()) { food.update(); score.scoreAdd(); return true; } return false; }, update: function(direction) { var oldDirection = this.direction; this.direction = direction || this.direction; if ((this.direction == ’down’ && oldDirection == ’up’) || (this.direction == ’up’ && oldDirection == ’down’) || (this.direction == ’left’ && oldDirection == ’right’) || (this.direction == ’right’ && oldDirection == ’left’)) { this.direction = oldDirection; } if (this.direction == ’left’ && oldDirection != ’right’) { this.head[0] -= 1; this.head[2] = imgs[2]; } else if (this.direction == ’right’ && oldDirection != ’left’) { this.head[0] += 1; this.head[2] = imgs[3]; } else if (this.direction == ’up’ && oldDirection != ’down’) { this.head[1] -= 1; this.head[2] = imgs[0]; } else if (this.direction == ’down’ && oldDirection != ’up’) { this.head[1] += 1; this.head[2] = imgs[1]; } this.die(); }, gameOver: function() { alert(’game over!’) console.log(’game over!’); parse = true; score.highScore(); }, die: function() { var head = this.head; var x = head[0], y = head[1]; if (x < 0 || x > maxX || y < 0 || y > maxY) { this.gameOver(); } var body = this.body; for (var i = 0; i < body.length; i++) { if (body[i].toString() == [x, y].toString()) { this.gameOver(); } } }, render: function() { var snake = this.snake; for (var i = 0, len = snake.length; i < len; i++) { var item = snake[i]; render(item[0], item[1], ’green’, item[2]); } }, move: function(direction) { var head = this.head; var headCopy = head.slice(); //之前的頭 var body = this.body; body.push([headCopy[0], headCopy[1]]); this.update(direction); var eat = this.eat(); if (!eat) { var del = body.shift(); clear(del[0], del[1]); } this.getSnake(); }, getSnake: function() { var head = this.head; var body = this.body; var snake = this.snake = []; for (var i = 0, l = body.length; i < l; i++) { snake.push(body[i]); } snake.push(head); exit = []; for (var i = 0; i < snake.length; i++) { exit.push(snake[i]); } this.render(); }}

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲免费一区三区| 欧美/亚洲一区| 亚洲人www| 蜜臀久久久久久久| 日韩在线观看一区二区三区| 精品视频久久| 美女亚洲一区| 精品免费av一区二区三区| 国产精品亲子伦av一区二区三区| 日本视频一区二区| 国产精品高清一区二区| 国产精品原创| 在线综合视频| 麻豆中文一区二区| 日韩精彩视频在线观看| 一区福利视频| 视频一区中文字幕| 亚洲日本国产| 日韩激情精品| 国产欧美日韩一区二区三区在线| 精品久久精品| 欧美日韩在线网站| 在线视频亚洲欧美中文| 日韩av一区二区在线影视| 久久成人福利| 日本免费一区二区三区四区| 欧美久久精品一级c片| 男人天堂欧美日韩| 欧美精品中文字幕亚洲专区| 国内揄拍国内精品久久| 欧美男人天堂| 亚洲欧美日本视频在线观看| 国产日韩一区二区三区在线播放| 国产精品二区不卡| 日韩午夜在线| 国产三级一区| 三级小说欧洲区亚洲区| 亚洲综合不卡| 美女在线视频一区| 四虎影视精品| 欧美天堂视频| 精品一区二区三区亚洲| 免费日韩成人| 国产免费成人| 久久久天天操| 日本欧美久久久久免费播放网| 国产高潮在线| 青青草91久久久久久久久| 欧美在线网站| 成人精品久久| 国产精品国产一区| 欧美日韩日本国产亚洲在线| 视频精品一区| 国产精品久久观看| 日韩专区欧美专区| 久久精品九色| 另类av一区二区| 欧美国产三级| 国产视频欧美| 国际精品欧美精品| 亚洲天堂久久| 国产精品对白| 好吊一区二区三区| 欧美精品不卡| 日韩精品一级中文字幕精品视频免费观看| 国产精品巨作av| 亚洲精品中文字幕乱码| 欧美日韩一视频区二区| 午夜精品网站| 国内揄拍国内精品久久| 一级欧美视频| 999视频精品| 欧美交a欧美精品喷水| 久久高清免费观看| 久久九九精品| 国产精品主播在线观看| 亚洲自啪免费| 欧美一区二区性| 麻豆国产欧美一区二区三区| 国产精品呻吟| 欧美午夜精彩| 亚洲婷婷免费| 国产精品一级在线观看| 蜜臀a∨国产成人精品| 日韩福利在线观看| 日韩三区免费| 日韩一区二区三区在线看| 国产精品一二| 99riav1国产精品视频| 国产精品手机在线播放| 精品国产第一福利网站| 黄毛片在线观看| 日韩手机在线| 亚洲手机在线| 亚洲欧洲高清| 鲁大师精品99久久久| 亚洲中字黄色| 欧美日韩在线观看首页| 亚洲tv在线| 香蕉精品久久| 日韩av福利| 婷婷激情一区| 国产成人精品一区二区免费看京| 日韩精品一二三区| 好看的亚洲午夜视频在线| 国产视频一区二| 亚洲国内欧美| 欧美日韩色图| 九一国产精品| 久久精品主播| 欧美精品激情| 久久中文在线| 9国产精品视频| 国产精品毛片久久| 老牛国内精品亚洲成av人片 | 性欧美xxxx免费岛国不卡电影| 9色精品在线| 99久久99久久精品国产片果冰| 久久精品国产亚洲一区二区三区| 综合国产精品| 免费成人性网站| 亚洲一区二区动漫| 亚洲免费成人| 女人天堂亚洲aⅴ在线观看| 首页国产精品| 欧美视频一区| 91精品国产自产观看在线 | 欧美激情91| 国产欧美日韩一区二区三区四区 | 午夜电影一区| 久久精品国产福利| 午夜av一区| 国产精品4hu.www| 国产精品av一区二区| 欧美日本二区| 女人天堂亚洲aⅴ在线观看| 尤物tv在线精品| 亚洲91久久| 一区二区三区四区在线观看国产日韩| 999久久久精品国产| 久久精品导航| 国产专区一区| 玖玖玖国产精品| 精品三区视频| 久久精品国内一区二区三区| 国产成人精品一区二区免费看京| 国产美女高潮在线| 欧美精品一区二区久久| 欧美专区在线| 青草综合视频| 成人精品动漫一区二区三区| 亚洲一级少妇| 亚洲一区日韩在线| 日韩亚洲精品在线观看| 欧美激情麻豆| 精品国产麻豆| 麻豆精品蜜桃| 久久国产精品久久w女人spa| 日韩激情网站| 精品国产成人| 99香蕉国产精品偷在线观看 | 成人羞羞视频在线看网址| 极品裸体白嫩激情啪啪国产精品| 免费的成人av| 美腿丝袜亚洲一区| 亚洲一级二级| 日韩在线观看中文字幕| 久久精品女人| 亲子伦视频一区二区三区| 欧美理论视频| 日本一区中文字幕| 精品国产中文字幕第一页 | 中文字幕在线免费观看视频| 亚洲性色视频| 日韩高清在线不卡| 国产一区二区三区精品在线观看 | 日韩久久电影| 欧美国产91| 日韩精品免费观看视频| 欧美久久久网站| 日韩和欧美一区二区| 伊人久久大香伊蕉在人线观看热v| 日韩精品一区二区三区中文在线| 欧美国产偷国产精品三区| 日本精品国产| 亚洲二区视频| 91青青国产在线观看精品| 久久激情av| 国产欧美一区二区三区精品观看| 日韩精品欧美精品| 欧美男人天堂| 久久久久久久久久久妇女| 亚洲一区二区免费在线观看| 精品国产欧美日韩| 一区二区三区四区精品视频| 精品一区二区三区的国产在线观看| 在线亚洲观看| 国产日韩欧美一区二区三区在线观看| 欧美不卡高清| 精品国产不卡一区二区|