I got a little wild and added levels and lives into the mix, which complicated things a bit. Not sure my conditions nested inside of nested conditions situation is really goals, but it does technically work. I made a function called LevelClue() because I envision the prompt to guess changing with the HiddenWord as we progress to the end level eventually.
If at max level (5), game over prints a winning message.
If at 0 lives, game over prints a losing message with the correct answer.
Pressing Enter at game over clears the screen, resets the game, and prints the welcome message again.
// Fill out your copyright notice in the Description page of Project Settings.
#include "BullCowCartridge.h"
void UBullCowCartridge::BeginPlay() // When the game starts
{
Super::BeginPlay();
SetUpGame();
PrintLine(TEXT("The Hidden Word is: %s"), *HiddenWord); // Debug Line
}
void UBullCowCartridge::OnInput(const FString& Input) // When the player hits enter
{
ClearScreen();
if (bGameOver)
{
ClearScreen();
SetUpGame();
}
else // Checking player input
{
if (Input == HiddenWord && Level < 5)
{
PrintLine(TEXT("Yup!"));
++Level;
Lives = HiddenWord.Len();
LevelClue();
}
else if (Input == HiddenWord && Level >= 5)
{
EndGame();
}
else if (Input == "Yup" && Level == 0)
{
ClearScreen();
++Level;
bGameOver = false;
LevelClue();
}
else if (Input == "Nope")
{
PrintLine(TEXT("How to play:\n Guess the correct isogram to win.\n"
" An isogram is a word in which the\n"
" letters occur an equal number\n"
" of times.\n"
" To play, simply type your guess\n"
" and press ENTER.\n\n"
" Ready to play?\n"
" Type \"Yup\" to begin."));
}
else
{
PrintLine(TEXT("Nope."));
--Lives;
if (Lives <= 0)
{
bGameOver = true;
}
if (Input.Len() == HiddenWord.Len())
{
PrintLine(TEXT("Correct Word Length.\n"));
}
else
{
PrintLine(TEXT("Incorrect word Length.\n"));
}
LevelClue();
}
// check if Input is isogram
// if not isogram inform player of error
}
}
void UBullCowCartridge::SetUpGame()
{
PrintLine(TEXT("Yowdy Baws!\nYou ever played this here Bull Cows game?"));
PrintLine(TEXT("\nLeft Click mouse\nPress TAB\nType \"Yup\" or \"Nope\"\nPress ENTER"));
HiddenWord = TEXT("Plastic");
Lives = HiddenWord.Len();
Level = 0;
}
void UBullCowCartridge::LevelClue()
{
if (bGameOver == false)
{
PrintLine(TEXT("\nLEVEL: %i"), Level);
PrintLine(TEXT("Let's play!\nCLUE: %i letter word."), HiddenWord.Len());
PrintLine(TEXT("LIVES: %i"), Lives);
}
else
{
EndGame();
}
}
void UBullCowCartridge::EndGame()
{
bGameOver = true;
ClearScreen();
if (Lives == 0)
{
PrintLine(TEXT("Yuh lose.\nThe word was: %s\n\nLasso up the ENTER\nkey to play again."), *HiddenWord);
}
else if (Level >= 5)
{
PrintLine(TEXT("WINNER!\n\nLasso up the ENTER key\n to play again."));
}
else
{
SetUpGame();
}
}