In the Coding House

目前分享一些:

  • • 粉粿的照片
  • • Python 的學習心得
  • English page under development…
  • visit my GitHub by clicking the icon below

進階挑戰:中文成語接龍遊戲

閱讀警告:以下內容均有經過 ChatGPT 進行內容擴寫與潤飾 🎮 中文成語接龍遊戲:從命令列走向非同步 GUI 的進化 做第二個專案的時候,想著要進行更進一步的練習和應用,當時正好學到了資料庫相關的內容,生活中的經驗則讓我回想起文字接龍遊戲的記憶,於是決定就將這個遊戲透過 Python 實踐看看。 附上遊戲畫面截圖: 題外話,我甚至在拿到成語典的資料後,才發現很多日常中說的詞語,其實都不能算是成語,以至於當我在測試遊戲時,我其實得開著成語典的資料邊查邊玩,才不會在第一輪就輸給電腦 😅。這個發現也讓我有了後續想法:或許之後能把遊戲資料庫擴充成一般詞語的接龍機制,讓遊戲更有彈性與樂趣! 這個專案的開發最想分享的兩個挑戰如下: 🧱 CLI 與 GUI:不同程式設計思維的實戰轉換 專案的兩個主要入口分別是: main.py:命令列介面(CLI)版本 idiom_chain.py:圖形介面(GUI)版本 最初是從 CLI 版本著手,讓我專注在遊戲邏輯與資料庫查詢整合上。這時使用者透過文字輸入接龍內容,程式依序回應結果,整體流程是線性、可預期的。 但進一步希望讓遊戲具有作品感時,便開始嘗試 tkinter 圖形介面的開發。GUI 架構主要由 idiom_chain.py 啟動,並整合以下模組完成完整邏輯: game.py:成語接龍規則與邏輯判斷(例如檢查是否能接、誰勝誰負) idiom_database.py:從資料庫中查詢是否為合法成語,以及可能的接龍結果 game_manager.py:協調 GUI 控制流程,例如電腦回合、倒數計時結束後自動判定輸贏 records_database.py:儲存玩家與電腦的勝場紀錄 game_timer.py:提供非同步的倒數計時功能 相對於 CLI 的「指令 → 回應 → 結束」流程,GUI 則是事件導向(event-driven),每一次的使用者輸入、電腦出手、倒數結束都可能隨時打斷目前流程,這讓我必須將邏輯與畫面顯示層拆開設計,並確保模組間的解耦。 ⏱️ 非同步倒數計時:從卡住畫面的問題,到 asyncio 的穩定解法 一開始我在開發 CLI 版本的時候,就嘗試加入「每回合限時 30 秒」的倒數計時功能。當時我用 threading.Thread() 來處理背景倒數,理論上它能在不阻塞主程式的情況下進行計時。 但實際執行時卻發現問題很多: 倒數計時會卡住,導致使用者沒辦法順利輸入成語 有時候會同時啟動多個計時器,導致畫面上倒數數字重複跳動或混亂 雖然是 CLI 環境,但仍能感受到同步執行的限制和混亂 後來我改用 Python 的 asyncio 非同步協程來重寫倒數邏輯,成功讓 CLI 的倒數計時變得更穩定且準確。 ...

July 22, 2025 · Me

第一個 Python 程式開發專案:Picture Fairy

閱讀警告:以下內容均有經過 ChatGPT 進行內容擴寫與潤飾 🧚‍♀️ Picture Fairy:從 AI 熱潮到互動原型 在接觸了幾部免費的 Python 教學影片後,發現學習資源真的非常豐富,也激起我想實作一個自己的程式專案。當時生成式 AI 正在大爆發,我決定搭上這波浪潮,動手做一個結合 AI 的簡單互動應用。 就這樣,Picture Fairy 誕生了 —— 我知道命名有待加強(笑)。 Picture Fairy 的功能很直觀: 使用者輸入一段文字關鍵詞,後端會: 透過 Google 圖片搜尋抓出一張代表性的圖片 同時使用 GPT-4o 為該詞彙生成一段說明文字 圖片與文字分別來自不同來源,因此兩者不一定會精準對應,但這種 AI 組合包的趣味性,有時反而讓結果更有「想像空間」。 🤖 LINE Bot + Webhook 架構補充 這個應用實際上是透過 LINE Messaging API 來與使用者互動的。使用者在 LINE 中輸入一段文字後: LINE Bot 將訊息透過 webhook 傳送到部署好的 FastAPI 應用伺服器。 FastAPI 取得使用者輸入,接著: 串接 Google 圖片搜尋邏輯抓圖 同時呼叫 OpenAI 的 GPT-4o API 生出文字說明 最後將圖+文回覆給使用者。 以下是流程圖簡圖: ...

June 23, 2025 · Me

My First Post

Hello Hugo This is my first post on HUNKUE.

February 22, 2025 · Me