實現功能:棋子初始化及走棋規則
棋子類:
1view code#ifndef stone_h
2#define stone_h
34 #include 5
6class
stone7;
1314
int _row; //
棋子所在行
15int _col; //
棋子所在列
16 type _type; //
棋子型別(jiang,che...)
1718
19int _id; //
棋子id(0-31)
20bool _dead; //
棋子是否死亡
21bool _red; //
是否為紅方
2223
void init(int id) //
初始化棋子資訊
24 pos[16] =,
30 ,
31 ,
32 ,
33 ,
34 ,
35 ,
36 ,
37 ,
3839 ,
40 ,
41 ,
42 ,
43 ,
44 ,
45 ,
46};
4748 _id =id;
49 _dead = false
;50 _red = id<16;51
52if(id < 16)53
58else
596465}
6667 qstring gettext() //
返回棋子型別對應的漢字,便於繪製棋面漢字
6886
return"錯誤
";87}
88};
8990
#endif
//stone_h
棋盤類:
1view code#ifndef board_h
2#define board_h
34 #include 5 #include "
stone.h"6
7class board : public
qwidget8;
5051
#endif
//board_h
判斷走棋函式:
1view codebool board::canmove(int moveid, int row, int col, int
killid)211
12switch
(_s[moveid]._type)
1336
37return
true
;38 }
「將」 的走棋規則說明:
1view codebool board::canmove1(int moveid, int row, int col, int
killid)211
else
1215
16if(col < 3) return
false;17
if(col > 5) return
false;18
19int dr = _s[moveid]._row -row;
20int dc = _s[moveid]._col -col;
21int d = abs(dr)*10 + abs(dc); //
12, 21 22 10, 1
22if(d == 1 || d == 10)23
return
true;24
25return
false
;26 }
判斷 「將」 要移動的位置與原來位置相差一步的處理:
1滑鼠點選釋放事件:int dr = _s[moveid]._row -row;
2int dc = _s[moveid]._col -col;
3int d = abs(dr)*10 + abs(dc); //
12, 21 22 10, 1
4if(d == 11)5
return
true;
1view codevoid board::mousereleaseevent(qmouseevent *ev)219
}2021if(i<32)22
2526
if(_selectid == -1)27
35}36}
37else
3848 _selectid = -1
;49 _bredturn = !_bredturn;
50update();51}
52}53 }
效果圖:
中國象棋 QT版
由於當時對象棋人工智慧非常感興趣,索性自己藉著實踐qt又重新開發了乙個。這個版本通過參考圖書館借的 c 中國象棋入門與提高 從頭到尾自己徹徹底底做了一遍,雖然到最後因為有別的事沒有把啟發式演算法寫入,總的來說打菜鳥還是很輕鬆的。其實工作量真的挺大的,ui 後台全由自己設計。演算法方面 1 棋子的走法...
中國象棋遊戲開發計畫
新 中國象棋開發計畫 一 系統特點 1 實體象棋,絕非普通的象棋遊戲 2 玩家手感好,棋子採用 實木 象牙 製作。3 具備自動擺棋,無須人工干預 4 可以進行 人 機 人 人 隊長 5 系統自動計時 評分 6 二 系統設計思路 三 擺棋 實現自動擺棋是本系統成功的關鍵,只有系統可以正確的擺放棋子,才...
中國象棋2
using system using system.collections.generic using system.linq using system.text using system.drawing namespace chinesechess public override bool mov...