34 A Place for Everything
程序员文章站
2022-06-11 12:09:44
...
学习用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;
};
class FBullCowGame {
public:
FBullCowGame(); // constructor
int32 GetMaxTries() const;
int32 GetCurrentTry() const;
int32 GethiddenWordLenght() const;
bool IsGameWon() const;
bool CheckGuessValidity(FString) const; // ToDo make a more rich return value.
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;
}
bool FBullCowGame::CheckGuessValidity(std::string) const
{
return false;
}
// Main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
This is the console executable, that makes use of the BullCow class
This acts as the view in a MVC pattern, and is responsible for all
user interaction. For game logic see the FBullCow class.
*/
# include <iostream>
# include <string> // 引入string 库
# include "FBullCowGame.h"
using FText = std::string;
using int32 = int;
void PrintIntro();
void PlayGame();
FText GetGuess();
bool AskToPlayAgain();
FBullCowGame BCGame; // instantiate a new game
// 程序的入口
int main()
{
bool bPlayAgain = false;
do
{
PrintIntro();
PlayGame();
bPlayAgain = AskToPlayAgain();
} while (bPlayAgain);
return 0;
}
void PlayGame()
{
BCGame.Reset();
int32 MaxTries = BCGame.GetMaxTries();
// 可猜测的循环次数
// Todo change from For to While loop once we are validating tries
for (int32 cout = 1; cout <= MaxTries; ++cout)
{
FText Guess = GetGuess(); // ToDo make loop checking valid
// Submit valid guess to the game
FBullCowCount BullCowCount = BCGame.SubmitGuess(Guess);
// Print numbe of bulls and cows
std::cout << "Bulls = " << BullCowCount.Bulls;
std::cout << ".Cows = " << BullCowCount.Cows << std::endl;
std::cout << std::endl;
}
// ToDo summary game
}
// 介绍游戏
void PrintIntro()
{
//constexpr int WORLD_LENGTH = 9; // 定义一个变量让单词的长度可变
std::cout << "Welocm to Bulls and Cows, a fun word game." << std::endl;
std::cout << "Can you guess the " << BCGame.GethiddenWordLenght();
std::cout << " letter isogram I'm thinking of?\n";
std::cout << std::endl;
return;
}
// 让玩家猜一个
FText GetGuess()
{
int32 CurrentTry = BCGame.GetCurrentTry();
std::cout << "Try" << CurrentTry << ".输入你猜测的结果: ";
FText Guess = "";
std::getline(std::cin, Guess);
return Guess;
}
bool AskToPlayAgain()
{
std::cout << "你想再玩一次吗?(Y/N)";
FText Response = "";
std::getline(std::cin, Response);
return (Response[0] == 'y')|| (Response[0] == 'Y');
}
上一篇: UVM Tutorial for Candy Lovers – 32. Using randc
下一篇: CodeForces - 752ASanta Claus and a Place in a Class 老人选座位(细节)
推荐阅读
-
苹果A14X仿生处理器曝光:浮点性能比A12Z快34%、尚未量产
-
C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少
-
javascript事件的绑定基础实例讲解(34)
-
从零开始学_JavaScript_系列(34)——将canvas获取的图片下载到本地
-
wpf 单例模式和异常处理 (原发布 csdn 2017-04-12 20:34:12)
-
微星为*创作者们带来了34英寸带鱼屏5K显示器
-
144Hz 2K带鱼屏!小米曲面显示器34英寸降至2199元
-
小米显示器首次进军欧洲 34寸曲面屏售价4000块
-
小米34英寸曲面显示器发布:21比9 2K屏、144Hz
-
华为显示器产品线曝光:多达5款、34寸曲面在列