This project is only for private use.
Features:
- 使用自製的 UI 系統
- 使用自製的 2D 物理計算系統
- 使用 相依注入(Dependency Injection) 系統
本專案以 C# 編寫,包含實作《UI 系統》、《2D 物理引擎》、《中國象棋》、《動態星空背景》。
本程式具備以下主要特點:
- 多人連線系統
-
Golang 做為中心主機;C# 為用戶端
-
支援封包檢測、移動合法性檢測
-
支援聊天室
-
架構概述
-
採用元件樹結構作為核心基礎
-
具備事件傳遞、畫面渲染、初始化流程、輸入管理、生命週期管理系統等
-
所有 UI 元件皆繼承自通用基底,支援階層式關聯與狀態同步
-
架構接近 MVVM / MVC 混合式:視圖渲染、資料綁定與控制邏輯各自分離
-
具有 Dirty flag 機制,以減少不必要的重複運算
-
-
UI 元件系統
-
UI 元件實作了大部分常見 UI、並設計了數種特化 UI
-
虛擬元件:根節點、一般節點、覆蓋層節點
-
一般元件:標籤、按鈕、文字方塊、對話方塊、一般容器、可拖曳容器
-
特化元件:選單容器、UI 遮罩
-
To Do:下拉式選單、單選按鈕、複選按鈕、滑桿
-
-
輸入事件處理
-
完整支援滑鼠交互事件:按下、放開、點擊、拖曳及滾輪事件
-
採用中央事件路由集中處理輸入,並分派至對應的 UI 元件
-
To Do:鍵盤快捷鍵系統與焦點切換機制
-
-
畫面渲染與層級控制
-
所有元件皆能設定 Z-Index 來控制前後層渲染順序
-
採用分層渲染管線,確保背景、主體與覆蓋層在更新與繪製上互不干擾
-
支援不同 UIRenderer 實作覆寫,用以因應不同主題或風格
-
To Do:局部重繪與剪裁渲染以提升效能
-
-
高度自訂性與可擴展性
-
可自訂遊戲 FPS 上限,平衡畫面流暢度與效能
-
具有 Config 及 Constant 檔案
-
能自訂 UI 元件的預設大小、位置、對齊、間距等參數
-
能被上層實作(例如象棋)覆寫,以適應不同專案要求及風格
-
-
To Do:外部 User-Defined Config 檔案覆寫、已實作系統的進階變化、接受玩家自訂模組或 UI 風格
-
-
輔助系統
-
隨機系統
-
可接受自訂種子碼,使每次執行都產生相同的隨機結果
-
可產出 Int、Float、Double 等不同精度、位數的隨機數
-
支援遊戲掉落系統,支援權重與掉落表設定
-
-
日誌系統
-
可在 App 內實時顯示日誌紀錄
-
亦可儲存於外部檔案中
-
支援時間戳記與事件等級分類/篩選顯示
-
-
形狀系統
- 實作多種風格的預設形狀
-
To Do:進階樣式系統、動態主題切換
-
-
核心概念與架構
-
採用模組化設計,每個物件皆由三大屬性組成:位置、速度及加速度
-
支援時間步進模擬,可整合至 UI 或遊戲邏輯循環中
-
可自由組合屬性、運動與阻力(阻尼)效果,用以模擬多種物理環境:
-
無阻力
-
線性阻力
-
外力:重力/引力、推動、轉彎、拋物線等
-
彈簧回彈/來回震盪
-
指定目標點自驅動運動
-
-
-
向量系統
-
自訂結構 Vector2F 為所有物理單位的基礎
-
具有自訂顯式/隱式轉換,能自由轉換成內建函式庫中的其餘單位,例如 PointF、SizeF、RectangleF 等
-
支援多種運算子多載,簡化運算
-
能直接與純量做運算
-
能與其他向量做向量運算
-
-
實作了內建函式庫中沒有的數學函數,例如 Sigmoid 映射、Log 映射等
-
-
物理屬性與行為
-
位置:分為基準位置、當前位置、目標位置。可區分靜態基準點、即時運動狀態與目標指向,用於插值與物理運算
-
速度:分為基準速度、當前速度。支援動態變化及運動疊加,可模擬外力或慣性
-
加速度:分為基準加速度、當前加速度。可模擬不同的物理情境,例如重力場
-
運動邊界:可自訂物體運動範圍,是否反彈或直接停止
-
能設定是否具阻力(阻尼)、阻尼係數、是否為彈簧、彈力係數、是否為目標驅動運動
-
-
集中式更新
- 所有物理物件皆可註冊至引擎統一管理,確保更新循環的一致性與效能最佳化
-
擴展性與應用範例
-
動態星空背景模組
-
可拖曳(滑動)UI 容器、文字方塊能上下滑動閱讀內容
-
-
架構設計
-
使用 MVVM / MVC 混合架構
-
MVC 用於遊戲主體邏輯,如棋盤、棋子、規則與狀態管理
-
MVVM 用於 UI 層的資料綁定與動態顯示,使介面狀態能自動隨模型更新
-
混合架構優勢:邏輯模組化、高可擴充性、資料綁定便利性
-
使用相依注入系統,避免重複建立或引用
-
-
使用者介面
-
所有介面元素皆為自訂 UI 系統實作
-
額外自訂 UI 元件:棋子
-
已實作畫面
-
選單
-
應用程式主選單
-
遊戲模式選擇選單
-
遊戲內主選單
-
-
棋局相關
-
棋盤盤面(To Do:動態背景、邊框)
-
棋子(To Do:吃棋動畫)
-
-
側邊欄
-
玩家資訊顯示、計時器、回合狀態
-
步數及移動紀錄顯示
-
-
-
已實作功能
-
離開對局、離開應用程式
-
選擇遊戲模式
-
進入遊戲、初始化棋局、初始化側邊欄資訊、初始化紀錄日誌
-
棋子可依照規則進行移動(例如:象走田並有象眼)、選取(例如:紅方回合不能選黑方棋子)與判定
-
-
To Do
-
規則設定選單
-
遊戲設定選單
-
讀取存檔選單
-
殘局闖關選單
-
教學/幫助選單
-
棋局控制介面(暫停、悔棋等)
-
-
-
棋局功能
-
支援多種盤面:
-
大盤(9×10):經典、揭棋
-
小盤(8×4):明棋、暗棋
-
小盤三國(9×5):三人模式特殊規則
-
-
棋子邏輯
-
不同棋種能依盤面、遊戲類型與規則,自動切換移動方式
-
規則可擴充或自訂,特殊棋子、陣營或地域性特殊玩法
-
-
移動預測系統
- 可預判每個棋子的可移動範圍,未來可應用於棋局教學、AI 對局計算、移動提示等
-
棋譜與回放系統
-
每個回合的行為都會被記錄,可用於回放或悔棋
-
回合紀錄:目前為 Log 模式,記錄所有行為,未來將改成標準棋譜,例如:[第10回合]俥一平三、[第17回合]卒5進1
-
-
擴充性設計
-
陣營系統:支援紅/黑、魏/蜀/吳,甚至黃、藍等陣營
-
棋子系統:支援二人遊戲、三人遊戲、特殊棋子(例如三友棋額外棋子:旗、火)
-
棋面字樣:可依陣營顯示不同名稱,例如:炮/包/礮、兵/卒/勇
-
-
比賽計時器
-
事件驅動架構核心:所有邏輯以非阻塞事件觸發,能與主遊戲循環並行運作
-
分為局時與步時,並可依據遊玩模式、規則及棋手強弱分開設定
-
支援多種模式,可設定正數計時、倒數計時,或是無限模式(時間到不終止遊戲)
-
-
-
使用 2D 物理模組的實驗性動畫,可作為單獨專案
-
使用加速度與阻尼模擬星體漂移與回彈
-
支援慣性與邊界彈性,確保運動平滑自然
-
-
採用 MVC 架構:資料模組、控制器、渲染層完全分離
-
使用物件池管理物件,避免無限 Load/Unload 物件造成 GC 壓力
-
高度自訂性:可設定星空密度、位置、閃爍頻率、變色顏色、特效套用機率及頻率等
-
具有三種不同的隨機效果:
-
✨ 閃爍:亮度周期性抖動
-
🌈 紅移:漸變式色相偏移
-
🌀 黑洞:區域性空間扭曲
-
並支援單獨啟用/停用或設定數據
-
-
分層渲染:前景、背景分開
-
採用時間步進計算,確保幀率獨立,並可用於高幀率場景,支援動態調整更新頻率以平衡效能
-
可擴充成為星雲、流星、粒子等特效模組
Chinese chess is a strategy board game for two players.
It is the most popular board game in East Asia.
- 僅供個人學術研究使用,可相互探討,禁止抄襲(包含部分抄襲)
- 禁止搬運、複製或儲存於其他儲存庫中
- 禁止當作作業 Project
- 禁止當作作業 Project
- 禁止當作作業 Project
This repository does not provide any license or redistribution rights for its own code.
It is intended for private use only.