minerswifeownedstates.cpp
来自「这是刚才的一个系列 继续发 希望能帮到更多的编程爱好者」· C++ 代码 · 共 224 行
CPP
224 行
#include "MinersWifeOwnedStates.h"
#include "MinerOwnedStates.h"
#include "MinersWife.h"
#include "Locations.h"
#include "Time/CrudeTimer.h"
#include "MessageDispatcher.h"
#include "MessageTypes.h"
#include "EntityNames.h"
#include <iostream>
using std::cout;
#ifdef TEXTOUTPUT
#include <fstream>
extern std::ofstream os;
#define cout os
#endif
//-----------------------------------------------------------------------Global state
WifesGlobalState* WifesGlobalState::Instance()
{
static WifesGlobalState instance;
return &instance;
}
void WifesGlobalState::Execute(MinersWife* wife)
{
//1 in 10 chance of needing the bathroom (provided she is not already
//in the bathroom)
if ( (RandFloat() < 0.1) &&
!wife->GetFSM()->isInState(*VisitBathroom::Instance()) )
{
wife->GetFSM()->ChangeState(VisitBathroom::Instance());
}
}
bool WifesGlobalState::OnMessage(MinersWife* wife, const Telegram& msg)
{
SetTextColor(BACKGROUND_RED|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
switch(msg.Msg)
{
case Msg_HiHoneyImHome:
{
cout << "\nMessage handled by " << GetNameOfEntity(wife->ID()) << " at time: "
<< Clock->GetCurrentTime();
SetTextColor(FOREGROUND_GREEN|FOREGROUND_INTENSITY);
cout << "\n" << GetNameOfEntity(wife->ID()) <<
": Hi honey. Let me make you some of mah fine country stew";
wife->GetFSM()->ChangeState(CookStew::Instance());
}
return true;
}//end switch
return false;
}
//-------------------------------------------------------------------------DoHouseWork
DoHouseWork* DoHouseWork::Instance()
{
static DoHouseWork instance;
return &instance;
}
void DoHouseWork::Enter(MinersWife* wife)
{
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Time to do some more housework!";
}
void DoHouseWork::Execute(MinersWife* wife)
{
switch(RandInt(0,2))
{
case 0:
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Moppin' the floor";
break;
case 1:
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Washin' the dishes";
break;
case 2:
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Makin' the bed";
break;
}
}
void DoHouseWork::Exit(MinersWife* wife)
{
}
bool DoHouseWork::OnMessage(MinersWife* wife, const Telegram& msg)
{
return false;
}
//------------------------------------------------------------------------VisitBathroom
VisitBathroom* VisitBathroom::Instance()
{
static VisitBathroom instance;
return &instance;
}
void VisitBathroom::Enter(MinersWife* wife)
{
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Walkin' to the can. Need to powda mah pretty li'lle nose";
}
void VisitBathroom::Execute(MinersWife* wife)
{
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Ahhhhhh! Sweet relief!";
wife->GetFSM()->RevertToPreviousState();
}
void VisitBathroom::Exit(MinersWife* wife)
{
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Leavin' the Jon";
}
bool VisitBathroom::OnMessage(MinersWife* wife, const Telegram& msg)
{
return false;
}
//------------------------------------------------------------------------CookStew
CookStew* CookStew::Instance()
{
static CookStew instance;
return &instance;
}
void CookStew::Enter(MinersWife* wife)
{
//if not already cooking put the stew in the oven
if (!wife->Cooking())
{
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Putting the stew in the oven";
//send a delayed message myself so that I know when to take the stew
//out of the oven
Dispatch->DispatchMessage(1.5, //time delay
wife->ID(), //sender ID
wife->ID(), //receiver ID
Msg_StewReady, //msg
NO_ADDITIONAL_INFO);
wife->SetCooking(true);
}
}
void CookStew::Execute(MinersWife* wife)
{
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Fussin' over food";
}
void CookStew::Exit(MinersWife* wife)
{
SetTextColor(FOREGROUND_GREEN|FOREGROUND_INTENSITY);
cout << "\n" << GetNameOfEntity(wife->ID()) << ": Puttin' the stew on the table";
}
bool CookStew::OnMessage(MinersWife* wife, const Telegram& msg)
{
SetTextColor(BACKGROUND_RED|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
switch(msg.Msg)
{
case Msg_StewReady:
{
cout << "\nMessage received by " << GetNameOfEntity(wife->ID()) <<
" at time: " << Clock->GetCurrentTime();
SetTextColor(FOREGROUND_GREEN|FOREGROUND_INTENSITY);
cout << "\n" << GetNameOfEntity(wife->ID()) << ": StewReady! Lets eat";
//let hubby know the stew is ready
Dispatch->DispatchMessage(SEND_MSG_IMMEDIATELY,
wife->ID(),
ent_Miner_Bob,
Msg_StewReady,
NO_ADDITIONAL_INFO);
wife->SetCooking(false);
wife->GetFSM()->ChangeState(DoHouseWork::Instance());
}
return true;
}//end switch
return false;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?