基于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),我們創(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)類和背景圖像的引用。
- 為背景滾動(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) => { // 按下回車鍵開(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)文章
微信小程序使用input組件實(shí)現(xiàn)密碼框功能【附源碼下載】
這篇文章主要介紹了微信小程序使用input組件實(shí)現(xiàn)密碼框功能,涉及input組件布局設(shè)置相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2017-12-12layui添加動(dòng)態(tài)菜單與選項(xiàng)卡 AJAX請(qǐng)求的例子
今天小編就為大家分享一篇layui添加動(dòng)態(tài)菜單與選項(xiàng)卡 AJAX請(qǐng)求的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09bootstrap導(dǎo)航、選項(xiàng)卡實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了bootstrap導(dǎo)航、選項(xiàng)卡的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12JavaScript實(shí)現(xiàn)Tab欄切換特效
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)Tab欄切換特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06詳解Python中l(wèi)ogging日志模塊在多進(jìn)程環(huán)境下的使用
許多應(yīng)用程序中都會(huì)有日志模塊,用于記錄系統(tǒng)在運(yùn)行過(guò)程中的一些關(guān)鍵信息,以便于對(duì)系統(tǒng)的運(yùn)行狀況進(jìn)行跟蹤。這篇文章給大家主要介紹了在Python中l(wèi)ogging日志模塊在多進(jìn)程環(huán)境下的使用,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2016-12-12TypeScript中Array(數(shù)組)聲明與簡(jiǎn)單使用方法
這篇文章主要給大家介紹了關(guān)于TypeScript中Array(數(shù)組)聲明與簡(jiǎn)單使用的相關(guān)資料,TypeScript Array(數(shù)組)數(shù)組對(duì)象是使用單獨(dú)的變量名來(lái)存儲(chǔ)一系列的值,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12