創作內容

23 GP

JS網頁遊戲-ColorTest

作者:熾炎之翼│2022-07-07 01:02:41│巴幣:46│人氣:486
遊戲連結:
(請盡量以PC端遊玩,手機端(尤其iOS)音效可能會有延遲問題)


度度度
其實這次遊戲是我網頁程式設計的Final Project
不過也算我比較滿意的一次製作
所以就來分享&紀錄一下

遊戲本體:

遊戲介面一進去長這樣
左邊是規則書 右邊是計分板


當你調好設定
按下「開始遊戲」的按鈕遊戲就會正式開始


規則如左側所寫:
開局享有5點生命值
玩法就是找出並點擊異色的方塊
成功點擊得分並通往下一關
反之點擊到同色的方塊將失去1點生命
遊戲目標就是在有限時間以及有限生命內達到盡量高的分數

其餘按鍵功能可以參考左側規則書
至於最特殊的「提示功能」這邊就來特別講解一下

當遇到困難的版面時 如果達成條件(生命值大於1以及至少前進到第三關)
即可按下左上角的燈泡 消耗一點生命值使用提示功能


按下後即會剩下含異色方塊的九宮格



程式碼相關:

這次只使用了index.html、script.js、style.css
同樣王道簡單的架構 菜雞combo
程式碼都是open source
可以直接從GitHub上查看:https://github.com/SkyLiNing823/ColorTest

因為這次程式寫滿註解我就不再細細講解了
以下僅列出重要變數以及重要函式
從報告上複製貼上

重要變數:

hp:現有生命值。
floor:目前通過關卡數。
count:目前版面行列之邊長(方塊個數)。
record:遊戲結束後是否紀錄得分。
gameStart:遊戲是否已經開始。
hintUsed:是否使用過提示功能。
pause:是否處於暫停狀態。
soundeffect:音效是否開啟。
bgm:BGM是否開啟。


重要函式:

點擊開始/重啟遊戲按鈕 startBtn.addEventListener():
首先檢查BGM是否開啟而決定撥放與否,重置變數狀態以及按鈕貼圖,將狀態列設置好,設定倒計時,以2x2版面開始遊戲。

點擊暫停按鈕pauseBtn.addEventListener():
此功能遊戲開始後才可使用,透過變數pause(是否處於暫停狀態)而決定行動:
如果pause為false(並無處於暫停狀態),移除倒計時,並移除方塊點擊函式以鎖定版面,最後將按鈕貼圖更換並將變數pause以及record設為false,代表此局不可紀錄得分。
如果pause為true(處於暫停狀態),重新倒計時,重新綁定方塊點擊函式,最後將按鈕貼圖更換並將變數pause設為true,遊戲繼續進行。

點擊音效按鈕soundEffectBtn.addEventListener():
        透過變數soundeffect (音效是否開啟)而決定行動:
        如果soundeffect為true(音效開啟),則更換按鈕貼圖,並將soundeffect設為false。
        如果pause為false(音效關閉),則更換按鈕貼圖,並將soundeffect設為true。

點擊音效按鈕BGMBtn.addEventListener():
        透過變數bgm (BGM是否開啟)而決定行動:
        如果bgm為true(BGM開啟),則更換按鈕貼圖,並將bgm設為false。
        如果bgm為false(BGM關閉),則更換按鈕貼圖,並將bgm設為true。

點擊提示按鈕hintBtn.addEventListener():
如果滿足提示功能所有使用條件,點擊即可支付一點生命值來將將異色方塊處在的九宮格框起來,函式透過變數ansRow、ansCol確定異色方塊方位,並讓九宮格以外的色塊都上色為灰色。

異色色塊點擊clickansBtn():
首先檢查音效是否使用而決定是否撥放音效,更新關卡與得分,並透過createBlocks()生成新版面。

同色色塊點擊clickotherBtn():
        首先檢查音效是否使用而決定是否撥放音效,扣除hp並透過heartControll()調整生命值版面,同時檢查hp,剩下1將停用提示功能,剩下0則結算遊戲,並根據變數record決定是否紀錄分數。

