check draw.
This commit is contained in:
@@ -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 {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user