開發環境:VS2005 + Win32 + C++ + DirectX 9。相比首作,本專案充分應用面向對象設計,特別是遞歸算法在消除類遊戲整行判斷中的優雅應用,大幅簡化邏輯。

核心設計:
新增組件只需繼承 ImageUI 並實現虛函數,符合開閉原則。
PUG_BTN_STAT CImageUI::OnEvent(UINT msg, WPARAM wParam, LPARAM lParam) {
POINTS xy = MAKEPOINTS(lParam);
POINT pt = { xy.x, xy.y };
switch (msg) {
case WM_MOUSEMOVE:
if (PtInRect(&_displaySize, pt)) { OnPass(); return PASS; }
break;
case WM_LBUTTONDOWN:
if (PtInRect(&_displaySize, pt)) { OnClick(); return ONCLICK; }
break;
case WM_LBUTTONUP:
if (PtInRect(&_displaySize, pt)) { OnClickOut(); return ONCLICKOUT; }
break;
}
OnPassOut();
return COMMAND;
}
基類封裝碰撞檢測與事件分發,子類僅需重寫 OnClick()、OnPass() 等業務邏輯,避免重複代碼。

「嚴格意義上這不算標準工廠模式,但代碼可讀性、可維護性顯著提升。」—— 設計模式不是教條,解決問題才是核心。遞歸消除算法、組件化 UI 架構、事件分發封裝,是本專案最大的技術收穫。