יש לפתוח מחלקה חדשה בשם Board
ולהעתיק את תוכן המחלקה הזו:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.function.IntConsumer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Board {
public Color emptyColor,oneColor,twoColor;
public String title;
private int cellRow,cellCol;
private JFrame frame;
private JButton [][] btnArr;
private IntConsumer clickButton;
/// Constractor
get the arr and the title of the window
public Board(int [][] arr,String title) {
this.title = title;
cellRow = -1;
cellCol = -1;
frame = new JFrame(title);//creating instance of JFrame
frame.setSize(arr.length * 50 + arr.length * 3, arr[0].length * 50 + arr[0].length * 5);//400 width and 500 height
btnArr = new JButton[arr.length][arr[0].length];
for (int row=0;row<btnArr.length;row++){
for (int col=0;col<btnArr[0].length;col++){
btnArr[row][col] = new JButton("");
btnArr[row][col].setBounds(row*50+row, col*50+col, 50, 50);
btnArr[row][col].addActionListener(listener);
frame.add(btnArr[row][col]);
}
}
emptyColor = Color.green;
oneColor = Color.black;
twoColor = Color.white;
updateBoard(arr);
frame.setLayout(null);//using no layout managers
frame.setVisible(true);//making the frame visible
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(frame,
"Are you sure you want to end the game?", "End Game?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) ==
JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
}
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int [] idx;
if (e.getSource()
instanceof JButton) {
idx = getBtnIdx((JButton)e.getSource());
String text = "row
= "+idx[0]+" col = "+idx[1];
cellRow = idx[0];
cellCol = idx[1];
clickButton.accept(0);
}
}
};
public void dansMethod(int x,
IntConsumer aMethod) {
clickButton = aMethod;
}
public void messagBox(String message,String title){
JOptionPane.showMessageDialog(null, message,title,1);
}
public int getCellRow() {
return cellRow;
}
public int getCellCol() {
return cellCol;
}
public void updateBoard(int [][] arr){
for (int row=0;row<btnArr.length;row++){
for (int col=0;col<btnArr[0].length;col++){
if (arr[row][col] == 1){
btnArr[row][col].setBackground(oneColor);
}
else if (arr[row][col] == 2){
btnArr[row][col].setBackground(twoColor);
}
else if (arr[row][col] == 3) {
btnArr[row][col].setBackground(emptyColor);
}
else{
btnArr[row][col].setBackground(Color.green.darker().darker());
}
}
}
}
private int[] getBtnIdx(JButton b){
int [] ret =
{-1,-1};
for (int row=0;row<btnArr.length;row++){
for (int col=0;col<btnArr[0].length;col++){
if (btnArr[row][col] == b){
ret[0] = row;
ret[1] = col;
return ret;
}
}
}
return ret;
}
}
לאחר מכן על מנת להשתמש במחלקת Borad
יש לפתוח מחלקה של המשחק
הבנאי של המחלקה Board מקבל מערך דו ממדי של
מספרים שלמים, ומחרוזת שתהיה הכותרת של החלון שנפתח
הפונקציה buttonClick מופעלת בצורה אוטומטית מהמחלקה Board ובה אפשר לקבל את השורה והעמודה שנלחצו בחלון
אח"כ אפשר לממש את הלוגיקה
ולאחר מכן לעדכן את לוח המשחק
public class GameClass {
private Board board;
private boolean player;
private int[][] boardArr;
public GameClass() {
boardArr = new int[15][15];
init();
board = new Board(boardArr,"My Game");
player = true;
board.dansMethod(0, x -> buttonClick(x));
}
private void buttonClick(int x) {
int row, col;
col = board.getCellCol();
row = board.getCellRow();
// print for debug
System.out.println("row = " + row + " col = " + col + player);
// here is where the code
of the implementation should be
board.updateBoard(boardArr);
}
private void init() {
for (int row = 0; row < boardArr.length; row++) {
for (int col = 0; col < boardArr[0].length; col++) {
boardArr[row][col] = 0;
}
}
int midRow = boardArr.length/2;
int midCol = boardArr[0].length/2;
boardArr[midRow][midCol+1] = 2;
boardArr[midRow+1][midCol] = 2;
boardArr[midRow][midCol] = 1;
boardArr[midRow+1][midCol+1] = 1;
}
}