34 A Place for Everything

学习用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');
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值