Click here to Skip to main content
Licence CPOL
First Posted 27 Feb 2010
Views 24,311
Downloads 2,432
Bookmarked 14 times

Hangman Game

By | 2 Mar 2010 | Article
A Hangman game as a console application
Hangman_Game_VS2005

Introduction

Hangman is a popular word guessing game where the player attempts to build a missing word by guessing one letter at a time. After a certain number of incorrect guesses, the game ends and the player loses. The game also ends if the player correctly identifies all the letters of the missing word.

Using the Code

The program consists of several classes. The class diagram is shown below:

Hangman_Class_Diagram.jpg

The main thing from the program is holding the guessed letters in an array collection and manipulating against the randomly picked word. In addition, you need to count the missing letters. Let's see the code that verifies the user's guessed letter and builds the word.

/// <summary>
/// Process the user guessed letter against the random picked word
/// </summary>
public void Play()
{
    guessed_FoundLetters = new List<string>();
 
    for (int i = 0; i < PickedWord.WordLength; i++)
    // Add underscore to the guessed and found string collection
    {
        guessed_FoundLetters.Add(" _ ");
    }
 
    for (int i = 0; i < PickedWord.WordLength; i++)
    {
        string letter = PickedWord.Content.Substring(i, 1);
        if (GuessedLetters.Count > 0)
        {
            foreach (string guessedLetter in this.GuessedLetters)
            {
                if (letter.Equals(guessedLetter.Trim().ToUpper()))
                // If the guessed letter is found from the picked
                // word then replace underscore with the letter
                {
                    guessed_FoundLetters.RemoveAt(i);
                    guessed_FoundLetters.Insert(i, " " + letter + " ");
                }
            }
        }
    }
    drawHangMan();
    Console.WriteLine(buildString(guessed_FoundLetters, false));
    Console.WriteLine();
}

The enumeration class is an indicator whether a user is winning or losing the game.

/// <summary>
/// Game result enumeration
/// </summary>
public enum GAMERESULT
{
    WIN,// Game is finished and player won the game
    LOSE,// Game is finished and player lose the game
    CONTINUE,// Continue play
}

The program class is the one which takes all the actions from the user and runs the game. The method that actually plays the game is shown below:

/// <summary>
/// Play game
/// </summary>
private static void playGame()
{
    Words words = new Words();
    Word pickedWord = words.Pick;           
    PlayHangman playHangman = new PlayHangman();
    playHangman.PickedWord = pickedWord;
    for (int i = 0; i < pickedWord.WordLength; i++)
    {
        Console.Write(" _ ");
    }
    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine();
    while (playHangman.Result() == GAMERESULT.CONTINUE)
    {
        Console.Write("Pick a letter --> ");
        ConsoleKeyInfo guessedLetter = Console.ReadKey();
        if (playHangman.AddGuessedLetters(guessedLetter.KeyChar))
            playHangman.Play();
    }
    if (playHangman.Result() == GAMERESULT.LOSE)
    {
        Console.WriteLine("So sorry. You struck out.");
        makeTextBlink("The mystery word was '" + 
                      pickedWord.Content.ToUpper() + "'",500);
        return;
    }
    else
    {
        makeTextBlink("You won !",500);
        return;
    }
}

Points of Interest

In this program, I learnt how to solve word guessing problems. I hope you enjoyed the Hangman game and the implementation.

History

  • February 27, 2010: First version
  • March 1, 2010: Article updated

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Wonde Tadesse

Software Developer (Senior)

United States United States

Member

MSCS,MCTS

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 5 PinmemberReza Ahmadi4:19 15 Apr '12  
GeneralMy vote of 5 PinmemberJαved3:57 16 Feb '12  
GeneralRe: My vote of 5 PinmemberWonde Tadesse11:42 14 Apr '12  
Questiongobez Pinmemberabysinia23:07 9 Nov '11  
GeneralRe: gobez PinmemberWonde Tadesse2:44 10 Nov '11  
GeneralMy vote of 5 Pinmemberabysinia23:06 9 Nov '11  
GeneralExcellent Work!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Pinmemberyunegu mahesh reddy22:23 9 Mar '10  
GeneralRe: Excellent Work!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! PinmemberYewondwossen C.Tadesse (Wonde)6:02 10 Mar '10  
GeneralBravo ! PinmemberKanou924:55 4 Mar '10  
GeneralRe: Bravo ! PinmemberYewondwossen C.Tadesse (Wonde)5:03 4 Mar '10  
GeneralNice! PinmemberNishad S13:40 1 Mar '10  
GeneralRe: Nice! PinmemberYewondwossen C.Tadesse (Wonde)15:44 1 Mar '10  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web03 | 2.5.120517.1 | Last Updated 2 Mar 2010
Article Copyright 2010 by Wonde Tadesse
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid