C++ QT开发人机象棋(界面表示)
目錄
1.1界面表示:
1.1.1棋盤表示:
1.1.2.棋子表示:
2.1界面表示:
2.1.1棋盤繪制
一:作用
二:執行時間
2.1.2棋子繪制
?
1.1界面表示:
?
1.1.1棋盤表示:
?
使用十條橫線與九條豎線在QT軟件下繪制棋盤,在畫豎線的時候為了顯示出河界,對第2到第8列進行特判。
?
1.1.2.棋子表示:
?
每一個棋子都有一些信息,對于這些信息定義一個棋子類把他們存儲起來,在打印棋子的時候根據這些棋子把棋子打印出來。
?
2.1界面表示:
?
調用QPainter頭文件。人們在下象棋的時候首先做的事情就是擺放棋盤,棋盤擺放完成之后就是擺放棋子,在電腦上我們不能夠像現實中這樣拿出來一個現成的棋盤來讓我們使用,不過我們可以自己做一個棋盤來使用。我使用的是QPainter進行繪圖,QPainter只能在類對象的paintEvent()函數中繪制圖形,其中我用到了painter.drawLine(繪制直線)、painter.setBrush(填充顏色)、painter.setPen(寫字)、painter.drawEllipse(畫一個圓)、painter.setFont(設置字體大小)和painter.drawText。
?
2.1.1棋盤繪制
?
畫橫線:painter.drawLine(QPoint(d,i*d),QPoint(9*d,i*d));其中d代表的是每個方格的長度,對于QPoint括號內的參數,后面的代表行數,前面的代表列數。
畫豎線:painter.drawLine(QPoint(i*d,d),QPoint(i*d,10*d));相較于前面的畫橫線的代碼,這個是該表參數的順序。在畫豎線的時候為了顯示出河界,對第2到第8列進行特判。
畫九宮格:painter.drawLine(QPoint(4*d,1*d),QPoint(6*d,3*d));四個與與這個相類似的函數構成,坐標代表的是棋盤上九宮格的對頂角的坐標。
棋子表示:每一個棋子都有一些信息,對于這些信息定義一個棋子類把他們存儲起來,存儲這些棋子的是Stone類,所有的信息在定義的_s[]數組里面。Stone類中包含int _row;int _col;TYPE _type;int _id;bool _dead;bool _red;分別代表每一個棋子的橫縱坐標,棋子類型,棋子的序號,棋子是不是還在棋盤上以及棋子的顏色,對于這些棋子的初始化,我使用init(int id);rotate();兩個函數,前者的作用是把棋子的信息儲存在數組里面,后者的作用是根據棋子的英文名字給出其對應的中文名字,以方便打印棋子,在打印棋子的時候根據這些信息把棋子打印出來。
繪制棋盤使用的函數是paintEvent(QPaintEvent *),說到這個函數要提到的是這個函數的作用和這個函數的執行時間:
?
一:作用
?
排好棋盤,然后往棋盤上面放棋子
?
二:執行時間
?
在構建窗體的時候執行
在窗體update的時候執行
系統認為窗口需要重新繪制的時候執行
也就是說我們每一次在調用這個函數的時候都會重新繪制一個界面,那么我們在繪制界面的時候要考慮的問題就是怎么通過坐標的形式把相應的棋子放在正確的位置上面去。
解決這個問題的方法就是在board頭文件里面加一個_s[]數組,用這個數組來存儲每個棋子的位置,到了這一步我們已經知道棋盤怎么繪制了,而且也知道在棋盤上面的每個棋子的位置在哪里了,接下來要考慮的問題就是怎么給這些棋子、棋盤加上相應的圖形使之可視化增強,這個時候QT上面強大的庫函數就派上用場了。
?
2.1.2棋子繪制
?
繪制棋子的函數為:drawStone(QPainter& painter,int id);這一部分關鍵點就是通過id找到這個棋子在棋盤上相對應的位置(存在或者不存在),在這個位置的周圍畫一個圓,這個圓的半徑為方格的一半長,畫好圓后在圓上進行涂鴉(背景色),接下來就是在圓上面寫字了。
這里有一個需要注意的地方,我們鼠標再點擊一個棋子的時候,這個棋子的顏色應該是要發生改變的,這樣我們才能夠知道我們現在下的是哪一個棋子。
所以我們要設置一個全局變量_selectid用來記錄當前鼠標的點擊位置。
總結
以上是生活随笔為你收集整理的C++ QT开发人机象棋(界面表示)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: psp测试电池软件,电玩巴士首测成功-P
- 下一篇: 笔记本电脑装机详细步骤图文教程