QT五子棋實現 含原始碼

2021-07-11 19:45:51 字數 1131 閱讀 5915

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

這個五子棋沒有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則退出。

→→→

QT實現五子棋小遊戲

學習qt的過程中,為了加深自己的一些基礎操作,也為了想裝x,就自己寫了乙個五子棋小遊戲,目前介面沒寫完整,遊戲主題部分可以玩。五子棋遊戲主要的操作有三個。第一 void mainwindow paintevent qpaintevent 使用繪圖事件時需要新增時間函式在 件下面 for int i ...

Java實現五子棋

一定義常量類 public class constant二定義我們的棋盤類 public class chess private void playchess 錯誤輸入 if str.length 2 正常輸入的情況 判斷是否越界 if isoverstep str else end if 判斷是否...

C 實現五子棋

自己寫了一下午,但是還是除錯的時候存在很多問題 繼續改善繼續調整 game.h define game h define row 5 define col 5 void displayboard char board row col int row,int col void gameplayer c...