JavaScript制作贪吃蛇小游戏,前端开发基础视频教程

本文介绍了如何使用Game.js库构建一个简单的蛇游戏,包括表格布局、蛇的移动逻辑、键盘事件处理和定时器渲染。同时,作者分享了一份前端开发学习资料,涵盖了HTML、CSS、JavaScript等知识点,旨在帮助开发者系统学习和提升技能。
摘要由CSDN通过智能技术生成

Game.js

function Game() {

this.row = 25; // 行数

this.col = 25; // 列数

this.score = 0; //分数

this.init(); //初始化节点

this.snake = new Snake(); //实例化蛇类–绑定到Game()中 原型链来找

this.food = new Food(this); //初始化食物

// this.last = new Last();

this.start(); //执行定时器任务

this.bindEvent(); //键盘的事件监听

this.d = ‘R’;

}

//创建对象Game 里面写上它的属性(特征)↑

Game.prototype.init = function() {

this.dom = document.createElement(‘table’);

// 创建表格–父元素为document(页面中创建表格)

var tr, td;

// 遍历行和列

for (var i = 0; i < this.row; i++) {

tr = document.createElement(‘tr’); // 创建行

for (var j = 0; j < this.col; j++) {

td = document.createElement(‘td’); // 创建列

tr.appendChild(td); // 把列追加到行

}

this.dom.appendChild(tr); // 把行追加到表格

}

document.querySelector(‘#app’).appendChild(this.dom); //把表格追加到div里

}

// 遍历表格,清除表格上的颜色(画布上不停的渲染)

Game.prototype.clear = function() {

for (var i = 0; i < this.row; i++) {

for (var j = 0; j < this.col; j++) {

this.dom.getElementsByTagName(‘tr’)[i].getElementsByTagName(‘td’)[j].style.background = ‘’;

this.dom.getElementsByTagName(‘tr’)[i].getElementsByTagName(‘td’)[j].innerHTML = ‘’;

}

}

}

// 设置颜色的方法 让表格的第几行,第几列设置什么颜色

Game.prototype.setColor = function(row, col, color) {

this.dom.getElementsByTagName(‘tr’)[row].getElementsByTagName(‘td’)[col].style.background = color;

}

// 设置蛇头

Game.prototype.setColorHead = function(row, col) {

var img = document.createElement(‘img’);

img.src = ‘img/head.png’;

img.className = ‘snake’;

this.dom.getElementsByTagName(‘tr’)[row].getElementsByTagName(‘td’)[col].appendChild(img);

// this.dom.getElementsByTagName(‘tr’)[row].getElementsByTagName(‘td’)[col].style.backgroundColor=‘transparent’

switch (this.d) {

case ‘R’: //右

break;

case ‘D’: //下

img.style.transform = ‘rotate(90deg)’;

break;

case ‘L’: //左

img.style.transform = ‘rotate(180deg)’;

break;

case ‘U’: //上

img.style.transform = ‘rotate(-90deg)’;

break;

}

}

// 渲染食物

Game.prototype.setHTML = function(row, col) {

this.dom.getElementsByTagName(‘tr’)[row].getElementsByTagName(‘td’)[col].style.backgroundImage = ‘url(./img/food.png)’;

}

// 设置键盘的事件监听

Game.prototype.bindEvent = function() {

var self = this;

document.addEventListener(‘keydown’, function(e) {

// 用ASCII码值判断键盘方向

switch (e.keyCode) {

case 37: //左

if (self.snake.direction == ‘R’) return; // 先进行判断,如果当前的方向是向右移动,此时我们不能按左键

self.snake.changeDirection(‘L’);

self.d = ‘L’;

break;

case 38: //上

if (self.snake.direction == ‘D’) return; // 先进行判断,如果当前的方向是向下移动,此时我们不能按上键

self.snake.changeDirection(‘U’);

self.d = ‘U’;

break;

case 39: //右

if (self.snake.direction == ‘L’) return; // 先进行判断,如果当前的方向是向左移动,此时我们不能按右键

self.snake.changeDirection(‘R’);

self.d = ‘R’;

break;

case 40: //下

if (self.snake.direction == ‘U’) return; // 先进行判断,如果当前的方向是向上移动,此时我们不能按下键

self.snake.changeDirection(‘D’);

self.d = ‘D’;

break;

}

})

}

Game.prototype.start = function() {

// 帧编号

this.f = 0;

// 定时器里面的核心就是游戏的渲染本质:清屏-更新-渲染

this.timer = setInterval(function() {

game.f++;

// document.getElementById(‘f’).innerHTML = ‘帧编号:’ + game.f;

// document.getElementById(‘score’).innerHTML = ‘分数:’ + game.score;

// 清屏

game.clear();

// 蛇的运动(更新)

// 蛇的更新速度,当蛇变长的时候,速度要加快

var during = game.snake.body.length < 30 ? 30 - game.snake.body.length : 1;

game.f % during == 0 && game.snake.update();

// game.snake.update();

// 渲染蛇

game.snake.render();

// 渲染食物

game.food.render();

}, 10)

}

Snake.js

function Snake() {

// 蛇的初始化身体

this.body = [

{ ‘row’: 3, ‘col’: 5 },

{ ‘row’: 3, ‘col’: 4 },

{ ‘row’: 3, ‘col’: 3 },

{ ‘row’: 3, ‘col’: 2 }

];

this.direction = ‘R’; //信号量,设置运动方向

this.willDirection = ‘R’; //即将改变的方向,目的就是为了方向出现原地调头的情况

}

Snake.prototype.render = function() {

// 蛇头的渲染

game.setColorHead(this.body[0].row, this.body[0].col);

// 蛇身的渲染

for (var i = 1; i < this.body.length; i++) {

game.setColor(this.body[i].row, this.body[i].col, ‘#649c49’)

}

}

// 蛇的运动

Snake.prototype.update = function() {

this.direction = this.willDirection;

switch (this.direction) {

case ‘R’: //右

this.body.unshift({ ‘row’: this.body[0].row, ‘col’: this.body[0].col + 1 });

break;

case ‘D’: //下

this.body.unshift({ ‘row’: this.body[0].row + 1, ‘col’: this.body[0].col });

break;

case ‘L’: //左

this.body.unshift({ ‘row’: this.body[0].row, ‘col’: this.body[0].col - 1 });

break;

case ‘U’: //上

this.body.unshift({ ‘row’: this.body[0].row - 1, ‘col’: this.body[0].col });

break;

}

// 死亡的判断,超出了表格边缘的部分

if (this.body[0].col > game.col - 1 || this.body[0].col < 0 || this.body[0].row > game.row - 1 || this.body[0].row < 0) {

alert(‘撞到墙了哦,一共吃掉了’ + game.score + ‘颗草莓’);

this.body.shift();

// 删除时因为当前的头增时不合法的,因此游戏已经结束了

clearInterval(game.timer);

location.reload();

}

// 自己撞到自己的时候会判定死亡

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

基础面试题

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

主要内容包括:HTML,CSS,JavaScript,浏览器,性能优化等等

-1711642443682)]
[外链图片转存中…(img-NefZy0wY-1711642443683)]
[外链图片转存中…(img-Y2JrTxB9-1711642443683)]
[外链图片转存中…(img-m7nl1sXl-1711642443684)]
[外链图片转存中…(img-BLmmet0a-1711642443684)]
[外链图片转存中…(img-sq3nQpxd-1711642443685)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-50RXmhR9-1711642443685)]

基础面试题

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

主要内容包括:HTML,CSS,JavaScript,浏览器,性能优化等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值