五子棋人人對戰實現
在十字交差點畫棋子,有幾種方法,第一種:獲取當前滑鼠點選的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勝利,如果上面和下面都沒有,
則沒有誰勝利。其他方向一樣的方法進行判斷。