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

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

js實現貪吃蛇游戲(簡易版)

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

本文實例為大家分享了js實現貪吃蛇游戲的具體代碼,供大家參考,具體內容如下

直接開始

效果圖:

js實現貪吃蛇游戲(簡易版)

項目結構:圖片自己找的

js實現貪吃蛇游戲(簡易版)

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’>開始</button> <button id=’parse’>暫停</button> <button id=’restart’>重新開始</button> <h4>最高分: <span id=’scoreMax’ style=’color:red;’>0</span></h4> <h4>分數: <span id=’score’ style=’color:skyblue;’>0</span></h4> <script src='http://www.hdgsjgj.cn/bcjs/js/config.js' type='text/javascript' charset='utf-8'></script> <script src='http://www.hdgsjgj.cn/bcjs/js/score.js' type='text/javascript' charset='utf-8'></script> <script src='http://www.hdgsjgj.cn/bcjs/js/area.js' type='text/javascript' charset='utf-8'></script> <script src='http://www.hdgsjgj.cn/bcjs/js/food.js' type='text/javascript' charset='utf-8'></script> <script src='http://www.hdgsjgj.cn/bcjs/js/snake.js' type='text/javascript' charset='utf-8'></script> <script src='http://www.hdgsjgj.cn/bcjs/js/move.js' type='text/javascript' charset='utf-8'></script> <script src='http://www.hdgsjgj.cn/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坐標,頭 this.body = []; // 二維數組,身體 this.snake = []; //完整的蛇 this.init(6); this.direction = ’down’; // 默認向下運動}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坐標,頭 this.body = []; // 二維數組,身體 this.snake = []; //完整的蛇 exit = []; this.direction = ’down’; // 默認向下運動 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(); }}

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 石英砂矿石色选机_履带辣椒色选机_X光异物检测机-合肥幼狮光电科技 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 商秀—企业短视频代运营_抖音企业号托管 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | 风信子发稿-专注为企业提供全球新闻稿发布服务 | 凝胶成像系统(wb成像系统)百科-上海嘉鹏 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 北京百度网站优化|北京网站建设公司-百谷网络科技 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 |