日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ QT开发人机象棋(界面表示)

發布時間:2023/12/14 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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开发人机象棋(界面表示)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。