algorithminterface.cpp

来自「巫魔问题求解」· C++ 代码 · 共 128 行

CPP
128
字号
#include "AlgorithmInterface.h"
#include "WorldModel.h"
#include "Explorer.h"
#include "GameEngine.h"
#include "ServerMap.h"

using namespace _server;
using namespace _base;

//////////////////////////////////////
AlgorithmInterface::AlgorithmInterface(GameEngine &ge)
: m_rGameEngine(ge)
{
    this->mpClientToServer = new ClientToServer();
    this->mpServerToClient = new ServerToClient();
    this->mpClientToServer->mpAlgorithmInterface = this;
}

//////////////////////////////////////
AlgorithmInterface::AlgorithmInterface(const _server::AlgorithmInterface &from)
: m_rGameEngine(from.m_rGameEngine)
{
}

//////////////////////////////////////
AlgorithmInterface::~AlgorithmInterface(void)
{
    delete this->mpClientToServer;
    delete this->mpServerToClient;
}

//////////////////////////////////////
void AlgorithmInterface::Update(void)
{

    ServerToClient & servertoclient = TheServerToClient();
    GameEngine & gameengine = m_rGameEngine;
    WorldModel & worldmodel = gameengine.TheWorldModel();
    ServerMap & servermap = worldmodel.TheServerMap();
    Explorer & explorer = worldmodel.TheExplorer();
    Cell & cell = servermap.TheCell(explorer.GetX(), explorer.GetY());

    servertoclient.Reset();

    servertoclient.mDirection = explorer.GetDirection();
    servertoclient.mIsBreeze = ((cell.GetType() & Cell::CT_Breeze) != 0);
    servertoclient.mIsBump = worldmodel.IsBump();
    servertoclient.mIsGleam = ((cell.GetType() & Cell::CT_Gleam) != 0);
    servertoclient.mIsHowl = worldmodel.IsHawl();
    servertoclient.mIsStench = ((cell.GetType() & Cell::CT_Stench) != 0);
    servertoclient.mPositionX = explorer.GetX();
    servertoclient.mPositionY = explorer.GetY();
    servertoclient.mShootsLeft = explorer.GetShootsLeft();
    servertoclient.mIsReset = worldmodel.IsNewlyCreated();

}

//////////////////////////////////////
GameEngine & AlgorithmInterface::TheGameEngine(void)
{
    return m_rGameEngine;
}

//////////////////////////////////////
AlgorithmInterface::ServerToClient &AlgorithmInterface::TheServerToClient(void)
{
    return *mpServerToClient;
}

//////////////////////////////////////
AlgorithmInterface::ClientToServer &AlgorithmInterface::TheClientToServer(void)
{
    return *mpClientToServer;
}

//////////////////////////////////////
AlgorithmInterface::ServerToClient::ServerToClient(void)
{
    memset(this, 0, sizeof(*this));
}

//////////////////////////////////////
void AlgorithmInterface::ServerToClient::Reset(void)
{
    memset(this, 0, sizeof(*this));
}

//////////////////////////////////////
AlgorithmInterface::ClientToServer::ClientToServer(void)
{
    memset(this, 0, sizeof(*this));
}

//////////////////////////////////////
bool AlgorithmInterface::ClientToServer::Escape(void)
{
    this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel()._su_IsNewlyCreated() = false;
    return this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel().TheExplorer().Escape();
}

//////////////////////////////////////
bool AlgorithmInterface::ClientToServer::Shoot(void)
{
    this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel()._su_IsNewlyCreated() = false;
    return this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel().TheExplorer().Shoot();
}

//////////////////////////////////////
bool AlgorithmInterface::ClientToServer::TurnLeft(void)
{
    this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel()._su_IsNewlyCreated() = false;
    return this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel().TheExplorer().TurnLeft();
}

//////////////////////////////////////
bool AlgorithmInterface::ClientToServer::TurnRight(void)
{
    this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel()._su_IsNewlyCreated() = false;
    return this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel().TheExplorer().TurnRight();
}

//////////////////////////////////////
bool AlgorithmInterface::ClientToServer::GoAhead(void)
{
    this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel()._su_IsNewlyCreated() = false;
	return this->mpAlgorithmInterface->m_rGameEngine.TheWorldModel().TheExplorer().GoAhead();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?