---
# System prepended metadata

title: '第22組邏輯設計期末專案 : Tatsujin'

---

# 第22組邏輯設計期末專案: Tatsujin
**E94116148  蘇凡誠
  E94114073  張哲維 
  E94111059  許評詔 
  E94116180  陳柏元**


## 一、專題構想
聖翔有天突然就在想，要是家裡就能打太鼓達人那該有多好，這樣在無聊的暑假就不用出門找樂子了。於是為了滿足弟弟的需求，凡誠就設計了一個陽春版”RGB點陣 ”的太鼓達人，並用按鈕代替了鼓和另外找尋了三首歌設計在其中。
## 二、預期目標
#### 用verilog寫出一個模仿太鼓達人的遊戲，用外接的三個大按鈕模擬鼓面當作輸入。遊戲分成關卡選取畫面、遊玩畫面以及分數結算畫面，每個畫面都有各自的動畫。
1. **關卡選取畫面** : 利用紅色藍色按鈕切換要挑戰的關卡，黃色按鈕確認並開始遊戲。螢幕上會顯示關卡名稱，並且會提示如何操作。
2. **遊玩畫面** : 分成上下兩個部分。上半部是顯示目前累積分數，下半部為音符顯示的地方。玩家要在紅或藍色的音符靠近判斷線時按下對應按鈕，越接近判斷線則分數越高，並且連續正確打擊會有分數加成。
3. **分數結算畫面** : 將玩家的最終分數顯示在螢幕上，且提示按下黃色按鈕可以返回關卡選取畫面重新遊玩。

## 三、設計思路
- **邏輯設計**：使用FSM控制遊戲的狀態 (開始, 選擇曲目, 遊戲進行, 結束狀態)。
- **點陣渲染**：利用case來儲存每個畫面的輸出數據，並在不同的狀態呈現在點陣上。
- **顯示鼓點**：使用偏移量來產生平滑的移動效果。
- **得分系統**：根據玩家擊打的準確度和連擊來計算得分，實現即時反饋。

## 四、實作方法
用 verilog 來設計電路並利用PYNQ-Z2、三個大按鈕、全彩LED點矩陣以及麵包板來實現太鼓達人遊戲。

細部內容如下:
1. **樂譜紀錄**：用兩bit來記錄一個音符，00代表沒有音符，01代表紅色，10代表藍色。
2. **畫面顯示**：依據當前畫面連接畫面資料，若有音符則會從暫存中讀取音符的圖像，並依據偏移量畫到正確的位置，之後再按照顯示板的規格逐格將畫面資料輸入緩衝區。
3. **計分機制**：當按鈕按下的時候判斷當前偵測位置是否有音符，並透過偏移量來決定獲得分數，並消除該音符。
4. **狀態機**：透過一個state_button的module控制狀態在 START, MENU, PLAY, FINISH輪替，並將狀態分享給其他模組。


___
## 使用方法

1. **啟動遊戲**
   - 按下任何一顆按鈕從開始頁面進入歌曲選單
   - 紅色按鈕為選擇上一首；藍色為下一首；黃色為確認歌曲
   - 共有三首曲目可供選擇：瑞克搖、最後一夜、晚安大小姐
   ![開始畫面](https://hackmd.io/_uploads/HyH5DDHIA.png)
   ![選歌畫面](https://hackmd.io/_uploads/SyHH_vrUA.png)


   
2. **遊戲介面介紹**
   - 進入遊戲後，您將看到以下界面：
     - **分數介面**：顯示目前點擊累積的分數 
     - **鼓點介面**：顯示太鼓音節的位置
   ![遊玩畫面](https://hackmd.io/_uploads/S1B-75r8A.jpg)


3. **遊戲操作**
   - 根據提示擊打對應的按鍵。
     - 使用藍色和紅色按鈕敲擊對應的音節。
     - 隨著音樂節奏準確擊打以獲得高分。

4. **結束遊戲**
   - 遊戲結束後，系統會顯示您的得分。
   - 您可以按下黃色按鈕重新開始遊戲。
   ![結束畫面](https://hackmd.io/_uploads/BkQE7qrUA.jpg)

   



## Architecture
1. **submodule**
   - Shift_Load
   - state_button
   - Draw_main_scene
   - Draw_node
   - Draw_score
   - Score_Counter
   - Button_judge
   - clk_div
   - Output_penel
   ![architeture](https://hackmd.io/_uploads/rJyVCISIR.jpg)

___
## vivado模擬波型
以下是程式的部分截圖展示：

![shift_load](https://hackmd.io/_uploads/SJTwbTHUR.png)


![Output_penel](https://hackmd.io/_uploads/HJ_C_DSUR.png)





## Project_Summary
![Summary](https://hackmd.io/_uploads/Hyipy6r8C.png)



## 未來展望
- 增加更多音樂曲目選擇。
- 優化圖形界面，提供更好的視覺效果，e.g使用PWM增加渲染顏色、結算畫面。
- 連接喇叭合併音樂撥放和打擊音效功能。

## 分工表



---
Github連結: https://github.com/KendellHsu/Tatsujin/tree/TATSUJIN

demo影片：https://youtu.be/zIhieWhzpes?si=CBGIvg19b6d27xWo

希望這個專案能夠讓您體驗到太鼓達人遊戲的樂趣，也期待您的寶貴意見來改進我們的設計！
Email: kendellhsu@gmail.com

