Need to make a Reversi/Othello Board game in JAVA The board size can be N x N (so 4x4 is default, and it could be larger like 5x5, 6x6 etc. NEEDS TO BE ABLE TO WORK WITH ODD SIZE) Player 1 is going to be you and your going to be the black tiles, and the AI is going to be the white tiles. Black tiles will start the game, and then white will go after them, then back to black, repeat. The players must put a disc of their color on an empty square, adjacent to their opponent\'s disc. Any of the oppponents tiles in between the tile put down, and another of your tiles will cause them to flip to your color. The winner is decided when the board is completely filled or no viable moves are left, and whoever has the most pieces. This program is meant to be simple design (no GUI or big interface designs), broken into multiple classes (can be extension\'s off the class or abstract interface off each other), and the user will be entering the coordinates of where to put the pieces (so just using scanner method)?. The start of the game must always have 4 tiles put down in the center (so the center can change depending on the size of the board), and the gameplay would look something like this Again, coding done in JAVA is what I\'m looking for. Scenario in which the game ends early. JAVA code BW Success: Black move at C1, 0) BW Score: Black: 4, White: 1 Success: White move at C2, 0D Solution package Reversi_Othello_GameReversiOthello; import java.awt.*; import java.applet.*; public class Reversi_Othello_GameReversiOthello extends Applet implements Runnable { Thread runner; // declare a thread for this GameReversiOthello boolean black_shown = false; // flag to signal pause boolean show_em = false; final int BLACK = 1; // declare state of each square final int WHITE = 2; final int EMPTY = 0; final int OFFBOARD = -1; final static int GameReversiOthello[][] = new int[10][10]; //10x10 matrix of squares protected int Count_Black = 0; protected int Count_White = 0; Event evt; int x, y; public void start() // create a thread and start it { if (runner == null) { black_shown = false; runner = new Thread(this); runner.start(); } } public void stop() // stop the thread { if (runner != null) { runner.stop(); runner = null; black_shown = false; } } public synchronized void run() // initialize screen { setBackground(Color.green); for (int i = 0; i < 10; i++) // initialize off-board squares { GameReversiOthello[i][0] = OFFBOARD; GameReversiOthello[i][9] = OFFBOARD; GameReversiOthello[0][i] = OFFBOARD; GameReversiOthello[9][i] = OFFBOARD; } for (int i = 1; i < 9; i++) // initialize GameReversiOthello board to be empty { for (int j = 1; j < 9; j++) { GameReversiOthello[i][j] = EMPTY; } } GameReversiOthello[4][4] = WHITE; // except for initial set up GameReversiOthello[5][4] = BLACK; GameReversiOthello[4][5] = BLACK; GameReversiOthello[5][5] = WHITE; while (runner != null) // signal thread to wait after painting { // black and before white responds while (!black_shown) { try { w.