五子棋(一)

一、做一個界面

之前做界面用JFrame,爲了把面板分塊使用(將按鈕組件和整個棋盤分開),現在用JPanle容器組件(JPanle將面板劃分爲五個區塊)

需要用到的類:JFrame
BorderLayout 邊框佈局,把容器分爲5部分,上北下南左西右東中間
JPanel 面板容器組件
FlowLayout
Dimension 封裝組件寬度和高度的類
JButton
JLabel
JRadioButton 單選按鈕
ButtonGroup 單選按鈕分組類
Graphics
MouseListener|MouseAdapter
MouseEvent
ActionListener
ActionEvent

 1.界面的實現

定義FiveChessUI類,讓繼承JPanel
public class FiveChessUI extends JPanel {

public void initUI(){
//實例化JFrame對象設置屬性

//將棋盤面板添加到窗體上的中間

//創建一個JPanel,添加按鈕,面板添加到窗體的東邊

                     //增加監聽事件

}

public void paint(Graphics g) {//重寫JPanle中的paint方法
super.paint(g);
//繪製棋盤
}

}

2.下棋子

首先要考慮把棋子繪製到距離點擊位置最近的棋盤交叉座標上,這就需要思考一下,如何計算出交點座標(並將棋子下到對應位置上)。

下面是兩種找位置的計算方法

還有畫棋子時需要注意棋子要黑白交替的出現




下棋子的時候還有一個細節需要注意:不能在下過棋子的地方再下棋!這樣我們定義一個二維數組來存儲下過棋子的情況(後面判斷輸贏也要用到),初始時二維數組數值都爲0(表示全部位置都還沒有棋子),然後可以設下過黑棋的位置爲1,下過白棋的位置爲2。




3.判斷輸贏

判斷輸贏的思路很簡單,就是找棋子水平,垂直,左斜和右斜四個方向上是否有五個相同顏色的棋子相連。

每次畫完棋子都需調用判斷輸贏的方法對其進行判斷。


4.重繪棋子

與畫板的重繪一樣,改變窗體大小而棋子不消失,則需要重繪棋子,即重寫父類的paint()方法。


加背景圖要寫在調用畫棋盤和畫棋子的方法前面才能執行的,因爲代碼的執行是有先後順序的。

5.重新開始遊戲和悔棋

點擊重新開始遊戲時,需要把棋盤上的棋子都清除。這隻需要循環遍歷存儲棋子的數組,然後把數組的值賦爲0就可以了。



悔棋則需要記錄上一步所下的棋子的位置,並將該位置的棋子數組值賦爲0(還要將棋子的顏色改變),最後還要調用repaint()方法。如果需要悔棋多個的話,就要將每次下的棋子的位置按順序存入另外一個數組中了(這個我感覺有點混亂,就不細寫了)


還有在繪製棋盤和棋子時有些常量(如棋盤中的間距,行列數,棋子大小)我們可以把它放到一個接口中,然後哦實現這個接口,這樣方便數據的修改。