Welcome, Guest: Register On Nairaland / LOGIN! / Trending / Recent / New
Stats: 3,152,748 members, 7,817,065 topics. Date: Saturday, 04 May 2024 at 02:40 AM

A Simple Tic-tac-toe Game Using Javafx - Programming - Nairaland

Nairaland Forum / Science/Technology / Programming / A Simple Tic-tac-toe Game Using Javafx (3188 Views)

Simple python Beginner Project - Build Tic Tac Toe Game Using Your Smartphone / How To Create A Multiplayer Tic Tac Toe Game With Html, Css And Javascript / Command Line Tic-tac-toe With Smart AI (2) (3) (4)

(1) (Reply) (Go Down)

A Simple Tic-tac-toe Game Using Javafx by kingvicky(m): 6:21pm On Nov 02, 2017
Here's the source code for a simple Tic-Tac-Toe game I created with Java. I made use of the the JavaFx gui.

it's basically a two player game.



The TicTacToe.java file

package tictactoe;
/**
* @Author Victor Kingsley
* @Version 1.0
* @Courtesy: HighBreed
* @Date:
*/
import javafx.scene.control.Button;
import javafx.scene.text.Text;
import javafx.scene.control.MenuBar;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.Parent;
public class TicTacToe extends Parent{
public static String startMark="X";
/**
* Set the current player mark the same as the start mark
*
*
*/
public static String currentPlayerMark=startMark;
/**
* The prompt text
*/
public static String promptText="Welcome to the Tic-Tac-Toe game. X plays first";
/**
* Initial scores for each player
*/
public static int xScore=0;
public static int oScore=0;
/**
* Buttons for setting the current player mark
* The prompt text holder
* Menu bars and menus
* Menu items
* Score labels
*/
public static Button row1Col1=new Button(" "wink;
public static Button row1Col2=new Button(" "wink;
public static Button row1Col3=new Button(" "wink;
public static Button row2Col1=new Button(" "wink;
public static Button row2Col2=new Button(" "wink;
public static Button row2Col3=new Button(" "wink;
public static Button row3Col1=new Button(" "wink;
public static Button row3Col2=new Button(" "wink;
public static Button row3Col3=new Button(" "wink;
public static Text prompt=new Text(promptText);
public static MenuBar menuBar=new MenuBar();
public static Menu menu=new Menu("File"wink;
public static MenuItem aboutFile=new MenuItem("About The Game"wink;
public static MenuItem helpFile=new MenuItem("Help"wink;
public static MenuItem endFile=new MenuItem("End Game"wink;
public static Text xTitle=new Text("X"wink;
public static Text oTitle=new Text("O"wink;
/**
* The next button for instantiating the game;
*/
public static Button nextBtn=new Button("Next"wink;
}
Re: A Simple Tic-tac-toe Game Using Javafx by kingvicky(m): 6:27pm On Nov 02, 2017
GameLogicAndMethods.java


package tictactoe;

import javafx.scene.control.TextField;
import static tictactoe.TicTacToe.*;
import javafx.scene.Parent;
import javafx.stage.Window;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.scene.text.Text;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.paint.Color;
import javafx.stage.WindowEvent;

public class GameLogicAndMethods extends Parent{

public static TextField xScoreField=new TextField(" - "wink;
public static TextField oScoreField=new TextField(" - "wink;


public static void changeStartMark(){
if (startMark.equals("X"wink){

startMark="O";
currentPlayerMark=startMark;

promptText="O plays first this time";
prompt.setText(promptText);



}

else{

startMark="X";
currentPlayerMark=startMark;

promptText="X plays first this time";
prompt.setText(promptText);

}
}

public static void switchTurns(){

if (currentPlayerMark.equals("X"wink){

currentPlayerMark="O";
promptText="It's O's turn";
prompt.setText(promptText);

}

else{

currentPlayerMark="X";
promptText="It's X's turn";
prompt.setText(promptText);
}
}

public static boolean checkRow1(){

return((!row1Col1.getText().equals(" "wink) && row1Col1.getText().equals(row1Col2.getText()) && row1Col2.getText().equals(row1Col3.getText()));

}

public static boolean checkRow2(){

return((!row2Col1.getText().equals(" "wink) && row2Col1.getText().equals(row2Col2.getText()) && row2Col2.getText().equals(row2Col3.getText()));

}

public static boolean checkRow3(){

return((!row3Col1.getText().equals(" "wink) && row3Col1.getText().equals(row3Col2.getText()) && row3Col2.getText().equals(row3Col3.getText()));

}

public static boolean checkColumn1(){
return((!row1Col1.getText().equals(" "wink) && row1Col1.getText().equals(row2Col1.getText()) && row2Col1.getText().equals(row3Col1.getText()));

}

public static boolean checkColumn2(){

return((!row1Col2.getText().equals(" "wink) && row1Col2.getText().equals(row2Col2.getText()) && row2Col2.getText().equals(row3Col2.getText()));


}

public static boolean checkColumn3(){

return((!row1Col3.getText().equals(" "wink) && row1Col3.getText().equals(row2Col3.getText()) && row2Col3.getText().equals(row3Col3.getText()));

}

public static boolean checkDiagonal1(){

return ((!row1Col1.getText().equals(" "wink) && row1Col1.getText().equals(row2Col2.getText()) && row2Col2.getText().equals(row3Col3.getText()));
}

public static boolean checkDiagonal2(){

return ((!row1Col3.getText().equals(" "wink) && row1Col3.getText().equals(row2Col2.getText()) && row2Col2.getText().equals(row3Col1.getText()));

}

public static boolean checkRows(){

return (checkRow1() || checkRow2() || checkRow3());
}

public static boolean checkColumns(){

return (checkColumn1() || checkColumn2() || checkColumn3());
}

public static boolean checkDiagonals(){

return (checkDiagonal1() || checkDiagonal2());
}

public static boolean checkWins(){

return (checkRows() || checkColumns() || checkDiagonals());
}

public static boolean isBoardFull(){

return ((!row1Col1.getText().equals(" "wink) && (!row1Col2.getText().equals(" "wink) && (!row1Col3.getText().equals(" "wink) && (!row2Col1.getText().equals(" "wink) && (!row2Col2.getText().equals(" "wink) && (!row2Col3.getText().equals(" "wink) && (!row3Col1.getText().equals(" "wink) && (!row3Col2.getText().equals(" "wink) && (!row3Col3.getText().equals(" "wink));
}

public static boolean boardIsFullWithoutWins(){

return (isBoardFull() == true && !checkWins());
}

public static boolean checkForX(){

return ((row1Col1.getText().equals("X"wink && checkRow1()) || (row2Col1.getText().equals("X"wink && checkRow2()) || (row3Col1.getText().equals("X"wink && checkRow3()) || (row1Col1.getText().equals("X"wink && checkColumn1()) || (row1Col2.getText().equals("X"wink && checkColumn2()) || (row1Col3.getText().equals("X"wink && checkColumn3()) || (row1Col1.getText().equals("X"wink && checkDiagonal1()) || (row1Col3.getText().equals("X"wink && checkDiagonal2()));
}

public static boolean checkForO(){

return ((row1Col1.getText().equals("O"wink && checkRow1()) || (row2Col1.getText().equals("O"wink && checkRow2()) || (row3Col1.getText().equals("O"wink && checkRow3()) || (row1Col1.getText().equals("O"wink && checkColumn1()) || (row1Col2.getText().equals("O"wink && checkColumn2()) || (row1Col3.getText().equals("O"wink && checkColumn3()) || (row1Col1.getText().equals("O"wink && checkDiagonal1()) || (row1Col3.getText().equals("O"wink && checkDiagonal2()));

}

public static void incrementScores(){

if(checkForX() == true){

xScore=xScore+1;

promptText="X wins this game";
prompt.setText(promptText);

xScoreField.setText(""+xScore);
}
else if(checkForO() == true){

oScore=oScore+1;

promptText="O wins this game";
prompt.setText(promptText);

oScoreField.setText(""+oScore);


}
else{

promptText="It's a tie";
prompt.setText(promptText);
}
}

public static void showHelpWindow(Window owner, Modality modality){

final Stage stage=new Stage();

Text helpText=new Text("Welcome to the Tic-Tac-Toe game designed by Kingsley Victor. \n The game is basically a two-player game. The vs-computer function would be added hopefully in the nearest future. \n Each player tries to fill each column with their selected mark. The first to fill the rows, columns or diagonals with their current mark wins the game. \n It is possible to have two rows or columns nearly filled with just an identical mark left to make a win but it requires logic and intelligence in that aspect"wink;

helpText.setFill(Color.ROYALBLUE);

Button exitStage=new Button("Close"wink;

exitStage.setStyle("-fx-background-color: #f5f5f5; -fx-border-color: #dcdcdc; -fx-font-weight: bold;"wink;

exitStage.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
stage.close();
}
});

BorderPane root=new BorderPane();

root.setCenter(helpText);

GridPane windowPane=new GridPane();

windowPane.add(root, 0, 0);

windowPane.add(exitStage, 0, 2);

windowPane.setAlignment(Pos.CENTER);

windowPane.setHgap(3);
windowPane.setVgap(3);

Scene scene=new Scene(windowPane);

stage.setScene(scene);

stage.initOwner(owner);
stage.initModality(modality);

stage.setResizable(false);
stage.setTitle("Help"wink;

stage.show();
}


public static void showAboutWindow(Window owner, Modality modality){

final Stage stage=new Stage();

Text aboutText=new Text("Creator: Kingsley Victor. \n Version: 1.0. \n Year Of Creation: 2017 \n Provider: Nehemiah Ugwa "wink;

aboutText.setFill(Color.YELLOWGREEN);

Button exitStage=new Button("Close"wink;

exitStage.setStyle("-fx-background-color: #f5f5f5; -fx-border-color: #dcdcdc; -fx-font-weight: bold;"wink;

exitStage.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
stage.close();
}
});

BorderPane root=new BorderPane();

root.setCenter(aboutText);

GridPane windowPane=new GridPane();

windowPane.add(root, 0, 0);

windowPane.add(exitStage, 0, 2);

windowPane.setAlignment(Pos.CENTER);

windowPane.setHgap(3);
windowPane.setVgap(3);

Scene scene=new Scene(windowPane);

stage.setScene(scene);

stage.initOwner(owner);
stage.initModality(modality);

stage.setResizable(false);
stage.setTitle("About the game"wink;

stage.show();
}

public static void endWindow(Window owner, Modality modality){


Stage stage=new Stage();

Text xscoreText=new Text("X "+xScoreField.getText());

Text oscoreText=new Text("O "+oScoreField.getText());

Text remark=new Text();

remark.setFill(Color.BLUEVIOLET);

BorderPane border=new BorderPane();

Button exit=new Button("Exit"wink;

exit.setStyle("-fx-background-color: #f5f5f5; -fx-border-color: #dcdcdc; -fx-font-weight: bold;"wink;

exit.setMaxSize(70, 70);
exit.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
System.exit(0);
}
});

border.setCenter(remark);

if (xScore > oScore){

remark.setText("X won the overall game"wink;
}
else if(oScore > xScore){
remark.setText("O won the overall game"wink;
}
else{

remark.setText("The game ended in a draw"wink;
}



GridPane grid=new GridPane();

grid.add(xscoreText, 0, 0);
grid.add(oscoreText, 0, 2);
grid.add(border, 0, 4);
grid.add(exit, 3, 6);
grid.setHgap(3);
grid.setVgap(3);
grid.setAlignment(Pos.CENTER);
grid.setMinSize(350, 350);

Scene scene=new Scene(grid);

stage.setScene(scene);
stage.initOwner(owner);
stage.initModality(modality);
stage.setTitle("Game Sheet"wink;
stage.setOnCloseRequest(new EventHandler<WindowEvent>(){
@Override
public void handle(WindowEvent w){
System.exit(0);
}
});
stage.show();







}

public static void initializeBoards(){

row1Col1.setText(" "wink;
row1Col2.setText(" "wink;
row1Col3.setText(" "wink;
row2Col1.setText(" "wink;
row2Col2.setText(" "wink;
row2Col3.setText(" "wink;
row3Col1.setText(" "wink;
row3Col2.setText(" "wink;
row3Col3.setText(" "wink;


}

/**
* Useful for initializing boards
*/
public static void disableBoards(){

row1Col1.setDisable(true);
row1Col2.setDisable(true);
row1Col3.setDisable(true);
row2Col1.setDisable(true);
row2Col2.setDisable(true);
row2Col3.setDisable(true);
row3Col1.setDisable(true);
row3Col2.setDisable(true);
row3Col3.setDisable(true);
}

public static void enableBoards(){

row1Col1.setDisable(false);
row1Col2.setDisable(false);
row1Col3.setDisable(false);
row2Col1.setDisable(false);
row2Col2.setDisable(false);
row2Col3.setDisable(false);
row3Col1.setDisable(false);
row3Col2.setDisable(false);
row3Col3.setDisable(false);
}



public static void initializeGame(){

changeStartMark();
initializeBoards();
enableBoards();
nextBtn.setDisable(true);
}

public static void checkReasonableParameters(){

if(checkWins() == true || boardIsFullWithoutWins() == true){
incrementScores();
disableBoards();
nextBtn.setDisable(false);
}
}
}

1 Like

Re: A Simple Tic-tac-toe Game Using Javafx by kingvicky(m): 6:29pm On Nov 02, 2017
GameView.java


package tictactoe;

import static tictactoe.GameLogicAndMethods.*;
import static tictactoe.TicTacToe.*;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;


public class GameView extends Parent {

public static GridPane mainPane=new GridPane();
public GameView(){
row1Col1.setMinSize(150, 150);

row1Col2.setMinSize(150, 150);
row1Col3.setMinSize(150, 150);
row2Col1.setMinSize(150, 150);
row2Col2.setMinSize(150, 150);
row2Col3.setMinSize(150, 150);
row3Col1.setMinSize(150, 150);
row3Col2.setMinSize(150, 150);
row3Col3.setMinSize(150, 150);


GridPane boardPane=new GridPane();
GridPane scorePane=new GridPane();
GridPane promptPane=new GridPane();
GridPane buttonPane=new GridPane();
BorderPane menuPane=new BorderPane();

menuPane.setCenter(menuBar);

menuPane.setPrefSize(1000, 700);

menuBar.setPrefWidth(1000);

menuBar.getMenus().addAll(menu);

menu.getItems().addAll(aboutFile, helpFile, endFile);


boardPane.add(row1Col1, 0, 0);
boardPane.add(row1Col2, 1, 0);
boardPane.add(row1Col3, 2, 0);
boardPane.add(row2Col1, 0, 1);
boardPane.add(row2Col2, 1, 1);
boardPane.add(row2Col3, 2, 1);
boardPane.add(row3Col1, 0, 2);
boardPane.add(row3Col2, 1, 2);
boardPane.add(row3Col3, 2, 2);
boardPane.setAlignment(Pos.CENTER);
boardPane.setHgap(0);
boardPane.setVgap(0);
boardPane.setPrefWidth(1000);



nextBtn.setDisable(true);

buttonPane.add(nextBtn, 3, 3);
buttonPane.setAlignment(Pos.CENTER);

scorePane.add(xTitle, 0, 0);
scorePane.add(xScoreField, 2, 0);
scorePane.add(oTitle, 0, 2);
scorePane.add(oScoreField, 2, 2);
scorePane.setHgap(3);
scorePane.setVgap(3);
scorePane.setAlignment(Pos.CENTER);

promptPane.add(prompt, 0, 0);
promptPane.setAlignment(Pos.CENTER);

prompt.setStyle("-fx-font-size: 30px;"wink;

mainPane.add(menuPane, 0, 0);
mainPane.add(boardPane, 0, 2);
mainPane.add(scorePane, 0, 1);
mainPane.add(promptPane, 0, 6);
mainPane.add(buttonPane, 0, 7);
mainPane.setAlignment(Pos.CENTER);
boardPane.setGridLinesVisible(true);

mainPane.setHgap(5);
mainPane.setVgap(5);

mainPane.setMaxSize(700, 700);

xScoreField.setDisable(true);

oScoreField.setDisable(true);

xScoreField.setMaxSize(40, 40);
oScoreField.setMaxSize(40, 40);

nextBtn.setStyle("-fx-background-color: #f5f5f5; -fx-font-weight: bold; -fx-border-color: blue;"wink;















prompt.setFill(Color.RED);
xTitle.setFill(Color.BLUE);
oTitle.setFill(Color.YELLOWGREEN);

row1Col1.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row1Col1.setText(currentPlayerMark);
row1Col1.setMinSize(150, 150);

if (currentPlayerMark.equals("X"wink){

row1Col1.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row1Col1.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row1Col1.setDisable(true);

checkReasonableParameters();


}
});

row1Col2.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row1Col2.setText(currentPlayerMark);
row1Col2.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row1Col2.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row1Col2.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row1Col2.setDisable(true);

checkReasonableParameters();
}
});

row1Col3.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row1Col3.setText(currentPlayerMark);
row1Col3.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row1Col3.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row1Col3.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row1Col3.setDisable(true);

checkReasonableParameters();
}
});

row2Col1.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row2Col1.setText(currentPlayerMark);
row2Col1.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row2Col1.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row2Col1.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row2Col1.setDisable(true);

checkReasonableParameters();
}
});

row2Col2.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row2Col2.setText(currentPlayerMark);
row2Col2.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row2Col2.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row2Col2.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row2Col2.setDisable(true);

checkReasonableParameters();
}
});

row2Col3.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row2Col3.setText(currentPlayerMark);
row2Col3.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row2Col3.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row2Col3.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row2Col3.setDisable(true);

checkReasonableParameters();
}
});

row3Col1.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row3Col1.setText(currentPlayerMark);
row3Col1.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row3Col1.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row3Col1.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row3Col1.setDisable(true);

checkReasonableParameters();
}
});

row3Col2.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row3Col2.setText(currentPlayerMark);
row3Col2.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row3Col2.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row3Col2.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row3Col2.setDisable(true);

checkReasonableParameters();
}
});

row3Col3.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
row3Col3.setText(currentPlayerMark);
row3Col3.setMinSize(150, 150);
if (currentPlayerMark.equals("X"wink){

row3Col3.setStyle("-fx-text-fill: blue; -fx-font-size: 60px; -fx-font-weight: bold;"wink;

}

else {
row3Col3.setStyle("-fx-text-fill: yellow; -fx-font-size: 60px; -fx-font-weight: bold;"wink;
}

switchTurns();

row3Col3.setDisable(true);

checkReasonableParameters();
}
});



nextBtn.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
initializeGame();
}
});

}


}
Re: A Simple Tic-tac-toe Game Using Javafx by kingvicky(m): 6:31pm On Nov 02, 2017
Main.java


package tictactoe;

import javafx.application.Application;
import javafx.stage.Stage;
import static javafx.application.Application.launch;
import static tictactoe.TicTacToe.*;
import javafx.scene.Scene;
import javafx.event.EventHandler;
import javafx.event.ActionEvent;
import javafx.scene.Cursor;
import static tictactoe.GameView.mainPane;
import static javafx.stage.Modality.WINDOW_MODAL;
import static tictactoe.GameLogicAndMethods.endWindow;
import static tictactoe.GameLogicAndMethods.showAboutWindow;
import static tictactoe.GameLogicAndMethods.showHelpWindow;
import static tictactoe.GameLogicAndMethods.disableBoards;



public class Main extends Application{


@Override
public void start(final Stage stage){

GameView gameView=new GameView();

TicTacToe tictac=new TicTacToe();

Scene scene=new Scene(mainPane, 700, 600);

aboutFile.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent e){
showAboutWindow(stage, WINDOW_MODAL);
}
});

helpFile.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent e){
showHelpWindow(stage, WINDOW_MODAL);
}
});

endFile.setOnAction(new EventHandler<ActionEvent>(){
@Override public void handle(ActionEvent e){
endWindow(stage, WINDOW_MODAL);

disableBoards();
nextBtn.setDisable(true);








}


});



scene.setCursor(Cursor.HAND);

stage.setScene(scene);
stage.setTitle("Tic-Tak-Toe"wink;
stage.setResizable(false);
stage.show();





}

public static void main(String[] args){

launch(args);
}
}
Re: A Simple Tic-tac-toe Game Using Javafx by LordeCalifornia: 5:03pm On Nov 03, 2017
Nice. can you post a screenshot of the UI?
Re: A Simple Tic-tac-toe Game Using Javafx by kingvicky(m): 7:58pm On Nov 03, 2017
LordeCalifornia:
Nice. can you post a screenshot of the UI?
The laptop I used ain't with me but hopefully I would get a pic
Re: A Simple Tic-tac-toe Game Using Javafx by LordeCalifornia: 8:02pm On Nov 03, 2017
kingvicky:

The laptop I used ain't with me but hopefully I would get a pic
Alright.

(1) (Reply)

Towards A Stronger Nigerian Software Industry / Cost Of Developing An Application Like Youtube In Nigeria / How Can I Edit A PDF Online For Free?

(Go Up)

Sections: politics (1) business autos (1) jobs (1) career education (1) romance computers phones travel sports fashion health
religion celebs tv-movies music-radio literature webmasters programming techmarket

Links: (1) (2) (3) (4) (5) (6) (7) (8) (9) (10)

Nairaland - Copyright © 2005 - 2024 Oluwaseun Osewa. All rights reserved. See How To Advertise. 55
Disclaimer: Every Nairaland member is solely responsible for anything that he/she posts or uploads on Nairaland.