DEV Community

Cover image for How to Create Your Own Wordle Game in HTML, CSS, and JS
Aziz Bergach
Aziz Bergach

Posted on • Originally published at softwareengine.substack.com

How to Create Your Own Wordle Game in HTML, CSS, and JS

Introduction

A Glimpse into Wordle's World

Hey there! Ever caught yourself absolutely hooked on Wordle, that wildly popular word puzzle game? It's simple, fun, and oh-so-addictive, right? But what if I told you that you could channel that addiction into something incredibly productive? That's right! Today, we're diving into the exciting journey of building your very own Wordle game. And guess what? You'll be doing it with HTML, CSS, and JavaScript - the holy trinity of web development!

Why This Project Rocks for Learning

Creating a Wordle game is more than just a fun pastime. It's a hands-on way to sharpen your web development skills. You'll get to play around with the structure, design, and logic of a web application, and come out on the other side with something to show off. Ready to jump in? Let's get started!

What You'll Need: Prerequisites

The Basics: HTML, CSS, JS Knowledge

Before we start, let's make sure you've got the basics down. A comfortable grasp of HTML for structure, CSS for styling, and JavaScript for functionality is crucial. Don't worry if you're not an expert – enthusiasm and willingness to learn are your best tools here.

Free Wordle Game API access

We are going to use Wordle Game API in this tutorial as it provide a free plan to use, and I think it's really good for the purpose of the tutorial

Tools of the Trade

You'll also need a text editor (like Visual Studio Code or Sublime Text) and a browser to test your game. That's it! No fancy software required.

Setting the Stage: HTML Structure

Creating the Game Board

First things first: your HTML document. This is where you'll set up your game board. Think of it as the skeleton of your Wordle game.

Input Fields for Guesses

You'll need a place for players to input their guesses. We'll set up input fields that not only look neat but are super user-friendly.

Display Area for Feedback

Players need to know how they're doing, right? We'll create a section to display feedback for each guess. Green for right, yellow for close, and gray for try-again.

the html code structure

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Custom Wordle Game</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <h1>Wordle Game</h1>
    <div id="gameBoard"></div>
    <input type="text" id="guessInput" maxlength="5">
    <button id="guessButton">Guess</button>
    <script src="script.js"></script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Bringing It to Life: CSS Styling

Styling the Game Board

Now, let's make it pretty with CSS. We're talking colors, fonts, and layout. This is where your game starts to come alive visually.

Responsive Design Tips

We want everyone to enjoy your game, whether they're on a laptop or a smartphone. I'll show you some tricks to make your game responsive and accessible.

Color Scheme and Aesthetics

Picking the right color scheme is crucial. We'll dive into how to choose a palette that's not only appealing but also user-friendly.

The styling code in CSS*

body {
    font-family: Arial, sans-serif;
    text-align: center;
    background-color: #f0f0f0;
}

#gameBoard {
    display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 10px;
  margin: 20px auto;
  max-width: fit-content;
}

.cell {
    width: 60px;
    height: 60px;
    border: 2px solid #333;
    text-align: center;
    line-height: 60px;
    font-size: 2em;
}

.cell.correct {
  background: #538d4e;
  color: white;
}

.cell.semi-correct {
  background: #b59f3b;
  color: white;
}

.cell.incorrect {
  background: #3a3a3c;
  color: white;
}

@media (max-width: 400px) {
  .cell {
    width: 40px;
    height: 40px;
    border: 1px solid #333;
    text-align: center;
    line-height: 40px;
    font-size: 1em;
}
}
Enter fullscreen mode Exit fullscreen mode

The Game Logic: JavaScript Core

Setting Up the Game Logic

The heart of your game is its logic. We'll write JavaScript code that defines how the game works, how words are chosen, and how guesses are evaluated.

Handling User Input

We need to make sure the game responds to player input correctly. This means checking their guesses, providing hints, and keeping track of their progress.

Implementing the Wordle Algorithm

The Wordle magic lies in its algorithm. I'll guide you through creating an algorithm that randomly selects words and checks player guesses against it.