時間用盡之結算timeOut():
        倒計時結束將觸發此函式,結算遊戲並根據變數 record決定是否紀錄分數。

倒數計時countDown():
用於倒計時,並且控制版面倒計時之數字變化。

控制版面hp貼圖 heartControll(hp):
        根據現有hp數量,更新版面上hp貼圖表示。

根據通過關卡數控制色差(難易度) randomControll()
        此函式會隨機回傳一個決定色差數值的數字,具體規則如下:
10關以內,數值範圍在20~35;
10~19關,數值範圍在15~30;
20~29關,數值範圍在10~25;
30~39關,數值範圍在5~20;
40關以後,數值範圍在5~15。

生成num*num版面 createBlocks(num):
        首先先將版面淨空,並隨機決定異色方塊之行列,然後用迴圈生成方塊。更新hint可否使用以及變數hintUsed以後,再自動調整方塊邊長(650 / count px),然後決定同色方塊之RGB(各介於50~210),接著隨機決定異色模式(0~14)。將所有色塊套入上述特性後,異色方塊再透過randomControll()得到的色差值根據異色模式進行上色,最後再將同色方塊與異色方塊綁定點擊函式。

紀錄得分recordAdd():
        將紀錄印在計分板上。



感想:

這次遊戲其實也是我目前寫過最像樣的網頁遊戲
在開發過程中也算是碰上不少壁 畢竟JS是真的沒碰多久
可是過程倒是非常開心 一步步看著遊戲功能越來越齊全給人難以言喻的興奮感
不過最重要的還是看到身邊朋友們玩得起勁的身影
讓我收穫了不少成就感 果然遊戲開發者最開心的事就是看到玩家享受著遊戲
這次開發可以說是讓我成功回想起自己喜歡上寫程式的初衷了

不過當然還是有小遺憾
本來還想最後加一個後端資料庫可以記錄大家的分數
讓網頁重啟後可以保留紀錄以及與其他人競爭分數高低
不過後來我沒想到怎麼用登入以外的方式區別玩家
(我不希望這種小型網頁遊戲還搞帳號功能)
所以後來也不了了之了
不過這種小型網頁遊戲或許也真的不太需要搞到這種程度
畢竟可能玩的人最後還到不了100個

至於手機端音效延遲的問題 其實主要是iOS的問題
總之就是他不支援音檔預載
所以每次要用音效都要重新載入而導致延遲
這點用原生JS偏無解 真的要解決必須用其他外部函式庫了
反正我也沒寫手機介面了 所以也就算了(X


最後 特別感謝
失戀症候群 提供的想法
B站UP VenixE 提供的BGM
交大DC群的各位神仙大佬 試玩提供的意見

以及願意遊玩這款遊戲的各位玩家~
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5503359
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 3 篇留言

樂小呈
309 分,讚歐

不知道是不是手機的問題,關卡比較大之後
切換關卡也會有越來越大的延遲(快半秒)

要不要試試異步載入?讓系統在上個關卡的時候就偷偷準備好下一關,這樣就能避免延遲了

07-07 08:49

熾炎之翼
啊確實 我忘記手機可能也有點關卡載入問題
感謝提供異步載入這個想法
如果是這樣應該就能改善這個問題了07-07 10:21
ソケノ‧諾
1分鐘349分[e12] (看來還可以?

07-08 14:52

熾炎之翼
蠻強的[e12]07-13 23:26
claryathk

你令我超想繼續寫那幾個minecraft plugin呢
可是可惡的微積分[e18]

09-01 00:53

熾炎之翼
想當初我微積分也是低空飛過
數學好難 [e3]09-01 00:56
我要留言提醒:您尚未登入,請先登入再留言

23喜歡★h32902227 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:2022/07/02 生... 後一篇:2022/07/07 生...

追蹤私訊切換新版閱覽

作品資料夾

a86189642祝福
看到的人會變得幸福哦!看更多我要大聲說3小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】