check draw.

This commit is contained in:
2026-02-06 15:07:46 -05:00
parent cff9ca6463
commit 47d13ee573
4 changed files with 73 additions and 21 deletions
+5 -6
View File
@@ -21,17 +21,16 @@ repositories {
}
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")
}
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
tasks.named('jar') {
manifest {
attributes('Implementation-Title': 'edu.tictactoe',
attributes(
'Automatic-Module-Name':'edu.tictactoe',
'Implementation-Title': 'edu.tictactoe',
'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.JOptionPane;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.image.BufferedImage;
@@ -26,6 +30,8 @@ public final class Board {
Integer player = Board.PlayerUser;
Frame frame = null;
Logger logger = LoggerFactory.getLogger(Board.class);
public Board(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)
&&
buttons[0].player == buttons[4].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[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[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[4].player == buttons[5].player) {
return true;
return ResultEnum.winner;
}
if ((buttons[6].played && buttons[7].played && buttons[8].played)
&&
buttons[6].player == buttons[7].player
&& buttons[7].player == buttons[8].player) {
return true;
return ResultEnum.winner;
}
if ((buttons[0].played && buttons[3].played && buttons[6].played)
&&
buttons[0].player == buttons[3].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[4].player == buttons[7].player) {
return true;
return ResultEnum.winner;
}
if ((buttons[2].played && buttons[5].played && buttons[8].played)
&&
buttons[2].player == buttons[5].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() {
long delay = 0L;
ResultEnum checkplays = winnerCheck();
if (winnerCheck()) {
if (ResultEnum.winner == checkplays) {
frame.setEnabled(false);
// show Winner Dialog
String message = this.player == Board.PlayerUser ? String.format("You") : String.format("System");
frame.setTitle("TicTacToe - " + message + " won.");
JOptionPane.showMessageDialog(frame, message + " won.", "Winner!", JOptionPane.WARNING_MESSAGE);
EventQueue.invokeLater(() -> {
((BoardFrame) frame).fireGameOverWindowEvent("Game over.");
});
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();
if (this.player == Board.PlayerSystem) {
@@ -193,8 +229,12 @@ class SystemPlayTask extends TimerTask {
@Override
public void run() {
Logger logger = LoggerFactory.getLogger(SystemPlayTask.class);
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.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 {
}