1. 程式人生 > >五子棋人人對戰實現

五子棋人人對戰實現



在十字交差點畫棋子,有幾種方法,第一種:獲取當前滑鼠點選的x,y值,

遍歷整個棋盤所有的交叉點座標,與其在一定誤差範圍內的交叉點座標即

為落子的座標點。第二種:直接將獲取的x,y座標減去棋盤外圍寬度然後

再除以棋盤每格的寬度,即可得到此座標位於棋盤的那一行那一列,然後

即可將此點為落子的點。不過這個方法不好判斷在哪個交叉點。



棋子可儲存,不會因為介面變化而消失,我使用的是Vector集合儲存的,

因此我還另外新建了一個棋子的類,每個棋子都儲存這座標,遍歷Vector

集合,取出棋子中儲存的x,y值即可在棋盤上畫出棋子了。另外也可以用

二維陣列來儲存,裡面可以用1代表白棋,2代表黑棋,遍歷整個陣列,

碰到1則畫出白棋,碰到2則畫出黑棋,陣列的下標即為棋子的座標,這

樣更為簡便!不過二維陣列在悔棋的時候不方便,因為你只能得到當前

位置的座標,不能得到上一步棋子的座標,故你只能悔一步棋。



點選開始才可以下棋,設定一個flag_start的標誌,一旦按了開始則

flag_start=true;就可以開始畫棋子了。



點選重新開始就可以重新下棋,repaint()棋盤即可,記得要把儲存棋子

的陣列或者集合要清空!還有儲存棋盤資訊的陣列也要清空。



可以悔棋(我設定的是最多悔一步,黑白各可以悔一步),設定一個

back_chess用來控制要悔幾個棋子。我設定的是可以悔兩個,即黑

白可以各悔一個棋子。悔棋要注意悔的什麼顏色的棋子接下來就應該是什麼

顏色下子。



用二維陣列儲存整個棋盤的資訊,來判斷下棋輸贏。獲取當前落子的

棋盤座標,以此棋子為中心,向上搜尋連續的4個棋盤座標,如果都

與其相等(即都為1或者都為2),則判斷1(白棋)勝利或者2(黑棋)

勝利,如果上面只有n(n<4)個與其相等,則向下繼續搜尋連續的4-n個

棋盤座標,如果都與其相等則判斷1或2勝利,如果上面和下面都沒有,

則沒有誰勝利。其他方向一樣的方法進行判斷。