หลังจากที่ทำเป็น method และเรียกใช้งานใน class และ ก็นำ ฟังก์ชันนั้นๆ แยกมาเขียนเป็น class แต่ละ class ดังนี้
===class Board===
เป็นส่วนของการสร้างบอร์ด โดยมี method คือ
สร้างบอร์ด
ส่งค่า board ออกไปใช้งานใน class อื่น
รับค่า จาก class อื่น มาใช้ในการเปลี่ยนค่าข้อมูลในบอร์ด
public class Board {
private int row;
private int col;
private char board[][];
char player = 'X';
//สร้างบอร์ด
public Board (int row,int col) {
this.row = row;
this.col = col;
this.board= new char[this.row][this.col];
}
//ส่งค่าบอร์ด
public char getBoard(int row,int col) {
return this.board[row][col];
}
//set ค่าของบอร์ดเป็น X หรือ O
public void setBoard(int row,int col,char player) {
this.board[row][col] = player ;
}
//เปลี่ยนค่า player จาก X เป็น O
public char changeplayer() {
if (player=='X') {
return player = 'O';
}
else {
return player = 'X';
}
}
}
===class Display===
เป็นส่วนของการแสดงบอร์ดออกมาให้ผู้ใช้เห็นผ่านทาง console
attribute คือ ค่าบอร์ดที่รับมาจาก class Board
method คือ แสดงบอร์ด
public class Display {
private Board board;
public Display(Board board) {
this.board = board;
}
public void display() {
//show board
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print("\t" + this.board.getBoard(i,j));
}
System.out.println();
}
}
}
===class InputXO===
คือ class ที่รับค่า X หรือ O จากผู้เล่นเข้ามาใส่ในกระดาน โดยรับตำแหน่งที่ผู้เล่นต้องการลง X หรือ O มาตรวจสอบ array และรับค่า Board มาจาก class Board แล้วส่งค่า X หรือ O กลับไปให้ method setBoard ที่อยู่ใน class Board เพื่อใส่ X หรือ O ลงในตำแหน่งนั้นๆ
import java.util.Scanner;
public class InputXO {
private Board board;
public InputXO(Board board) {
this.board = board;
}
public void Inputboard() {
System.out.print( this.board.player + " Enter : ");
System.out.println();
Scanner inPlayer = new Scanner(System.in);
int py = inPlayer.nextInt();
int k = 9;
if(py>0 && py<4)
k = 2;
else if(py<7)
k = 1;
else if(py<10)
k = 0;
this.board.setBoard(k,((py-1)%3),this.board.player);
}
}
ส่วนสุดท้ายคือ
===class checkWin===
ตรวจสอบเงื่อนไขการแพ้ชนะและเสมอกันของเกม โดยรับค่า Board ที่ส่งมาจาก class Board ทำการตรวจสอบตำแหน่งของ X และ O ในกระดานว่าตรงตามเงื่อนไขหรือไม่ หากตรงเงื่อนไขแล้ว จะให้แสดงผลผู้ชนะ และหยุดเกมทันที
public class CheckWin {
private Board board;
private int x = 1;
private boolean game_run;
public CheckWin(Board board) {
this.board = board;
}
public void check_win(int draw){
//check lick
int check_lick = 0;
int r = 2;
for(int q = 0; q < 3; q++) {
if(this.board.getBoard(q,q) == 'X')check_lick += 1;
if(this.board.getBoard(q,q) == 'O')check_lick -= 1;
}
lick_win(check_lick);
check_lick = 0;
for(int p = 0; p < 3; p++) {
if(this.board.getBoard(p,r) == 'X')check_lick += 1;
if(this.board.getBoard(p,r--) == 'O')check_lick -= 1;
}
lick_win(check_lick);
//check row and column
for(int i = 0; i < 3; i++) {
int check_row = 0;
int check_col = 0;
for(int j = 0; j < 3; j++) {
if(this.board.getBoard(i,j) == 'X')check_row += 1;
if(this.board.getBoard(i,j) == 'O')check_row -= 1;
if(this.board.getBoard(j,i) == 'X')check_col += 1;
if(this.board.getBoard(j,i) == 'O')check_col -= 1;
}
//print result
if(check_row == 3 || check_col == 3) {
System.out.println("X is winner");
x = 0; run_game();
}else if(check_row == -3 || check_col == -3) {
System.out.println("O is winner");
x = 0; run_game();
}else if(draw == 9) {
System.out.println("Draw both");
x = 0; run_game();
}
}
}
//ถ้านับเงื่อนไขตรงแล้วจะแสดงผู้ชนะ
public void lick_win(int check_lick) {
if(check_lick == 3) {
System.out.println("X is winner");
x = 0; run_game();
}
if(check_lick == -3) {
System.out.println("O is winner");
x = 0; run_game();
}
}
// true เล่นต่อได้ false หยุดเกม
public boolean run_game() {
if(x==0)game_run = false;
else if(x==1)game_run = true;
return game_run;
}
}