×
Samples Blogs Make Payment About Us Reviews 4.9/5 Order Now

Java Program to Create Wordle Game Assignment Solution

June 14, 2024
Dr. Hannah Lynch
Dr. Hannah
🇬🇧 United Kingdom
Java
Dr. Hannah, a distinguished Ph.D. holder from the University of York, brings over a decade of expertise to our service. With an impressive track record of completing 1100+ Java assignments, Dr. Hannah's profound knowledge and extensive experience ensure exemplary solutions tailored to meet your specific requirements.
Key Topics
  • Instructions
  • Requirements and Specifications
Tip of the day
Familiarize yourself with OCaml's pattern matching; it simplifies handling recursive data structures like lists and trees, making your code concise and easier to debug.
News
In 2024, Girls Who Code introduced a Data Science + AI track in their free summer programs for high school students, fostering skills in cybersecurity and creative coding​

Instructions

Objective

To complete a Java assignment, you need to write a program that creates a Wordle game. In this Wordle game, players attempt to guess a hidden word by entering guesses, and the program provides feedback on the correctness of those guesses. To implement this, you'll need to handle user input, compare it with the hidden word, and display feedback accordingly. Utilize Java's string manipulation functions for efficient comparisons and implement a user-friendly interface for smooth interaction. Keep in mind the principles of object-oriented programming and code modularity..

Requirements and Specifications

program-to-create-wordle-game-in-java (1)

Source Code

