学习用C++开发你的第一个游戏(英文)
// FBullCowGame.h
#pragma once
# include <string>
using FString = std::string;
using int32 = int;
// all values intialised to zero
struct FBullCowCount
{
int32 Bulls = 0;
int32 Cows = 0;
};
enum class EWordStatus
{
OK,
Not_Isogram,
Wrong_Lenght,
Not_Lowercase
};
class FBullCowGame {
public:
FBullCowGame(); // constructor
int32 GetMaxTries() const;
int32 GetCurrentTry() const;
int32 GethiddenWordLenght() const;
bool IsGameWon() const;
EWordStatus CheckGuessValidity(FString) const;
void Reset(); //ToDo make a more rich return value.
FBullCowCount SubmitGuess(FString);
// Please try and ignore this and focus on the interface above
private:
// see constructor for initialisation
int MyCurrentTry;
int32 MyMaxTries;
FString MyHiddenWord;
};
// FBullCowGame.cpp
#include "FBullCowGame.h"
using int32 = int;
void FBullCowGame::Reset()
{
constexpr int32 MAX_TRIES = 8;
const FString HIIDEN_WORD = "donkey";
MyCurrentTry = 1;
MyMaxTries = MAX_TRIES;
MyHiddenWord = HIIDEN_WORD;
return;
}
// receives a VALID guess, incriments turn, and returns count
FBullCowCount FBullCowGame::SubmitGuess(FString Guess)
{
// incriment the turn number
MyCurrentTry++;
// setup a return variable
FBullCowCount BullCowCount;
// loop through all letters in the guess
int32 HiddenWordLength = MyHiddenWord.length();
for (int32 MHWChar = 0; MHWChar < HiddenWordLength; MHWChar++)
{
// compare letter aginst the hidden word
for (int32 GChar = 0; GChar < HiddenWordLength; GChar++)
{
// if they match then
if(Guess[GChar] == MyHiddenWord[MHWChar])
{
//if they're in the same place
if (MHWChar == GChar)
{
BullCowCount.Bulls++;// incriment bulls
}
else
{
BullCowCount.Cows++; // must be a cow
}
}
}
}
return BullCowCount;
}
FBullCowGame::FBullCowGame()
{
Reset();
}
int32 FBullCowGame::GetMaxTries() const
{
return MyMaxTries;
}
int32 FBullCowGame::GetCurrentTry() const
{
return MyCurrentTry;
}
int32 FBullCowGame::GethiddenWordLenght() const
{
return MyHiddenWord.length();
}
bool FBullCowGame::IsGameWon() const
{
return false;
}
EWordStatus FBullCowGame::CheckGuessValidity(std::string) const
{
return EWordStatus::OK; //TODO make actual error
}