視窗環境應用程式設計 小組作業

題目:象棋遊戲

 

目錄

工作分配
介面功能
流程圖
實作方法構想
製作情形 12/03

參考資料

 

工作分配(往後會陸續增加)

B95570001 張佑愷 圖形、紀錄棋譜的物件
B95570011 李育群 遊戲介面
B95570049 陳冠宇 棋子移動、勝負判斷(ChessSet)

 

介面功能

選定棋子
移動棋子
吃棋
判斷勝負

額外功能:(尚未詳細規劃)
紀錄棋譜(每走一步後即時顯示在另一視窗)
將棋譜存檔(遊戲中存檔or結束後存)

流程圖

 

實作方法構想

chessset物件負責所有有關棋子的工作
例如:移動棋子、吃棋

ChessSet底下放32個Chess物件(目前看來似乎用struct就足夠)代表32個棋
ChessSet的成員函式負責控制那些Chess物件

移動

介面點下某個座標時,傳送該座標給ChessSet
則ChessSet會選定目前在該座標的棋
(用bool selected判斷是否有選中棋子)

介面再點選要移動到的地方,並傳新的座標軸給ChessSet
ChessSet找到剛選中的棋子並對它做移動(判斷是否合法,更新座標軸)
(用bool ChessSet::Move(),傳回false代表違規,讓介面跳出警告)

介面繪圖

從ChessSet取得各棋子的所在座標,或者是已經死亡不畫記
(Chess結構的變數life)

勝負判斷

象棋沒有計分,只看將帥是否死亡即可
或者可在介面加入Timer,超過時間沒走步著判負...等

製作情形 12/03

[已完成功能]

•基本下棋功能(移動、吃棋、換人、犯規判斷)
•透明色貼圖(Sprite)
•右上角計時顯示
•右上角按紐(開始):按下後就可以開始下棋,並把遊戲設定功能Disable
•右下角顯示棋譜的視窗

[BUG]

•Double Buffer,加入後仍然會閃(或許重繪整個螢幕太多了)
•分割視窗大小可以調整
•時間到了不會強制終止

[未完成]

•棋譜紀錄物件(還未加入專案中)
•棋譜儲存、載入與即時印出
•勝利判斷
•部份重繪
•開新遊戲

•將ChessSet和紀錄棋譜的物件組合起來變成新的物件放在Document架構裡
這個介面提供所有關於遊戲的操作(下棋、存棋譜、印棋譜、判斷勝負...等)

參考資料

象棋 - 維基百科,自由的百科全書