介紹
JavaSE實踐五子棋和中國象棋游戲,棋盤,棋子繪制,輸贏判定重置棋盤,單機博弈。
五子棋棋盤

中國象棋棋盤

使用說明
- 啟動類 Main.java, 面板類 Panel.java繪制棋盤和玩法,實體類 ChessPiecesNode.java
- 啟動類 Main.java中的 listener 方法監聽五子棋結束狀態
//監聽游戲結束自動重繪面板
public static void listener(Panel panel, JFrame jFrame) {panel.addPropertyChangeListener(new PropertyChangeListener() {@Overridepublic void propertyChange(PropertyChangeEvent evt) {if (evt.getPropertyName().equals("status") && evt.getNewValue() != null && (Boolean) evt.getNewValue()) {com.xq.cn.views.Panel panelNew = new Panel(TypeEnum.GOMOKU.getType(), 800, 800, 15, 15);jFrame.add(new JLabel("This is Panel 2"));jFrame.remove(panel);jFrame.add(panelNew);jFrame.revalidate(); // 重新驗證布局jFrame.repaint();// 請求重繪組件listener(panelNew, jFrame);}}});
}
- 面板類 Panel.java繪制棋盤和玩法
五子棋判斷五子一線的算法如上圖,觀察數據后得出結論為:五子一線時組成的數列剛好是一組等差數列,由此得出下方的算法
//獲取任意節點連成五子的所有可能
public List<Integer> arithmeticSequence(Integer id, Integer step) {//1、等差步長為step的等差數列List<Integer> listStep = new ArrayList<>();for (int i = 1; i <= 5; i++) {listStep.add(id + ((i - 1) * step));}for (int i = 1; i <= 5; i++) {int num = id - ((i - 1) * step);if (num <= 0) {break;}listStep.add(num);}eturn listStep;
}
- 實體類 ChessPiecesNode.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChessPiecesNode {/*** 坐標點(交點索引,從左往右,從上往下計數)*/private Integer id;/*** 坐標點x*/private Integer x;/*** 坐標點y*/private Integer y;/*** 在棋盤中對應的最小點擊點位對應的坐標點x*/private Integer minX;/*** 在棋盤中對應的最小點擊點位對應的坐標點y*/private Integer minY;/*** 在棋盤中對應的最大點擊點位對應的坐標點x*/private Integer maxX;/*** 在棋盤中對應的最大點擊點位對應的坐標點y*/private Integer maxY;/*** 坐標點使用狀態(0-未被使用,1-已使用)*/private Integer status;/*** 棋子對應的顏色*/private Color color;/*** 被使用的類型(黑/白)*/private Integer type;}
視頻展示
項目地址
傳送門