賴子渝的 Python 個人專題報告

Python 3.12 · Pygame · Desktop Game

PAC-MAN 小精靈遊戲

從鍵盤操作、鬼魂行為到自動路徑規劃,我把一個看似簡單的街機玩法,做成真正能操作、能展示的桌面遊戲。

  • Pygame 2.x
  • collections.deque
  • PyInstaller

開發人|賴子渝

Scroll / Space to continue

01 · Motivation & Goal

動機與目標

我選小精靈,是因為它的規則很容易理解,實作時卻得同時處理輸入、碰撞、移動與敵人行為。

02 · How to Play

玩法介紹

操作方式 Controls

  • 移動:方向鍵或 WASD
  • 暫停/恢復遊戲:P(暫停畫面上也有按鈕,可直接回到開始畫面)
  • 開始/重新開始/確認:ENTER
  • 離開遊戲:ESC(會先顯示致謝畫面才關閉,再按一次可直接關閉)
  • 在開始畫面查看本說明:H
  • 調整音量: 降低、按 提高(畫面會顯示目前音量百分比)
  • 視窗大小:可直接用滑鼠拖曳視窗邊緣縮放,畫面會自動維持比例。
  • 代打模式:開始畫面點綠色按鈕,讓電腦接手(一樣要遵守所有規則)。

得分規則 Scoring

  • 一般豆子 +10 分;能量豆 +50 分
  • 吃能量豆後鬼魂變藍,可反過來吃掉鬼魂。
  • 連續吃鬼:200/400/800/1600 分遞增。
  • 鬼魂被吃掉後,眼睛會飛回鬼屋重生。
  • 吃到第 70、170 顆豆子時,鬼屋會出現獎勵水果。
  • 分數達 10,000 可獲得額外一命。
  • 吃到能量豆的位置會開通隧道,可從畫面另一側繞回來。

畫面上方會即時顯示通關計時,吃完所有豆子即可過關。

03 · System Architecture

系統架構與流程圖

game.py 是主控制器,負責接收操作、更新遊戲狀態,再呼叫各模組完成移動、碰撞、畫面與音效。

game.py

主迴圈、畫面狀態、事件處理、自動遊玩與模組協調

player.py

玩家輸入、移動動畫與隧道

ghost.py

四種鬼魂行為與狀態

maze.py

地圖資料、豆子與牆壁判定

fruit.py

水果生成、分數與繪圖

audio.py

背景音樂、音效與音量

settings.py

速度、分數、時間與素材路徑

鍵盤/自動模式
game.py 接收
角色與鬼魂更新
地圖與碰撞判定
畫面與音訊輸出

04 · 核心開發工具

使用的 Package

本遊戲使用 Python 3.12 開發,三個主要工具分別負責遊戲執行、短期記憶與 Windows 打包。

第三方套件|遊戲核心

Pygame 2.x

建立視窗、接收鍵盤指令、繪製畫面與播放音效,並透過 Clock.tick 將更新速度控制在每秒 60 幀。

Python 內建資料結構|短期記憶

collections.deque

記住自動遊玩最近走過的 8 個格子,降低角色在相同路線反覆徘徊的情況。

打包工具|封裝發佈

PyInstaller

將程式、圖片與音樂打包成單一 Windows .exe,讓沒有安裝 Python 的電腦也能直接執行。

05 · Results & Roadmap

目前成果與未來規劃

目前已完成一個可操作關卡、四種鬼魂追擊方式、自動遊玩展示與 Windows 執行檔。

1 個完整關卡可完成豆子、能量豆、計分、生命與過關流程
4 種鬼魂追擊方式Blinky、Pinky、Inky、Clyde 各自使用不同追擊目標
自動遊玩電腦可以接手操作,展示完整的遊玩流程。
Windows 執行檔已產出單一 Windows 執行檔,方便攜帶與展示

未來規劃

增加不同地圖

預計在現有地圖之外新增 2 張地圖,形成共 3 張地圖;玩家過關後依序解鎖下一張。

加入本機最高分紀錄

預計在本機保存每張地圖前 10 名分數,並在開始畫面的排行榜中依地圖切換查看。

06 · References

參考資料

Google Gemini、ChatGPT、Claude

AI 輔助開發

協助釐清需求、提供程式碼草稿,並在程式卡關時一起討論,找出問題的真正原因。

Pygame 官方文件

技術文件

主要查閱 pygame.draw 向量繪圖、key.get_pressed() 輸入輪詢、mixer 音訊播放與 Clock.tick 影格控制的正確用法。

維基百科《小精靈》

遊戲規則考據

確認經典規則的官方細節:四隻鬼的性格設定、散開/追擊模式交替、連續吃鬼 200/400/800/1600 分的遞增規則,以及加命門檻。

謝謝老師的指導與同學們的聆聽,接下來請大家實際體驗看看吧!