2024秋軟體工程個人作業(第二次)

acedia7發表於2024-09-12
這個作業屬於哪個課程 https://edu.cnblogs.com/campus/fzu/SE2024
這個作業要求在哪裡 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
這個作業的目標 要求使用Python編寫一個“羊了個羊”風格的消除類小遊戲。對開發過程進行實踐,更加熟悉aigc工具
學號 102202135

一、專案展示

GitHub倉庫連結https://github.com/acedia7/yanglegeyang-for-ikun


二、專案介紹

專案的前端設計

1. UI佈局與整體風格
本遊戲採用了簡潔的卡通風格背景,配合輕鬆的配色設計,增強了玩家的沉浸感和趣味性。遊戲的主要背景是淡綠色的草地場景,遊戲元素如“牌堆”、“圖示”等都設計得較為簡潔,符合遊戲整體輕鬆愉快的風格。
主介面佈局:
牌堆區域:玩家需要操作的牌堆位牌堆由多個小方塊組成
選牌欄:位於排隊區域的下方,當選牌欄中相同的牌等於三張,則自動消除該三張牌,當欄中牌數大於7時,遊戲失敗
時間倒數計時與關卡資訊:倒數計時和關卡資訊顯示在螢幕的上方,來展示玩家當前的關卡和剩餘時間等資訊。
圖示設計:在右上角有一個廣告圖示,點選廣告圖示可以進入視屏,玩家可以欣賞坤哥的舞姿和歌聲,此時遊戲暫停30秒,30秒後遊戲重新從本難度開始,給玩家以娛樂的同時也增加了額外的趣味性。
2. 主要互動
遊戲開始介面:
遊戲一開始會顯示標題“ikun”以及一個“開始遊戲”的按鈕。玩家點選按鈕後,遊戲進入第一個關卡,倒數計時開始,並且牌堆和其他介面元素出現。
遊戲勝利和失敗介面:
勝利介面:當玩家透過關卡時,會顯示一條訊息“You Win! You are the real IKUN”,並且進入下一個關卡。
失敗介面:當時間用盡或牌堆堆滿時,顯示“You Lose!”字樣,並提供一個重新開始按鈕,玩家可以透過點選按鈕重新開始遊戲。
3. 響應式動畫與畫面更新
遊戲的所有畫面更新透過 draw() 函式實現,這個函式透過呼叫 Pygame Zero 的 screen.draw.text() 和 screen.blit() 實現介面元素的繪製。
動態繪製:所有的動態元素如倒數計時、牌堆、按鈕等都會透過 clock.schedule_interval() 和 update_timer() 等時間函式進行定時更新,保證了遊戲的流暢性。


專案的特色功能

1. 多關卡機制
2. 倒數計時與暫停功能
3. 影片播放功能


描述完成專案中所使用的技術和特殊的演算法,並展示實現思路