** Javascript code for the wordle game**

const apiKey = 'the api key from the wordle game api <X-RapidAPI-Key>'; // Replace with your API key from RapidAPI
const apiUrl = 'https://wordle-game-api1.p.rapidapi.com/guess';

const gameBoard = document.getElementById('gameBoard');
const guessInput = document.getElementById('guessInput');
const guessButton = document.getElementById('guessButton');
const inputs = [];
const results = [];

let solutionWord = '';

// Fetch a word from the API
function validate(word) {
    fetch(apiUrl, {
        "method": 'POST',
        "headers": {
          'content-type': 'application/json',
          'X-RapidAPI-Key': apiKey,
          'X-RapidAPI-Host': 'wordle-game-api1.p.rapidapi.com'
        },
        "body": JSON.stringify({word})
    })
    .then(response => response.json())
    .then(data => {
      const {result , isOk, error} = data;
      if (!isOk) {
        console.log(error)
      } else {
        inputs.push(word);
        results.push(result);
        guessInput.value = "";
        refreshGame();
      }
    })
    .catch(err => {
        console.error(err);
    });
}

// update game UI
function refreshGame() {
  const cells = gameBoard.getElementsByClassName('cell');
    for (let i = 0; i < 30; i++) { // 6 attempts, 5 letters each
        let cell = cells[i];
        let y = Math.floor(i / 5);
        let x = i - y * 5;
      if(inputs.length > y && inputs[y][x]) {
        const result = results[y][x] === "+" ? "correct" : results[y][x] === "x" ? "semi-correct" : "incorrect";
        cell.textContent = inputs[y][x].toUpperCase();
        cell.classList.add(result);
      }
    }
}

// Initialize game
function initializeGame() {
    for (let i = 0; i < 30; i++) { // 6 attempts, 5 letters each
        let cell = document.createElement('div');
        cell.classList.add('cell');
        let y = Math.floor(i / 5);
        let x = i - y * 5;
      if(inputs.length > y && inputs[y][x]) {
        const result = results[y][x] === "+" ? "correct" : results[y][x] === "x" ? "semi-correct" : "incorrect";
        cell.textContent = inputs[y][x].toUpperCase();
        cell.classList.add(result);
      }
        gameBoard.appendChild(cell);
    }
}

// Event listener for the guess button
guessButton.addEventListener('click', function() {
    let guess = guessInput.value.toLowerCase();
    if (guess.length === 5) {
        validate(guess)
    } else {
        alert('Please enter a 5-letter word.');
    }
});

initializeGame();
Enter fullscreen mode Exit fullscreen mode

Enhancing User Experience

Adding Animations and Transitions

Animations can make your game feel more dynamic. We'll add some smooth transitions to make the gameplay experience even more engaging.

User Feedback and Error Handling

A great game communicates with its players. We'll implement clear messages for errors and successes, enhancing the overall user experience.

Storing Game Data

Using Local Storage for Game Progress

Don't want players to lose their progress? We'll use the browser's local storage to save their game state, so they can pick up where they left off.

Reset and Continue Game Options

Giving players the option to reset or continue their game is key. We'll add functionality for both, making your game flexible and user-friendly.

Making the Game Challenging

Implementing a Dictionary of Words

A good Wordle game needs a solid word list. We'll explore how to implement a dictionary of words that the game can use to challenge players.

Difficulty Levels and Daily Challenges

To keep things spicy, we'll add different difficulty levels and daily challenges. This will keep your players coming back for more.

Conclusion

We've covered a lot, haven't we? From setting up your HTML structure to deploying your game online, you're now ready to create your own version of Wordle. Remember, the best way to learn is by doing, so don't be afraid to experiment and make mistakes. That's how you grow!
You could check the preview here

FAQs

  1. How do I make sure my Wordle game is unique?
  2. Can I add more features to my game than what's covered here?
  3. What are some common challenges I might face when coding this game?
  4. How can I ensure my game is accessible to all players?
  5. Where can I share my completed Wordle game to get feedback?

Top comments (0)