简体   繁体   中英

Trouble with C# hangman game

Ok, so I am having some trouble with my hangman game. I have basically the entire thing done and it runs, but for some reason the body of the actual man doesn't show up when you guess a letter incorrectly. I thought I had the code down correctly, but I guess not, does anyone know what I am missing here?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication6
{
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random((int)DateTime.Now.Ticks);

        string[] wordBank = { "Blue", "Black", "Yellow", "Orange", "Green", "Purple" };

        string wordToGuess = wordBank[random.Next(0, wordBank.Length)];
        string wordToGuessUppercase = wordToGuess.ToUpper();

        StringBuilder displayToPlayer = new StringBuilder(wordToGuess.Length);
        for (int i = 0; i < wordToGuess.Length; i++)
            displayToPlayer.Append('_');

        List<char> correctGuesses = new List<char>();
        List<char> incorrectGuesses = new List<char>();

        int lives = 5;
        bool won = false;
        int lettersRevealed = 0;

        string input;
        char guess;

        while (!won && lives > 0)
        {
            Console.Write("Guess a letter: ");

            input = Console.ReadLine().ToUpper();
            guess = input[0];

            if (correctGuesses.Contains(guess))
            {
                Console.WriteLine("You've already tried '{0}', and it was correct!", guess);
                continue;
            }
            else if (incorrectGuesses.Contains(guess))
            {
                Console.WriteLine("You've already tried '{0}', and it was wrong!", guess);
                continue;
            }

            if (wordToGuessUppercase.Contains(guess))
            {
                correctGuesses.Add(guess);

                for (int i = 0; i < wordToGuess.Length; i++)
                {
                    if (wordToGuessUppercase[i] == guess)
                    {
                        displayToPlayer[i] = wordToGuess[i];
                        lettersRevealed++;
                    }
                }

                if (lettersRevealed == wordToGuess.Length)
                    won = true;
            }
            else
            {
                incorrectGuesses.Add(guess);

                Console.WriteLine("Nope, there's no '{0}' in it!", guess);
                lives--;
            }

            Console.WriteLine(displayToPlayer.ToString());
        }

        if (won)
            Console.WriteLine("You won!");
        else
            Console.WriteLine("You lost! It was '{0}'", wordToGuess);

        Console.Write("Press ENTER to exit...");
        Console.ReadLine();
    }
    private void drawbody()
    {
        incorrectGuesses = new List<char>();
        foreach (char item in incorrectGuesses)          
            {
                incorrectGuesses.Add(item);
            }


        Console.WriteLine();
        if (incorrectGuesses.Count == 1)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses.Count == 2)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses.Count == 3)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses.Count == 4)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");

        }
        else if (incorrectGuesses.Count == 5)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses.Count == 6)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |    /");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses.Count == 7)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |    / \\");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else
            Console.WriteLine();
        Console.WriteLine();
    }
}

}

You are not calling drawbody() method anywhere in your Main method. Also your not passing your var incorrectGuesses to the drawbody method. It would also be better to just pass the count to this method instead of recreating the list each time you draw.

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Hangman
{
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random((int)DateTime.Now.Ticks);

        string[] wordBank = { "Blue", "Black", "Yellow", "Orange", "Green", "Purple" };

        string wordToGuess = wordBank[random.Next(0, wordBank.Length)];
        string wordToGuessUppercase = wordToGuess.ToUpper();

        StringBuilder displayToPlayer = new StringBuilder(wordToGuess.Length);
        for (int i = 0; i < wordToGuess.Length; i++)
            displayToPlayer.Append('_');

        List<char> correctGuesses = new List<char>();
        List<char> incorrectGuesses = new List<char>();

        int lives = 5;
        bool won = false;
        int lettersRevealed = 0;

        string input;
        char guess;

        while (!won && lives > 0)
        {
            Console.Write("Guess a letter: ");

            input = Console.ReadLine().ToUpper();
            guess = input[0];

            if (correctGuesses.Contains(guess))
            {
                Console.WriteLine("You've already tried '{0}', and it was correct!", guess);
                continue;
            }
            else if (incorrectGuesses.Contains(guess))
            {
                Console.WriteLine("You've already tried '{0}', and it was wrong!", guess);
                continue;
            }

            if (wordToGuessUppercase.Contains(guess))
            {
                correctGuesses.Add(guess);

                for (int i = 0; i < wordToGuess.Length; i++)
                {
                    if (wordToGuessUppercase[i] == guess)
                    {
                        displayToPlayer[i] = wordToGuess[i];
                        lettersRevealed++;
                    }
                }

                if (lettersRevealed == wordToGuess.Length)
                    won = true;
            }
            else
            {
                incorrectGuesses.Add(guess);

                Console.WriteLine("Nope, there's no '{0}' in it!", guess);
                lives--;
                drawbody(incorrectGuesses.Count);
            }

            Console.WriteLine(displayToPlayer.ToString());
        }

        if (won)
            Console.WriteLine("You won!");
        else
            Console.WriteLine("You lost! It was '{0}'", wordToGuess);

        Console.Write("Press ENTER to exit...");
        Console.ReadLine();
    }

    private static void drawbody(int incorrectGuesses)
    {
        Console.WriteLine();
        if (incorrectGuesses == 1)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses == 2)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses == 3)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses == 4)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");

        }
        else if (incorrectGuesses == 5)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses == 6)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |    /");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else if (incorrectGuesses == 7)
        {
            Console.WriteLine("   _____");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |     O");
            Console.WriteLine("  |    \\|/");
            Console.WriteLine("  |     |");
            Console.WriteLine("  |    / \\");
            Console.WriteLine("  |");
            Console.WriteLine("__|__");
        }
        else
            Console.WriteLine();
        Console.WriteLine();
    }
}

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM