進行**編寫之前,在chessarea.h 增加相關成員和方法定義,同時加入qt需要使用到的基本標頭檔案。主要用到qt繪畫類:qpen,qbrush,qpoint,qpaintevent等,重寫paintevent,達到繪製棋盤線功能。
#
ifndef
chessarea_h
#define
chessarea_h
#include
// 基本視窗widget
#include
// 畫筆
#include
// 畫刷
#include
// 畫布
#include
// 點
#include
// 顏色
#include
// 顏色dialog
#include
// 滑鼠事件
#include
// 繪畫事件
#include
"chess.h"
class
chessarea
:public
qwidget;#
endif
// chessarea_h
修改棋盤顏色比較簡單,直接修改widget背景顏色。在chessarea.cpp的建構函式中新增以下**,修改棋盤的背景色為公尺黃色。
//設定棋盤去區的背景顏色和大小
qpalette palette;
// 設定棋盤成了公尺黃
qlineargradient lineargradient(0
,0,400
,400);
lineargradient.
setcolorat
(0.0
,qcolor
(216
,180,80
)); lineargradient.
setcolorat
(0.2
,qcolor
(216
,160,72
)); lineargradient.
setcolorat
(1.0
,qcolor
(216
,156,72
)); palette.
setbrush
(qpalette::background,
qbrush
(lineargradient));
setpalette
(palette)
;setautofillbackground
(true);
setminimumsize
(600
,660
);
*paintevent(qpaintevent)**函式是qwidget類中的虛函式,用於繪製ui。
乙個重繪事件用來重繪乙個部件的全部或者部分區域,下面幾個原因的任意乙個都會發生重繪事件:
(1)repaint()函式或者update()函式被呼叫;
(2)被隱藏的部件現在被重新顯示;
(3)其他一些原因。
)// 3.楚河 漢界
p.drawline
(chessarea, chessarea*
5, chessarea, chessarea*6)
; p.
drawline
(chessarea*
9, chessarea*
5,chessarea*
9, chessarea*6)
;// 4.畫棋盤的10條水平線
for(
int i=
1;i<=
10; i++
) p.
drawline
(chessarea,chessarea*i, chessarea*
9, chessarea*i)
;// 5.畫棋盤「士」行走的斜線
p.drawline
(chessarea*
4, chessarea, chessarea*
6, chessarea*3)
; p.
drawline
(chessarea*
6, chessarea, chessarea*
4, chessarea*3)
; p.
drawline
(chessarea*
4, chessarea*
8,chessarea*
6, chessarea*10)
; p.
drawline
(chessarea*
6, chessarea*
8,chessarea*
4, chessarea*10)
;// 6. 寫上楚河漢界
qpointf point
(chessarea*
2.6, chessarea*
5.7)
; p.
setfont
(qfont
("arial",25
)); p.
drawtext
(point,
"楚河 漢界");
}此時基本的棋盤樣子就出來了,樣子大概是這樣的:
通過步驟02和03,棋盤基本形狀就出來了,但和現實生活中的棋盤相比還欠缺一點瑕疵,於是,可以在 paintevent 函式裡面繼續新增以下**,增加棋盤上面棋子炮和兵的站位直角。(接著上面的第 6 步寫)
// 7. 直角折線
pen.
setwidth(4
);p.
setpen
(pen)
;for
(int j=
2; j>
0; j--);
p.drawpolyline
(points1,3)
; qpoint points2[3]
=;p.
drawpolyline
(points2,3)
; qpoint points3[3]
=;p.
drawpolyline
(points3,3)
; qpoint points4[3]
=;p.
drawpolyline
(points4,3)
;if(i <3)
/* 炮的井字格 */
; p.
drawpolyline
(points5,3)
; qpoint points6[3]
=;p.
drawpolyline
(points6,3)
; qpoint points7[3]
=;p.
drawpolyline
(points7,3)
; qpoint points8[3]
=;p.
drawpolyline
(points8,3)
;}}}
新增完棋子站位直角後,棋盤繪製成形了。和現實生活的棋盤就比較像,同時也美觀了很多,到此,棋盤的繪製就成功了。
象棋棋盤繪製主要是在 chessarea.cpp 中的 paintevent 重繪事件中實現 ,主要用到 qpainter 類的畫筆,其次是使用qpalette 類調整了棋盤witget背景色。接下來分析如何把棋子擺放上繪畫好的象棋棋盤上,下回見!
Qt開發人機象棋
3.qt開發象棋過程問題記錄 4.專案尚存在的問題 5.專案體驗位址 前段時間在網上看到有人在用qt做象棋,心血來潮準備自己也實現一下,先看一波效果圖 專案存在一些瑕疵 本程式較為簡單,設計上分為四個沒有繼承關係的類 由於博弈樹會很大,如果將所有的計算都放在widget類中計算會出現卡介面問題 所以...
中國象棋 QT版
由於當時對象棋人工智慧非常感興趣,索性自己藉著實踐qt又重新開發了乙個。這個版本通過參考圖書館借的 c 中國象棋入門與提高 從頭到尾自己徹徹底底做了一遍,雖然到最後因為有別的事沒有把啟發式演算法寫入,總的來說打菜鳥還是很輕鬆的。其實工作量真的挺大的,ui 後台全由自己設計。演算法方面 1 棋子的走法...
中國象棋AI實現02
過了好幾個星期了,我的兩人結對專案已經結束,老師拿去給好多人玩了 得出的結論是太坑 有很多需要改進的地方,準備將它作為乙個長期的練手專案在後續的學習中不斷的改進吧!首先介紹一下基礎所需的知識點 需要掌握c語言 windows程式設計 資料結構 演算法導論中的一些內容 使用工具 我使用了一張560 6...