I’ve formatted the string as part of the challenge and also added a bool for a debugging mode.
Header file:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Console/Cartridge.h"
#include "BullCowCartridge.generated.h"
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class BULLCOWGAME_API UBullCowCartridge : public UCartridge
{
GENERATED_BODY()
public:
virtual void BeginPlay() override;
virtual void OnInput(const FString& Input) override;
private:
void DisplayDebugging();
void DisplayStats();
void InitGame();
void ProcessInput(const FString& Input);
void Welcome();
// Your declarations go below!
private:
bool DebugMode;
FString HiddenWord;
int32 Lives;
};
CPP file:
// Fill out your copyright notice in the Description page of Project Settings.
#include "BullCowCartridge.h"
void UBullCowCartridge::BeginPlay() // When the game starts
{
Super::BeginPlay();
InitGame();
if (DebugMode) { DisplayDebugging(); }
DisplayStats();
Welcome();
}
void UBullCowCartridge::DisplayDebugging()
{
PrintLine(TEXT("Hidden word: %s"), *HiddenWord);
}
void UBullCowCartridge::DisplayStats()
{
PrintLine(TEXT("Lives: %i"), Lives);
PrintLine(TEXT("Hidden word length: %i"), HiddenWord.Len());
}
void UBullCowCartridge::InitGame()
{
DebugMode = true;
HiddenWord = TEXT("keyboard");
Lives = HiddenWord.Len();
}
void UBullCowCartridge::OnInput(const FString& Input) // When the player hits enter
{
ClearScreen();
if (DebugMode) { DisplayDebugging(); }
DisplayStats();
ProcessInput(Input);
}
void UBullCowCartridge::ProcessInput(const FString& Input)
{
if (Input == HiddenWord)
{
PrintLine(TEXT("Congratulations you found the\nhidden word!"));
}
else
{
if (Input.Len() != HiddenWord.Len())
{
PrintLine(TEXT("That's not the same length as the hidden word."));
}
PrintLine(TEXT("That's not the hidden word, guess again."));
}
}
void UBullCowCartridge::Welcome()
{
PrintLine(TEXT("Welcome to Bulls & Cows"));
PrintLine(TEXT("Enter input and press enter"));
}