import java.util.Random; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.control.Alert.AlertType; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.GridPane; import javafx.scene.layout.StackPane; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javafx.stage.Stage; /** * Jordle class. */ public class Jordle extends Application { /** * This variable stores all textfields of the grid. */ private TextField[][] fields; /** * Variable to hold the current row being used in grid. */ private int row; /** * Variable to hold the current column being used in grid. */ private int col; /** * Variable to hold the current word being guessed. */ private String word; /** * Variable to know if the game ended or not. */ private boolean gameEnded; /** * GridPane object that contains all TextFields. */ private GridPane gridPane; /** * Restart game button. */ private Button restartBtn; /** * Instructions button. */ private Button instructionsBtn; /** * Label to display info. */ private Label infoLabel; /** * Label to display title of game. */ private Label titleLabel; /** * StackPane that contains the rest of components. */ private StackPane mainPane; /** * Method to pick a random word from the list of words. * @return */ public String choseWord() { // Create Random object Random rnd = new Random(); // Pick one random word int index = rnd.nextInt(Words.list.size()); // Return return Words.list.get(index); } /** * Method to display info to user when s/he press enters without. * filling the row */ public void displayMustFillRowAlert() { Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Error"); alert.setHeaderText("Error"); alert.setContentText("Please enter a 5-letter word"); alert.showAndWait(); } /** * Given a row id, check if it is filled with a word. * @param rowId Index of row * @return boolean */ public boolean isRowFilled(int rowId) { // If the current row is filled, check for correct, incorrect letters boolean isFilled = true; for (int coli = 0; coli < 5; coli++) { if (fields[row][coli].getText().isEmpty()) { isFilled = false; break; } } return isFilled; } /** * Method to clear all words from grid. */ public void clearGrid() { for (int i = 0; i < 6; i++) { for (int j = 0; j < 5; j++) { // Clear background color fields[i][j].setStyle(""); } } gridPane.requestFocus(); } /** * The following method creates a grid. * This method will create a grid of 6x5 filled with TextField objects * @return GridPane object */ public GridPane createGrid() { fields = new TextField[6][5]; GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); // Add the 6x5 textfields for (int i = 0; i < 6; i++) { for (int j = 0; j < 5; j++) { TextField field = new TextField() { @Override public void replaceText(int start, int end, String text) { super.replaceText(start, end, text.toUpperCase()); } }; field.setFont(Font.font("Verdana", FontWeight.BOLD, 25)); field.setPrefWidth(50); field.setPrefHeight(50); field.setEditable(false); fields[i][j] = field; grid.add(fields[i][j], j, i, 1, 1); } } return grid; } /** * JavaFX required method. */ @Override public void start(Stage primaryStage) throws Exception { // Create Grid gridPane = createGrid(); // Create the info label, the restart and instructions button titleLabel = new Label("Jordle"); infoLabel = new Label("Try guessing a word!"); restartBtn = new Button("Restart"); instructionsBtn = new Button("Instructions"); mainPane = new StackPane(); // Add events to buttons instructionsBtn.setOnAction(new EventHandler() { /** * Event method for the instructions buttons. * @param event Event object */ @Override public void handle(ActionEvent event) { Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Instructions"); alert.setHeaderText("Instructions"); alert.setContentText("Welcome to Jordle! Try guessing some words!\n" + "You have to guess a 5-letters word.\n\n" + "Enter the letters of the word and press enter.\n" + "All letters in the correct position will be coloured green\n" + "The letters present in the word but at incorrect position will be coloured yellow\n" + "All other letters (not in word) are coloured gray\n\n" + "You only have 6 attemps"); alert.showAndWait(); } }); restartBtn.setOnAction(new EventHandler() { /** * Event handler for restart Button. * @param event Event object */ @Override public void handle(ActionEvent event) { // Pick a new word word = choseWord(); row = 0; col = 0; gameEnded = false; infoLabel.setText("Try guessing a word!"); // Clear all text fields clearGrid(); } }); mainPane.getChildren().add(gridPane); Scene scene = new Scene(mainPane, 500, 500); // Handle the inputs here // Start game // Pick random word gameEnded = false; word = choseWord(); row = 0; col = 0; // This one uses a lambda function scene.addEventFilter(KeyEvent.KEY_PRESSED, event -> { if (gameEnded) { return; } // Check that the key is in the alphabet if (event.getCode().isLetterKey()) { if (row < 6 && col < 5 && fields[row][col].getText().isEmpty()) { fields[row][col].setText(event.getCode().toString()); col++; } } else if (event.getCode().equals(KeyCode.ENTER)) { if (row > 5) { return; } // If the current row is filled, check for correct, incorrect letters if (isRowFilled(row)) { // Get word from filled fields String inputWord = ""; for (int coli = 0; coli < 5; coli++) { inputWord += fields[row][coli].getText(); } // Convert to lowercase inputWord = inputWord.toLowerCase(); // Now, compare words int matches = 0; for (int i = 0; i < 5; i++) { char real = word.charAt(i); char input = inputWord.charAt(i); if (real == input) { // Set field to green matches++; fields[row][i].setStyle("-fx-background-color: green;"); } else { // if the letter is in the word, set background to yellow, if not, set to gray if (word.indexOf(input) >= 0) { fields[row][i].setStyle("-fx-background-color: yellow;"); } else { fields[row][i].setStyle("-fx-background-color: darkgray;"); } } } if (matches == 5) { // all chars matched, user won infoLabel.setText("Congratulations! You've guessed the word!"); gameEnded = true; } else { row++; col = 0; if (row > 5) { // no more guessings left infoLabel.setText("Game over. The word was " + word + "."); gameEnded = true; } } } else { displayMustFillRowAlert(); } } else if (event.getCode().equals(KeyCode.BACK_SPACE)) { if (row > 5) { return; } // Find last filled field int lastCol = -1; ; for (int coli = 0; coli < 5; coli++) { if (!fields[row][coli].getText().isEmpty()) { lastCol = coli; } } if (lastCol != -1) { fields[row][lastCol].setText(""); col = lastCol--; if (col < 0) { col = 0; } } } }); titleLabel.setAlignment(Pos.TOP_CENTER); titleLabel.setFont(Font.font("Verdana", FontWeight.BOLD, 25)); infoLabel.setAlignment(Pos.BOTTOM_LEFT); mainPane.getChildren().add(titleLabel); StackPane.setAlignment(titleLabel, Pos.TOP_CENTER); mainPane.getChildren().add(infoLabel); StackPane.setAlignment(infoLabel, Pos.BOTTOM_LEFT); mainPane.getChildren().add(restartBtn); StackPane.setAlignment(restartBtn, Pos.BOTTOM_CENTER); mainPane.getChildren().add(instructionsBtn); StackPane.setAlignment(instructionsBtn, Pos.BOTTOM_RIGHT); primaryStage.setScene(scene); primaryStage.show(); } /** * Main method of the program. * @param args Command line arguments * @throws Exception Exception */ public static void main(String[] args) throws Exception { launch(args); } }

Similar Samples

Check out our diverse programming homework samples to see the high-quality work we provide. Each example demonstrates our expertise in various programming languages and problem-solving skills. These samples will give you confidence in our ability to handle your assignments with precision and excellence.