check draw.
This commit is contained in:
@@ -21,19 +21,18 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation("org.slf4j:slf4j-api:2.0.17")
|
||||||
|
implementation("ch.qos.logback:logback-classic:1.5.26")
|
||||||
implementation("org.aspectj:aspectjrt:1.9.25")
|
implementation("org.aspectj:aspectjrt:1.9.25")
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
|
||||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
||||||
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.named('jar') {
|
tasks.named('jar') {
|
||||||
manifest {
|
manifest {
|
||||||
attributes('Implementation-Title': 'edu.tictactoe',
|
attributes(
|
||||||
'Implementation-Version': 1.0,
|
'Automatic-Module-Name':'edu.tictactoe',
|
||||||
'Main-Class': 'edu.tictactoe.App',
|
'Implementation-Title': 'edu.tictactoe',
|
||||||
'Class-Path': 'edu.tictactoe org.aspectj.runtime' )
|
'Implementation-Version': 1.0,
|
||||||
|
'Main-Class': 'edu.tictactoe.App',
|
||||||
|
'Class-Path': 'edu.tictactoe org.aspectj.runtime' )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ import javax.swing.Icon;
|
|||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.Frame;
|
import java.awt.Frame;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -26,6 +30,8 @@ public final class Board {
|
|||||||
Integer player = Board.PlayerUser;
|
Integer player = Board.PlayerUser;
|
||||||
Frame frame = null;
|
Frame frame = null;
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger(Board.class);
|
||||||
|
|
||||||
public Board(Frame frame) {
|
public Board(Frame frame) {
|
||||||
this.frame = frame;
|
this.frame = frame;
|
||||||
}
|
}
|
||||||
@@ -78,14 +84,14 @@ public final class Board {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean winnerCheck() {
|
protected ResultEnum winnerCheck() {
|
||||||
|
|
||||||
if ((buttons[0].played && buttons[4].played && buttons[8].played)
|
if ((buttons[0].played && buttons[4].played && buttons[8].played)
|
||||||
&&
|
&&
|
||||||
buttons[0].player == buttons[4].player
|
buttons[0].player == buttons[4].player
|
||||||
&& buttons[4].player == buttons[8].player) {
|
&& buttons[4].player == buttons[8].player) {
|
||||||
|
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +100,7 @@ public final class Board {
|
|||||||
buttons[2].player == buttons[4].player
|
buttons[2].player == buttons[4].player
|
||||||
&& buttons[4].player == buttons[6].player) {
|
&& buttons[4].player == buttons[6].player) {
|
||||||
|
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +108,7 @@ public final class Board {
|
|||||||
&&
|
&&
|
||||||
buttons[0].player == buttons[1].player
|
buttons[0].player == buttons[1].player
|
||||||
&& buttons[1].player == buttons[2].player) {
|
&& buttons[1].player == buttons[2].player) {
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,21 +117,21 @@ public final class Board {
|
|||||||
buttons[3].player == buttons[4].player
|
buttons[3].player == buttons[4].player
|
||||||
&& buttons[4].player == buttons[5].player) {
|
&& buttons[4].player == buttons[5].player) {
|
||||||
|
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((buttons[6].played && buttons[7].played && buttons[8].played)
|
if ((buttons[6].played && buttons[7].played && buttons[8].played)
|
||||||
&&
|
&&
|
||||||
buttons[6].player == buttons[7].player
|
buttons[6].player == buttons[7].player
|
||||||
&& buttons[7].player == buttons[8].player) {
|
&& buttons[7].player == buttons[8].player) {
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((buttons[0].played && buttons[3].played && buttons[6].played)
|
if ((buttons[0].played && buttons[3].played && buttons[6].played)
|
||||||
&&
|
&&
|
||||||
buttons[0].player == buttons[3].player
|
buttons[0].player == buttons[3].player
|
||||||
&& buttons[3].player == buttons[6].player) {
|
&& buttons[3].player == buttons[6].player) {
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,34 +139,64 @@ public final class Board {
|
|||||||
&&
|
&&
|
||||||
buttons[1].player == buttons[4].player
|
buttons[1].player == buttons[4].player
|
||||||
&& buttons[4].player == buttons[7].player) {
|
&& buttons[4].player == buttons[7].player) {
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((buttons[2].played && buttons[5].played && buttons[8].played)
|
if ((buttons[2].played && buttons[5].played && buttons[8].played)
|
||||||
&&
|
&&
|
||||||
buttons[2].player == buttons[5].player
|
buttons[2].player == buttons[5].player
|
||||||
&& buttons[5].player == buttons[8].player) {
|
&& buttons[5].player == buttons[8].player) {
|
||||||
return true;
|
return ResultEnum.winner;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
int count = 0;
|
||||||
|
for (BoardButton boardButton : buttons) {
|
||||||
|
if (boardButton.played) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count == 9) {
|
||||||
|
return ResultEnum.draw;
|
||||||
|
}
|
||||||
|
|
||||||
|
// else
|
||||||
|
return ResultEnum.playcontinues;
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized protected void PlayEventUpdate() {
|
synchronized protected void PlayEventUpdate() {
|
||||||
long delay = 0L;
|
long delay = 0L;
|
||||||
|
ResultEnum checkplays = winnerCheck();
|
||||||
|
|
||||||
if (winnerCheck()) {
|
if (ResultEnum.winner == checkplays) {
|
||||||
|
|
||||||
frame.setEnabled(false);
|
frame.setEnabled(false);
|
||||||
// show Winner Dialog
|
// show Winner Dialog
|
||||||
String message = this.player == Board.PlayerUser ? String.format("You") : String.format("System");
|
String message = this.player == Board.PlayerUser ? String.format("You") : String.format("System");
|
||||||
frame.setTitle("TicTacToe - " + message + " won.");
|
frame.setTitle("TicTacToe - " + message + " won.");
|
||||||
JOptionPane.showMessageDialog(frame, message + " won.", "Winner!", JOptionPane.WARNING_MESSAGE);
|
JOptionPane.showMessageDialog(frame, message + " won.", "Winner!", JOptionPane.WARNING_MESSAGE);
|
||||||
|
|
||||||
EventQueue.invokeLater(() -> {
|
EventQueue.invokeLater(() -> {
|
||||||
((BoardFrame) frame).fireGameOverWindowEvent("Game over.");
|
((BoardFrame) frame).fireGameOverWindowEvent("Game over.");
|
||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ResultEnum.draw == checkplays) {
|
||||||
|
// show Draw Dialog
|
||||||
|
frame.setTitle("TicTacToe - We have a Draw!");
|
||||||
|
//Disable buttons
|
||||||
|
for (Component component : frame.getComponents()) {
|
||||||
|
if (component instanceof BoardButton) {
|
||||||
|
component.setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//play continues
|
||||||
setPlayerTurnOnBoard();
|
setPlayerTurnOnBoard();
|
||||||
|
|
||||||
if (this.player == Board.PlayerSystem) {
|
if (this.player == Board.PlayerSystem) {
|
||||||
@@ -193,8 +229,12 @@ class SystemPlayTask extends TimerTask {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Logger logger = LoggerFactory.getLogger(SystemPlayTask.class);
|
||||||
|
|
||||||
int iplay = board.getRandomPlay();
|
int iplay = board.getRandomPlay();
|
||||||
System.out.println("Task execute mark " + iplay + " at: " + new java.util.Date());
|
|
||||||
|
logger.info("Task execute mark " + iplay + " at: " + new java.util.Date());
|
||||||
|
|
||||||
board.getButtons()[iplay].doClick();
|
board.getButtons()[iplay].doClick();
|
||||||
board.setEnabledUIContainer(true);
|
board.setEnabledUIContainer(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package edu.tictactoe;
|
||||||
|
|
||||||
|
public enum ResultEnum {
|
||||||
|
draw, winner, playcontinues;
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package edu.tictactoe;
|
||||||
|
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
|
||||||
|
@Aspect
|
||||||
|
public class Validator {
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user