On my educational trek through the capabilities of JavaFX, I thought it would be a valuable challenge to create Tic Tac Toe. It took me far longer than expected to get this far, but despite likely being even further from completion, I'd like a review on the current state of things and on anything my 'blind coding' unwittingly implemented unconventionally/inefficiently/just plain weirdly.
Some names may seem strange, but that could be due to my editing the image-related code to point to URLs rather than local files for the sake of this post.
TicTacToe main class:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class TicTacToe extends Application {
static Player player = Player.O_PLAYER;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Button[] cells = new Button[9];
for (int i = 0; i < cells.length; i++) {
cells[i] = new Button("",
new ImageView(new Image("http://i.imgur.com/KAQPbPd.png")));
registerOnAction(cells[i]);
}
GridPane board = new GridPane();
for (int row = 1, col = 1, cell = 0; row <= 3; row++, col -=2) {
board.add(cells[cell++], row, col++);
board.add(cells[cell++], row, col++);
board.add(cells[cell++], row, col);
}
Scene scene = new Scene(board);
stage.setScene(scene);
stage.setTitle("TicTacToe By Legato");
stage.getIcons().add(new Image("http://i.imgur.com/gxhJkc0.png"));
stage.show();
}
private static Image retrieveMarker() {
player = player == Player.X_PLAYER ? Player.O_PLAYER : Player.X_PLAYER;
return player.marker();
}
private static void registerOnAction(Button button) {
button.setOnAction(e ->
button.setGraphic(new ImageView(retrieveMarker()))
);
}
}
Player enum:
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
public enum Player {
X_PLAYER(new ImageView(new Image("http://i.imgur.com/HY6GeUY.png"))),
O_PLAYER(new ImageView(new Image("http://i.imgur.com/KgHHxL6.png")));
private final ImageView view;
Player(ImageView view) {
this.view = view;
}
public Image marker() {
return view.getImage();
}
@Override
public String toString() {
return name().charAt(0) + name().substring(2).toLowerCase();
}
}
Follow-ups:
- Completed Tic-Tac-Toe.
- Tic-Tactics.