1. 關卡生成演算法
關卡生成使用了隨機排列和層級疊加的策略。這是為了確保每個關卡的牌堆佈局有所不同,增加遊戲的隨機性和趣味性。
技術: Random Shuffle 演算法。
實現思路:
關卡中的牌透過隨機排列 (shuffle) 被分配給不同的層級。
每一層的牌數量逐漸減少,底層的牌被更多的牌覆蓋,形成一種疊加式佈局。
不同關卡的難度透過增加牌的數量和層數來實現(如第一關較少牌,第三關最多)。
2. 遊戲狀態管理
遊戲的狀態分為多個部分,包括開始介面、遊戲執行狀態、遊戲勝利、失敗等狀態。透過邏輯判斷控制遊戲的各個階段的顯示內容和玩家互動。
技術: 狀態機。
實現思路:
遊戲使用了多個布林變數(如 is_start_screen, game_over, game_complete)來管理不同的狀態。
開始時,顯示遊戲標題和開始按鈕;玩家點選後,進入遊戲狀態。
當玩家透過所有關卡時,顯示勝利資訊,而如果玩家在時間內未完成遊戲,則進入失敗狀態。
3. 倒數計時與暫停控制
遊戲的每一關都有倒數計時功能,同時還設計了暫停和恢復遊戲的功能。這一部分使用了時鐘機制和暫停標誌來控制遊戲的時間流逝。
技術: Clock 機制。
實現思路:
每個關卡都有初始時間,透過時鐘每秒減少時間。
倒數計時會與遊戲的暫停狀態同步,暫停時停止倒數計時,恢復時繼續倒數計時。
當倒數計時歸零時,自動結束遊戲並顯示失敗介面。
4. 玩家互動與事件處理
玩家透過滑鼠點選操作進行遊戲,透過點選牌堆中的牌來消除匹配的牌,並從牌堆中移除。
技術: 事件處理機制。
實現思路:
遊戲使用了點選事件監控,玩家點選牌堆中的牌時,程式會檢查該牌是否可以被選中(即沒有被其他牌覆蓋)。
玩家成功選擇牌後,檢查是否有三張相同的牌可以消除。
如果牌堆中超過7張牌,則遊戲結束。
5. 遊戲勝利/失敗條件判斷
在遊戲過程中,系統實時監測玩家的操作是否符合勝利條件或者導致失敗。
技術: 邏輯判斷。
實現思路:
遊戲透過持續檢查玩家的操作,當牌堆中沒有剩餘牌時,遊戲判定為勝利,進入下一關。
當牌堆中超過7張牌時,判定為失敗。
每一關結束後,自動跳轉到下一關,直至透過所有關卡。
6. 影片播放與暫停功能
遊戲中特別設計了點選圖示播放影片的功能,影片播放過程中,遊戲會自動暫停,且影片結束後遊戲恢復進行。
技術: 系統命令呼叫與事件同步。
實現思路:
點選圖示後,呼叫系統命令播放影片檔案。
遊戲暫停時,背景音樂和倒數計時同時暫停,等到影片播放結束後,恢復遊戲狀態。
7. 關卡進度與難度遞增
遊戲的難度透過關卡的遞增表現,每一關的牌堆數量和層數都會相應增加,使得遊戲更加具有挑戰性。
技術: 逐步遞增難度演算法。
實現思路:
遊戲設計了3個關卡,每一關的牌堆數量增加,層數遞增,且每層的牌排列更加複雜。
隨著關卡的推進,倒數計時的總時間也會相應調整,給予玩家不同的挑戰。
透過這些技術和演算法的整合,這款遊戲實現了隨機性、挑戰性和趣味性,增加了玩家的參與感和體驗感。


測試

考慮到該專案的製作時基於pygame-zero的框架,由於該框架的特殊性,視覺化的測試用例難以寫出,所以我將程式碼邏輯簡單的封裝在新的檔案裡,使用測試案例對邏輯進行檢驗。
由於該測試案例的特殊性,所以只能檢驗遊戲邏輯是否正常,其他的很難檢驗出來,需要開發者自行遊玩得到結論,所以該測試案例並不成熟,不能推廣使用,只能簡單測試。


AIGC表格

PSP表格

個人作業評價

完成效果:
專案基本按計劃完成,遊戲的核心邏輯如關卡生成、倒數計時、玩家互動、遊戲勝利/失敗判斷等均得以實現。
測試階段出現了一些耗時的部分,特別是在關卡邏輯和遊戲狀態的測試中耗時比預期多。

哪裡做得好

任務分解清晰: 各個子任務合理劃分,編碼、測試等部分執行有序。
功能實現順暢: 遊戲邏輯的核心部分實現效果良好,遊戲關卡生成、狀態管理等功能流暢。
任務趣味性足:引入了ikun思想,加入觀看坤哥影片獲得重新本關的機會,增加遊戲趣味性和可玩性

可以改進的地方:

可以增加更多的遊戲難度
可以增加聯網功能,實現排名,增添競技性
完善觀看影片的機制,將影片設定為時間未到不可關閉
提升美工,增加不同的音效

相關文章