基于JS實(shí)現(xiàn)Flappy?Bird游戲的示例代碼
前言
Flappy Bird 是一款無(wú)盡的游戲,玩家可以控制一只鳥(niǎo)。玩家必須保護(hù)小鳥(niǎo)免于與管道等障礙物相撞。每次小鳥(niǎo)通過(guò)管道時(shí),分?jǐn)?shù)都會(huì)增加一。當(dāng)小鳥(niǎo)與管道碰撞或因重力而墜落時(shí),游戲結(jié)束。以下部分描述了構(gòu)建此游戲必須采取的步驟。
游戲可以通過(guò)這個(gè)鏈接進(jìn)入
實(shí)現(xiàn)代碼
HTML 部分:在此部分中,創(chuàng)建和加載游戲的元素。選擇背景、鳥(niǎo)類(lèi)、障礙和得分元素的圖像。接下來(lái),我們創(chuàng)建并鏈接 style.css 和 index.js 文件。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css" rel="external nofollow" >
</head>
<body>
<div class="background"></div>
<img class="bird" src="https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/e08da34488b114bd4c665ba2fa520a31.svg" alt="bird-img">
<div class="message">
按 Enter 開(kāi)始游戲
</div>
<div class="score">
<span class="score_title"></span>
<span class="score_val"></span>
</div>
<script src="gfg.js"></script>
</body>
</html>CSS 部分:在此部分中,根據(jù)需要修改游戲?qū)ο蟮拇笮?、位置和樣式?/p>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
height: 100vh;
width: 100vw;
}
.background {
height: 100vh;
width: 100vw;
background-color: skyblue;
}
.bird {
height: 100px;
width: 160px;
position: fixed;
top: 40vh;
left: 30vw;
z-index: 100;
}
.pipe_sprite {
position: fixed;
top: 40vh;
left: 100vw;
height: 70vh;
width: 6vw;
background-color: green;
}
.message {
position: fixed;
z-index: 10;
height: 10vh;
font-size: 10vh;
font-weight: 100;
color: black;
top: 12vh;
left: 20vw;
text-align: center;
}
.score {
position: fixed;
z-index: 10;
height: 10vh;
font-size: 10vh;
font-weight: 100;
color: goldenrod;
top: 0;
left: 0;
}
.score_val {
color: gold;
}JavaScript 部分:此部分包含控制游戲狀態(tài)和移動(dòng)對(duì)象的代碼部分。在本節(jié)中必須遵循以下步驟。
- 在 JavaScript 文件中獲取對(duì)鳥(niǎo)類(lèi)和背景圖像的引用。
- 為背景滾動(dòng)速度、小鳥(niǎo)的飛行速度和重力設(shè)置一些值。
- 創(chuàng)建無(wú)限滾動(dòng)背景??梢詮拇随溄娱喿x執(zhí)行此操作的指南。
- 添加一個(gè)事件偵聽(tīng)器來(lái)偵聽(tīng)“enter”按鍵以將游戲狀態(tài)更改為播放狀態(tài),并通過(guò)每幀從鳥(niǎo)的 y 坐標(biāo)減小重力值來(lái)將重力應(yīng)用于鳥(niǎo)。
- 在視圖寬度的末端生成障礙(管道),以便它們最初不可見(jiàn),但隨著背景的移動(dòng),將管道的 x 坐標(biāo)減小背景滾動(dòng)值,使其看起來(lái)像鳥(niǎo)在移動(dòng)。
- 應(yīng)用與地面和管道的碰撞,如果小鳥(niǎo)發(fā)生碰撞,則將游戲狀態(tài)更改為結(jié)束狀態(tài)并顯示一條消息以重新開(kāi)始游戲。
- 每次在管道之間成功導(dǎo)航后增加分?jǐn)?shù)值。
背景滾動(dòng)速度
let move_speed = 3;
重力常數(shù)值
let gravity = 0.5;
獲取 bird 元素的引用
let bird = document.querySelector('.bird');獲取 bird 元素屬性
let bird_props = bird.getBoundingClientRect();
部分 js 代碼
let background =
document.querySelector('.background')
.getBoundingClientRect();
// 獲取對(duì) score 元素的引用
let score_val =
document.querySelector('.score_val');
let message =
document.querySelector('.message');
let score_title =
document.querySelector('.score_title');
// 設(shè)置初始游戲狀態(tài)開(kāi)始
let game_state = 'Start';
// 為按鍵添加事件監(jiān)聽(tīng)器
document.addEventListener('keydown', (e) => {
// 按下回車(chē)鍵開(kāi)始游戲
if (e.key == 'Enter' &&
game_state != 'Play') {
document.querySelectorAll('.pipe_sprite')
.forEach((e) => {
e.remove();
});
bird.style.top = '40vh';
game_state = 'Play';
message.innerHTML = '';
score_title.innerHTML = 'Score : ';
score_val.innerHTML = '0';
play();
}
});
到這里就完成了。
到此這篇關(guān)于基于JS實(shí)現(xiàn)Flappy Bird游戲的示例代碼的文章就介紹到這了,更多相關(guān)JS Flappy Bird游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js正則表達(dá)式中test,exec,match方法的區(qū)別說(shuō)明
本篇文章主要是對(duì)js正則表達(dá)式中test,exec,match方法的區(qū)別進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01
使用純?cè)鶭S實(shí)現(xiàn)大文件分片上傳
前段時(shí)間在工作中接觸到了文件上傳的內(nèi)容,但業(yè)務(wù)中實(shí)現(xiàn)的功能比較簡(jiǎn)單,于是我想著能不能使用純?cè)姆绞綄?shí)現(xiàn)一個(gè)大文件的上傳DEMO,從而在本質(zhì)上學(xué)習(xí)大文件上傳的思路,本教程使用純?cè)膆tml+node.js實(shí)現(xiàn),需要的朋友可以參考下2024-06-06
JavaScript學(xué)習(xí)筆記之圖片庫(kù)案例分析
這篇文章主要介紹了JavaScript學(xué)習(xí)筆記之圖片庫(kù)案例,結(jié)合具體實(shí)例形式分析了javascript圖片庫(kù)相關(guān)的頁(yè)面元素動(dòng)態(tài)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-01-01
JS this作用域以及GET傳輸值過(guò)長(zhǎng)的問(wèn)題解決方法
專(zhuān)IE7瀏覽器,IE URL參數(shù)過(guò)長(zhǎng)問(wèn)題,引發(fā)HTTP Status 122報(bào)錯(cuò);this作用域問(wèn)題,對(duì)應(yīng)的解決方法如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08
詳解js的事件處理函數(shù)和動(dòng)態(tài)創(chuàng)建html標(biāo)記方法
本文主要對(duì)javascript的事件處理函數(shù),動(dòng)態(tài)創(chuàng)建html標(biāo)記的兩種方法進(jìn)行詳細(xì)介紹,具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12
js立即執(zhí)行函數(shù): (function ( ){})( ) 與 (function ( ){}( )) 有什么區(qū)別?
這篇文章主要介紹了js立即執(zhí)行函數(shù): (function ( ){})( ) 與 (function ( ){}( )) 有什么區(qū)別,需要的朋友可以參考下2015-11-11
詳解ES6實(shí)現(xiàn)類(lèi)的私有變量的幾種寫(xiě)法
這篇文章主要介紹了詳解ES6實(shí)現(xiàn)類(lèi)的私有變量的幾種寫(xiě)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

