製作一個挑戰打字速度遊戲
成品:
成品功能:
- 可以在中間的空格打字比對題目是否正確
- 中間空格左上角有倒數計時右邊會顯示分數(都是即時反應)
- 當遊戲失敗會顯示不一定的圖示,顯示得到幾分並且有一個 Reload 按鈕重啟遊戲
- 瀏覽器中間上方有一個選取難度的下拉式選單 5.左下角有個設定按鈕可以決定”設定”是否出現(決定難度的地方)
HTML
上 CSS 之前的 HTML:
html 程式碼:
1 |
|
CSS:
CSS 設置好的樣式
CSS 完整程式碼
1 | * { |
小補充:
無
JS:
變數設置
word
抓取顯示題目的區域
text
抓取輸入答案的區域
socreEl
抓取顯示分數的區域
timeEl
抓取顯示時間的區域
endgameEl
遊戲結束時覆蓋整個區域的<div>
settingBtn
抓取設定按鈕的區域- 當點擊時會讓難易度下拉式選單顯示或是消失
settings
抓取整個上方區塊- 用來對應點擊設定按鈕後難易度視窗的顯示或是消失
settingsForm
抓取難易度區塊- 使用 change 事件把 difficulty 存取到 localStorage 裡面
difficultySelect
抓取內部的下拉式選單內容- 被 localStorage 重新賦值或是如果為空的話則預設 medium
functions:
- 初始化題目
- 初始化分數
- 初始化時間
- 初始化難易度 - 這邊使用三元邏輯判斷如果 LS 內容不為空則顯示內容不然就預設 medium
- 把 LS 的紀錄重新賦值給 difficultySelect
- 設定進入頁面的 Focus
- 設定更新時間(倒數時間)的間隔為一秒
1 | //init word |
getRandomWord()
- 使用數學方法來隨機的抽取題目addWordToDOM()
- 把抽取到的題目呈現到 DOM 上updateScore()
- 更新分數蠻值觀的就直接 socre++updateTime()
- 更新時間也是使用 time++不過重點是要避免超過 0 秒所以要加入判斷式終止倒數並且使用gameOver()
gameOver()
- 做出遊戲結束時的頁面並且修改 class 為 flex 讓頁面可以呈現
1 | //隨機取陣列中物件的方法 |
事件監聽
text
也就是 input 區域,當輸入的文字符合題目時:
- 顯示下一題答案
- 更新加分的分數
- 清空上一題的內容
- 判斷當下的難度後選擇要加多少秒數
- 更新時間
1 | //typing |
settingBtn
當點擊設定按鈕
讓難易度選擇區塊顯示或隱藏
1 | //讓難易度選擇區塊顯示或隱藏(settings btn click) |
settingForm
當下拉式選單的值改變時存進去 localStorage 當下的 diffuculty 的值
1 | //當下拉式選單的值改變時存進去LS當下的diffuculty |
JS 完整程式碼:
1 | const word = document.getElementById('word'); |