Introduction
A word search puzzle is a game where words are hidden in a grid of letters. The objective of this puzzle is to find all the hidden words within the grid. In this tutorial, we will create a word search puzzle generator using C++. The program will generate a grid of letters and place the specified words into it either horizontally, vertically, or diagonally.
Objective
The goal of this program is to create a C++ application that generates a random word search puzzle. The puzzle will have words placed in random positions in the grid, and users can try to find the hidden words by scanning the grid.
Program Code
#include #include #include #include #include using namespace std; const int GRID_SIZE = 10; // Define the size of the grid const int MAX_WORDS = 5; // Maximum number of words to be placed in the grid // Function to print the grid void printGrid(vector<vector>& grid) { for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { cout << grid[i][j] << " "; } cout << endl; } } // Function to check if a word can fit in the grid bool canPlaceWord(vector<vector>& grid, const string& word, int x, int y, int dx, int dy) { for (int i = 0; i < word.length(); i++) { int nx = x + i * dx; int ny = y + i * dy; if (nx < 0 || nx >= GRID_SIZE || ny < 0 || ny >= GRID_SIZE || (grid[nx][ny] != ' ' && grid[nx][ny] != word[i])) { return false; } } return true; } // Function to place a word in the grid void placeWord(vector<vector>& grid, const string& word, int x, int y, int dx, int dy) { for (int i = 0; i < word.length(); i++) { int nx = x + i * dx; int ny = y + i * dy; grid[nx][ny] = word[i]; } } // Function to generate the word search puzzle void generatePuzzle(vector& words) { vector<vector> grid(GRID_SIZE, vector(GRID_SIZE, ' ')); srand(time(0)); // Try to place each word randomly in the grid for (const string& word : words) { bool placed = false; while (!placed) { int x = rand() % GRID_SIZE; int y = rand() % GRID_SIZE; int direction = rand() % 8; int dx = 0, dy = 0; // Determine the direction of the word placement switch (direction) { case 0: dx = 1; dy = 0; break; // Horizontal right case 1: dx = -1; dy = 0; break; // Horizontal left case 2: dx = 0; dy = 1; break; // Vertical down case 3: dx = 0; dy = -1; break; // Vertical up case 4: dx = 1; dy = 1; break; // Diagonal right down case 5: dx = -1; dy = -1; break; // Diagonal left up case 6: dx = 1; dy = -1; break; // Diagonal right up case 7: dx = -1; dy = 1; break; // Diagonal left down } // Check if the word can fit in the grid if (canPlaceWord(grid, word, x, y, dx, dy)) { placeWord(grid, word, x, y, dx, dy); placed = true; } } } // Fill remaining empty spaces with random letters for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { if (grid[i][j] == ' ') { grid[i][j] = 'A' + rand() % 26; } } } // Print the final word search puzzle printGrid(grid); } int main() { // List of words to place in the word search vector words = {"HELLO", "WORLD", "PUZZLE", "CODE", "GAME"}; cout << "Welcome to the Word Search Puzzle Generator!" << endl; generatePuzzle(words); return 0; }
Explanation of the Program Structure
The program starts by defining a 10×10 grid, where words will be placed randomly. The words are given in a list, and the program attempts to place each word in the grid in various possible directions (horizontally, vertically, or diagonally).
The main function initiates the puzzle generation. It first creates an empty grid, and then iteratively tries to place each word by checking if it fits at a random starting position in one of the eight directions. If a word fits, it’s placed in the grid, and once all words are placed, the remaining empty spaces are filled with random letters.
The key functions in the program are:
- printGrid: Displays the grid of letters after all words have been placed.
- canPlaceWord: Checks if a word can fit at a given position and direction.
- placeWord: Places a word at a specific position in the grid.
- generatePuzzle: Handles the overall logic of generating the word search puzzle, including word placement and filling empty spaces.
How to Run the Program
To run this program, follow these steps:
- Ensure that you have a C++ compiler installed on your system (such as GCC or MinGW).
- Create a new C++ file and paste the above code into it (for example,
word_search.cpp
). - Open a terminal or command prompt and navigate to the folder where your C++ file is located.
- Compile the program using the following command:
g++ word_search.cpp -o word_search
- Run the compiled program:
./word_search
- The word search puzzle will be displayed in the terminal.