使用 Vanilla JavaScript 构建一个简单的街机游戏 - DOM 操作🚀
我们将涵盖的内容
解决该问题的过程
1.布局
样式
2. JavaScript
已完成的程序
最初发表在我的博客MullinStack上
对于初入 JavaScript 世界的人来说,今天是个特殊的日子。掌握这门手艺的唯一方法就是实践,今天我们要亲自动手,开始提升我们的 DOM 操作技能。怎么做呢?用原生 JavaScript 构建一个简单的街机游戏。重复一遍,这只是 DOM 操作的练习。
尽管这篇文章是针对初学者和新手的,但这并不意味着更有经验的开发人员不会发现它有用。
我们将涵盖的内容
- CSS 和 JavaScript 的基础知识。
- Flexbox 的基础,CSS3 网页布局模型。
- 使用 JavaScript 动态操作 DOM。
- 演练。
街机游戏具有以下要求:
- 它使用图像作为背景,并有一个可点击的鸭子图像。
- 当用户点击鸭子时,会发生两件事:
- 当前分数增加一分,
- 鸭子移动到随机位置。
- 它应该使用 ES6 规范特性来构建。
- 它使用 Flexbox 进行布局。
很简单。现在怎么办?一般来说,处理这类问题,我们首先要思考要遵循的方法和方案。这意味着我们需要弄清楚每个步骤以及完成这些要求所需的细节。让我们来分解一下。
解决该问题的过程
为了解决这个难题,我们将按照给定的顺序执行以下步骤。分而治之,方能取胜!
- 使用资产(背景图像和鸭子)和分数框实现布局。
- 当我点击鸭子时,我需要什么?我们需要一个事件监听器,当我们点击它时,它会触发一个事件。
- 创建一个函数来增加当前分数。
- 创建一个函数来随机移动鸭子。
不用多说,让我们开始行动吧。
1.布局
我们的布局 (index.html) 将包含一个 div 作为容器,以及两张图片作为背景和鸭子。最后,还有一个scoreContainer元素,其中包含分数文本和分数(计数器)。
<div class="container">
<img src="https://bit.ly/2Q4q14a" />
<img id="duck" src="https://bit.ly/2KQJVKc" alt="duck" />
<div class="scoreContainer">
<div id="score-text">Score</div>
<div id="score-counter">0</div>
</div>
</div>
样式
/*Make any img element responsive*/
img {
max-width: 100%;
}
/*Set a fixed size for width and height and in an absolute position*/
#duck {
margin: 50px;
width: 100px;
height: 100px;
position: absolute;
left: 100px;
top: 100px;
}
/*Style for the Score container*/
.scoreContainer {
background-color: black;
width: 15%;
height: 15%;
color: #ffffff;
top: 5%;
right: 5%;
border: 2px solid greenyellow;
border-radius: 10px;
display: flex;
position: fixed;
flex-direction: column;
align-items: center;
}
#score-text {
font-size: 1.5em;
}
#score-counter {
font-size: 3.1em;
font-weight: bold;
color: #06e515;
}
2. JavaScript
2.1 创建事件监听器
现在,我们将在鸭子图像上创建一个事件监听器。当用户点击鸭子图像时,它将触发一个函数。
//Get the target element
const duck = document.querySelector("#duck");
//Add the click event listener
duck.addEventListener("click", () => {
//Dont forget call the functions here
increaseScore();
moveDuck();
});
2.2 创建一个增加当前分数的函数
我们刚刚创建了事件监听器。现在,我们要创建一个函数,让计数器(也就是我们的分数)加一。
//Increase score by 1
const increaseScore = () => {
//Get the content of the target element. The current value for score
const score = document.querySelector("#score-counter").innerHTML;
//Get the element to increase the value
const scoreHTML = document.querySelector("#score-counter");
//Cast the score value to Number type
let count = Number(score);
//Set the new score to the target element
scoreHTML.innerHTML = count + 1;
};
2.3 创建一个函数来随机移动鸭子
现在该移动鸭子了。不过,由于鸭子会随机移动,因此最好创建一个辅助函数来获取随机数,以便稍后设置鸭子的随机位置。让我们创建这个函数:
//Get a random number
const getRandomNum = (num) => {
return Math.floor(Math.random() * Math.floor(num));
}
现在,我们将创建一个函数来移动鸭子。我们使用innerWidth
属性获取窗口的内部宽度(以像素为单位),使用innerHeight
属性获取窗口的内部高度(以像素为单位)。此外,我们使用该getRandomNum
函数设置 top 和 left 属性的像素值,以影响鸭子的垂直和水平位置。
/*
Move the duck randomly
*/
const moveDuck = () => {
const w = window.innerWidth;
const h = window.innerHeight;
duck.style.top = getRandomNum(w) + "px";
duck.style.left = getRandomNum(h) + "px";
};
今天就到这里!希望你通过这个简单的指南,对 DOM 操作有了一定的了解。
已完成的程序
感谢阅读!如果觉得这个故事有趣,请分享给你的朋友,我会非常感激。
欢迎通过我的博客和Medium与我联系
文章来源:https://dev.to/blarzhernandez/build-a-simple-arcade-game-with-vanilla-javascript-dom-manipulation-50en