המחלקה Board והשימוש בה

יש לפתוח מחלקה חדשה בשם 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;

 

          }

}