using System;
using System.Net;
namespace GuessTheWord
{
class MainClass
{
public static void Main (string[] args)
{
//Welcome Message
//Ask how many guesses the player wants
//amount of guesses == player input
//Loading Message
Console.WriteLine ("Hey, and welcome to this Hangman!");
System.Threading.Thread.Sleep(2000);
Console.Write ("How many guesses do you want? (10 recommended) ");
int amountOfGuesses = Convert.ToInt16 (Console.ReadLine ());
Console.WriteLine ("Please Wait...");
//Start class Game with x amount of guesses
Game guessingGame = new Game (amountOfGuesses);
guessingGame.Initialization ();
}
}
class Game
{
public Game (int guesses)
{
this.guesses = guesses;
}
public int guesses {get; set;}
//Declare Strings
public string wordToGuess;
public string guessedWord;
public string playerGuess;
public string alreadyGuessedLetters;
public string playAgainOrNot;
//Declare Integers
public int numberOfLetters;
public int howManyGuessesDoYouWant;
//Declare Booleans
public bool itIsThere;
public bool letterUsed;
public bool playAgain;
public void Initialization ()
{
//Get the word to guess from the GetWord function
wordToGuess = GetWord ();
//Put each letter of the word to uppercases
//Get the lenght of the word
wordToGuess = wordToGuess.ToUpper ();
numberOfLetters = wordToGuess.Length;
//What you have guessed so far == "_" * the number of letters you have
//Start IsThereXLetter using the first letter of the word to guess
//=> check the positions of this letter and replace what's already there with the letter
//In this list of letters, add the first letter of the word to guess
guessedWord = new string ('_', numberOfLetters);
IsThereXLetter (wordToGuess [0]);
alreadyGuessedLetters = alreadyGuessedLetters + wordToGuess [0];
//Clear the console, remove all text
//Write what the player has already guessed => the first letter + "_" for each other letter in the word
Console.Clear ();
Console.WriteLine ("Guess Me: " + guessedWord);
//Start the Update function
Update ();
}
public void Update ()
{
//As Long as this is true...
while (true)
{
//If you don't have any more guesses...
if (guesses == 0)
{
//Write the word you had to guess
//Wait then clear the console
Console.WriteLine ("You Lost!");
Console.WriteLine ("The word was: " + wordToGuess);
System.Threading.Thread.Sleep(4000);
Console.Clear ();
//Start the DoYouWantToPlayAgain function...
DoYouWantToPlayAgain ();
if (playAgain == true)
{
//If you do want to play again...
//Write-Ask how many guesses the player wants
//amount of guesses == player input
//Loading Message
Console.Write ("How many guesses do you want? (10 recommended) ");
howManyGuessesDoYouWant = Convert.ToInt16 (Console.ReadLine ());
Console.WriteLine ("Please Wait...");
//Start class Game with x amount of guesses
Game guessingGame = new Game (howManyGuessesDoYouWant);
guessingGame.Initialization ();
}
else
{
//If you don't want to play again...
//Exit the console
Environment.Exit (1);
}
}
//If what you have guessed so far still contains "_" => Letters are still missing...
if (guessedWord.Contains ("_"))
{
//Write-Ask to guess a letter
//Put the letter to uppercase
Console.Write ("Guess a Letter: ");
playerGuess = Console.ReadLine ().ToUpper ();
//If the player input is only 1 letter long...
if (playerGuess.Length == 1)
{
//Start IsThereXLetter using the letter the player inputed
//=> check the positions of this letter and replace what's already there with the letter
IsThereXLetter (playerGuess [0]);
LetterAlreadyUsed ();
//If the letter the player inputed is correct, and this letter has not already been used...
if (itIsThere == true && letterUsed == false)
{
//Write that the player is correct
//Add the letter the player inputed to the list of letters which have already been guessed
//Wait then clear the console
Console.WriteLine ("Correct!\n");
alreadyGuessedLetters = alreadyGuessedLetters + playerGuess [0];
System.Threading.Thread.Sleep (1500);
Console.Clear ();
}
//Else if the letter has already been used...
else if (letterUsed == true)
{
//Write that the player has already used that letter
//Wait then clear the console
Console.WriteLine ("You've already guessed that letter. Try Again!\n");
System.Threading.Thread.Sleep (1500);
Console.Clear ();
}
//If none of the above are true
// => If the letter is not there and has not already been used
else
{
//Write that the player is wrong, and that he has x amount of guesses left
//Add the letter the player inputed to the list of letters which have already been guessed
//Wait then clear the console
//Remove 1 from the amount of guesses
Console.WriteLine ("Wrong! You have " + (guesses - 1) + " guesses left.\n");
alreadyGuessedLetters = alreadyGuessedLetters + playerGuess [0];
System.Threading.Thread.Sleep(1500);
Console.Clear ();
guesses--;
}
}
//If the player input does not contain only 1 letter...
else
{
//Write that you only accept 1 letter
//Wait then clear the console
Console.WriteLine ("Only 1 letter please.\n");
System.Threading.Thread.Sleep(1500);
Console.Clear ();
}
//Write what the player has already guessed => the guessed letters + "_" for each other letter not found in the word
Console.WriteLine ("Guess Me: " + guessedWord);
}
//If what you have guessed so far does not contain any "_" => You have found all the letters...
else
{
//Write that the player has won
//Wait the clear the console
Console.WriteLine ("Congratulations, You've Won!" /*+ "\nThe word was: " + wordToGuess*/ + "\nYou had " + (guesses-1) + " guesses left");
System.Threading.Thread.Sleep(4000);
Console.Clear ();
//Start the DoYouWantToPlayAgain function...
DoYouWantToPlayAgain ();
if (playAgain == true)
{
//If you do want to play again...
//Write-Ask how many guesses the player wants
//amount of guesses == player input
//Loading Message
Console.Write ("How many guesses do you want? (10 recommended) ");
howManyGuessesDoYouWant = Convert.ToInt16 (Console.ReadLine ());
Console.WriteLine ("Please Wait...");
//Start class Game with x amount of guesses
Game guessingGame = new Game (howManyGuessesDoYouWant);
guessingGame.Initialization ();
}
else
{
//If you don't want to play again...
//Exit the console
Environment.Exit (1);
}
}
}
}
//IsThereXLetter Function
//Check if the the letter inputed (chatGettingGuessed) is in the word
//If it is, change it with where it should be
public void IsThereXLetter (char charGettingGuessed)
{
//Set the Positions to 0 by default
int wordToGuessStartPos = 0;
int wordToGuessCharPos = 0;
//By default, the word does not contain the letter guessed, it is not there
itIsThere = false;
//As long as the Start position is lower than the number of letters contained in the word
//AND the position of the guessed letter is bigger than -1
//(if it's -1, it means that it's not in the word, it does not have a position)
while ((wordToGuessStartPos < numberOfLetters) && (wordToGuessCharPos > -1))
{
wordToGuessCharPos = wordToGuess.IndexOf (charGettingGuessed, wordToGuessStartPos);
if (wordToGuessCharPos == -1)
{
//If the guessed letter is not found
//Break out of the while loop = set it to false
break;
}
//Set the Start Position to be, its current positon + 1
//Change the player input/letter with its position in the word, without touching the other letters
wordToGuessStartPos = wordToGuessCharPos+1;
guessedWord = guessedWord.Substring (0, wordToGuessCharPos) + charGettingGuessed + guessedWord.Substring (wordToGuessCharPos + 1);
//Set that the word contain the letter guessed
itIsThere = true;
}
}
//LetterAlreadyUsed Function
//Check if the letter assigned has already been used
public void LetterAlreadyUsed ()
{
//If the the list of already guessed letters can't find the letter the player inputed
//Then set that the letter has not been used
//Else set that it has been used
if (alreadyGuessedLetters.IndexOf (playerGuess [0]) == -1)
{
letterUsed = false;
}
else
{
letterUsed = true;
}
}
//DoYouWantToPlayAgain Function
//Ask if the player wants to play again, or not
public void DoYouWantToPlayAgain ()
{
//As long as this is true...
while (true)
{
//Write-Ask if the player wants to play again
//Get the player input, put it in uppercase letters only
Console.Write ("Do you want to play again? ");
playAgainOrNot = Console.ReadLine ().ToUpper ();
//If the player wants to play again...
if (playAgainOrNot == "YES")
{
//Set that the player wants to play again
//Wait then clear the console
//Break out of the while loop = set it false
Console.WriteLine ("Awesome!");
playAgain = true;
System.Threading.Thread.Sleep (2000);
Console.Clear ();
break;
}
//Else if the player does not want to play again...
else if (playAgainOrNot == "NO")
{
//Set that the player does not want to play again
//Wait then clear the console
//Break out of the while loop = set it false
Console.WriteLine ("BYE!");
playAgain = false;
System.Threading.Thread.Sleep (2000);
Console.Clear ();
break;
}
//If none of the above is true...
//=> If the player input is not "yes" or "no"...
else
{
//Write-Ask the player to try again
//Wait then clear the console
//Go back to the beginning of the while loop
Console.WriteLine ("Please try again...");
System.Threading.Thread.Sleep (2000);
Console.Clear ();
}
}
}
//Get random word from a word list
public static string GetWord ()
{
WebClient wc = new WebClient ();
string wordList = wc.DownloadString ("https://raw.githubusercontent.com/Tom25/Hangman/master/wordlist.txt");
string[] words = wordList.Split ('\n');
Random randomWordGen = new Random ();
return words [randomWordGen.Next (0, words.Length - 1)];
}
}
}
Comments
0 B
|👍
/👎