当前位置: 首页 > news >正文

网站建设公司上海做网站公司头条搜索

网站建设公司上海做网站公司,头条搜索,动态设计是什么意思,预约网免费建站流程我在昨天的文章(贪吃蛇HTML源码)里面分享了网页版贪吃蛇小游戏的源码,今天就来给大家详细讲解一下每部分代码是如何运作的,以及以后要如何美化贪吃蛇的UI界面,在哪里修改等。 目录 一、代码运作 1、HTML结构: 2、C…

 我在昨天的文章(贪吃蛇HTML源码)里面分享了网页版贪吃蛇小游戏的源码,今天就来给大家详细讲解一下每部分代码是如何运作的,以及以后要如何美化贪吃蛇的UI界面,在哪里修改等。

目录

一、代码运作

1、HTML结构:

2、CSS样式:

3、JavaScript代码:

二、补充知识

1、详细解释一下:

 2、在我们的贪吃蛇游戏中的应用:

三、如何优化UI

1、加载图片:

 2、修改绘制蛇的函数:

 3、修改绘制食物的函数:

 4、等待图片加载完成后开始游戏:


一、代码运作

1、HTML结构:

<!DOCTYPE html>
<html lang="en">
<head><!-- head内容 -->
</head>
<body><canvas id="gameCanvas" width="400" height="400"></canvas><script>// JavaScript代码</script>
</body>
</html>

这是基本的HTML结构。<canvas>元素用于绘制游戏,而<script>标签包含了所有的JavaScript代码。

2、CSS样式:

<style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #333;}canvas {border: 1px solid #fff;}
</style>

这些CSS规则用于居中显示游戏画布并设置背景颜色。

3、JavaScript代码:

const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');

这里获取了canvas元素并创建了2D绘图上下文,用于在canvas上绘制图形。

const GRID_SIZE = 20;
const CELL_SIZE = canvas.width / GRID_SIZE;

这定义了网格大小和每个单元格的尺寸。

let snake = [{ x: 5, y: 10 },{ x: 4, y: 10 },{ x: 3, y: 10 }
];

初始化蛇的位置,蛇由一系列坐标点组成。

let food = {x: Math.floor(Math.random() * GRID_SIZE),y: Math.floor(Math.random() * GRID_SIZE)
};

随机生成食物的位置。

function moveSnake() {// 移动蛇的逻辑
}

这个函数处理蛇的移动,包括检查是否吃到食物或撞到墙壁。

function drawSnake() {// 绘制蛇的逻辑
}function drawFood() {// 绘制食物的逻辑
}function drawGrid() {// 绘制网格的逻辑
}

这些函数负责在canvas上绘制游戏元素。

function startGame() {gameInterval = setInterval(function() {moveSnake();drawSnake();drawFood();}, gameSpeed);
}

startGame函数使用setInterval定期调用游戏的核心函数,实现游戏循环。

document.addEventListener('keydown', (event) => {// 处理键盘输入
});

这段代码监听键盘事件,用于控制蛇的方向。

这个游戏的核心在于不断更新蛇的位置,检查碰撞,然后重新绘制游戏状态。通过setInterval函数,我们可以定期执行这些操作,从而创建一个简单但功能完整的贪吃蛇游戏。

二、补充知识

很多0基础的朋友们看不太懂ctx.fillStyle还有ctx.strokeStyle这些用法,这些其实都是canvas中的用法。

ctx.fillStylectx.strokeStyle 以及其他许多 ctx 相关的属性和方法都是 HTML5 Canvas API 的一部分。

1、详细解释一下:

  1. ctx 是什么: 当我们调用 canvas.getContext('2d') 时,我们获得了一个 CanvasRenderingContext2D 对象,通常我们将它赋值给 ctx。这个对象提供了在 canvas 上绘图的所有方法和属性。
  2. 常用的 Canvas 属性和方法:
    • ctx.fillStyle: 设置或返回用于填充绘画的颜色、渐变或模式。 例如:ctx.fillStyle = '#fff'; 设置填充颜色为白色。
    • ctx.strokeStyle: 设置或返回用于笔触的颜色、渐变或模式。 例如:ctx.strokeStyle = '#444'; 设置线条颜色为深灰色。
    • ctx.fillRect(x, y, width, height): 绘制一个填充的矩形。 例如:ctx.fillRect(10, 10, 100, 100); 在坐标(10,10)处绘制一个100x100的填充矩形。
    • ctx.beginPath(): 开始一个新的绘制路径。
    • ctx.moveTo(x, y): 将绘图游标移动到指定的坐标。
    • ctx.lineTo(x, y): 添加一个新点,然后创建一条从该点到最后指定点的线条。
    • ctx.stroke(): 绘制已定义的路径。

 2、在我们的贪吃蛇游戏中的应用:

function drawSnake() {ctx.fillStyle = '#fff';snake.forEach(segment => {ctx.fillRect(segment.x * CELL_SIZE, segment.y * CELL_SIZE, CELL_SIZE, CELL_SIZE);});
}

这段代码将填充颜色设置为白色(#fff),然后为蛇的每个部分绘制一个填充矩形。

function drawGrid() {ctx.strokeStyle = '#444';for (let x = 0; x <= canvas.width; x += CELL_SIZE) {ctx.beginPath();ctx.moveTo(x, 0);ctx.lineTo(x, canvas.height);ctx.stroke();}// ... 绘制水平线的代码
}

这段代码设置线条颜色为深灰色(#444),然后使用路径绘制方法画出网格线。

Canvas API 提供了强大而灵活的 2D 绘图能力,可以用于创建各种图形、动画和游戏。在我们的贪吃蛇游戏中,我们只使用了它的一小部分功能。如果对 Canvas 绘图感兴趣,还有很多有趣的技术可以探索,比如绘制圆形、添加渐变色、使用变换等。

三、如何优化UI

最基本的优化就是改变蛇和食物的外观了,于是我加了几个加载图片的代码

1、加载图片:

const headImg = new Image();
const bodyImg = new Image();
const tailImg = new Image();
const foodImg = new Image();
headImg.src = 'img/head.png';
bodyImg.src = 'img/body.png';
tailImg.src = 'img/tail.png';
foodImg.src = 'img/food.png';

 2、修改绘制蛇的函数:

function drawSnake() {// ... (前面的代码保持不变)snake.forEach((segment, index) => {let img;if (index === 0) {img = headImg;} else if (index === snake.length - 1) {img = tailImg;} else {img = bodyImg;}ctx.save();ctx.translate(segment.x * CELL_SIZE + CELL_SIZE / 2, segment.y * CELL_SIZE + CELL_SIZE / 2);// 根据蛇的方向旋转图片if (index === 0) {switch (direction) {case 'up':ctx.rotate(-Math.PI / 2);break;case 'down':ctx.rotate(Math.PI / 2);break;case 'left':ctx.rotate(Math.PI);break;case 'right':// 默认方向,不需要旋转break;}}ctx.drawImage(img, -CELL_SIZE / 2, -CELL_SIZE / 2, CELL_SIZE, CELL_SIZE);ctx.restore();});
}

 3、修改绘制食物的函数:

function drawFood() {ctx.drawImage(foodImg, food.x * CELL_SIZE, food.y * CELL_SIZE, CELL_SIZE, CELL_SIZE);
}

 4、等待图片加载完成后开始游戏:

Promise.all([new Promise(resolve => headImg.onload = resolve),new Promise(resolve => bodyImg.onload = resolve),new Promise(resolve => tailImg.onload = resolve),new Promise(resolve => foodImg.onload = resolve)
]).then(() => {resetGame();
});

于是我美化成了这样,哈哈哈哈哈哈,想要完整代码和素材的拿去即可

网盘链接:夸克网盘分享

CSDN下载链接:【免费】0基础制作HTML网页小游戏-贪吃蛇(附详细解析)资源-CSDN文库

http://www.15wanjia.com/news/9707.html

相关文章:

  • linux做网站教程阐述网络推广的主要方法
  • 凡科做的网站不能被收录石家庄seo网站管理
  • 东莞企业营销型网站建设品牌网络seo方案外包
  • 小游戏网站怎么做武汉seo 网络推广
  • wordpress亮相关键词快速优化排名软件
  • 长沙好的网站建设公司最新的疫情防控政策和管理措施
  • 什么是权重高的网站公司seo是什么职位
  • 买了云服务器怎么做网站查关键词热度的网站
  • 免费网站建设排行表国家重大新闻
  • 物流网站首页图片成都seo
  • 崇礼做网站的公司seo自动工具
  • wordpress域名访问东莞优化网站制作
  • 个体户能否从事网站建设软文推广发布
  • 找i满洲做卖房广告不收费的网站常见的网络推广方式有哪些
  • 龙之向导外贸官方网站魔贝课凡seo课程好吗
  • 中文旅游网站html模板辽源seo
  • 自己怎么做电影网站seo下载站
  • 如何在腾讯云上网站建设宁波关键词排名优化
  • 免费推广做产品的网站手机百度搜索app
  • github部署wordpress独立站seo推广
  • 网站开发 招聘郑州关键词网站优化排名
  • 网站改版设计注意事项必应搜索引擎首页
  • 网站推荐几个免费的北京关键词快速排名
  • 湛江城市建设培训中心网站网站seo收费
  • 建站教程pdf网络推广方法有哪些
  • 做wish选品网站 数据网站关键词seo深圳
  • 合肥网站关键词seo优化公司今日最新国际新闻
  • 哪个公司做网站好苏州手机百度搜索
  • 广州做网站的价格推广普通话手抄报简单又好看
  • wordpress拖动建站怎么seo关键词优化排名