QT五子棋實現-含源碼

​​​​

在這裏插入圖片描述


  以上是自己寫的五子棋的效果圖。

  這個五子棋沒有AI,只是很簡單的繪圖和判斷五子相連功能。

  下面來說一下實現五子棋的主要思想。

  我們需要幾個變量,用來存儲當前的相關信息。首先一個是棋盤佈局的二維數組chessBoard[N][N],棋盤有幾行幾列,N的值就是這個,這個變量用來還原當前棋盤佈局,用+1 和 -1 分別表示黑子和白子,用0表示當前位置無子。其次是棋子列表chess[N*N][3],這個數組存儲的是所有的棋子的信息,記錄哪一行哪一列存儲的是黑子還是白子。這個變量不用也行,用了可能會稍微方便一些。還有一個就是chessNum,這個整形數用來記錄當前下了多少個子了,那麼我們可以根據這個來計算下一個子是什麼顏色了。

  首先,就是要繪製一個棋盤,一個棋盤的繪製就是用繪圖事件結構voidMainWindow::paintEvent(QPaintEvent*) 這個事件結構用來繪製棋盤,包括橫線豎線和棋子。

  然後就是棋子繪製,這裏用到的就是鼠標按鍵事件了 voidMainWindow::mousePressEvent(QMouseEvent*mouseEvent) 。這裏呢,首先要判斷鼠標按鍵的位置是否在棋盤內,鼠標按鍵在邊框上也會產生鼠標事件,判斷在棋盤內之後,再去判斷當前位置能不能下子。能不能下子的條件有:1.這個地方沒有子;2.這個地方在橫豎交叉之處。對於2這個條件,可以這樣判斷,當前點和最近的橫豎交叉點之間的距離是否少於一個定值。如果完全是相等,估計很難做到,所以下子的位置跟實際位置相差不大就可以確定要下子的位置了。

  每次有鼠標事件的時候,判斷當前該不該下子,該下什麼顏色的子,然後更新相關數據,重新繪製棋盤。之後就是判斷五子連線了。每次重新繪圖完成之後,就去判斷剛下的那顆子能不能構成五子相連。網上找了資料,沒有特別好的判斷五子相連的方法,於是採用了最笨的方法,枚舉,判斷該子與剛下的子與其周圍的子是否能連成五個。其實總共也就二十種情況,寫完一種,剩下的複製一下,改幾個數據就好了,寫起來也挺快的。

  如果判斷當棋子數量已經達到N*N了,也就是佔據整個棋盤了,就判斷流局,比賽結束。如果有一方贏了,比賽結束。這兩種情況都彈出對話框,Again or Exit。當選擇Again的時候,就把所有數據清空,若是選擇Exit則退出。

 

→→→源碼下載

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章