Qt版本中國象棋開發(三)

2022-04-11 08:51:59 字數 2821 閱讀 1256

實現功能:棋子初始化及走棋規則

棋子類:

1

#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

view code

棋盤類:

1

#ifndef board_h

2#define board_h

34 #include 5 #include "

stone.h"6

7class board : public

qwidget8;

5051

#endif

//board_h

view code

判斷走棋函式:

1

bool board::canmove(int moveid, int row, int col, int

killid)211

12switch

(_s[moveid]._type)

1336

37return

true

;38 }

view code

「將」 的走棋規則說明:

1

bool 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 }

view code

判斷 「將」 要移動的位置與原來位置相差一步的處理:

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;

滑鼠點選釋放事件:

1

void 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 }

view code

效果圖:

中國象棋 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...