Средства разработки приложений


Листинг 4


Модель цепи стрелков class CChainShot { public: CChainShot(CWnd *pW); virtual ~CChainShot(); void SetLink(); void SetCommand(); void OnSize(int cx, int cy); CRifleman* GetAddrRifleman(int n); CBullet* GetAddrBullet(int n); protected: CWnd *pWnd; COfficer *pCOfficer; TIArrayRifleman IArrayRifleman; TIArrayBullet IArrayBullet; }; CChainShot::CChainShot(CWnd *pW) { pWnd = pW; pCOfficer = new COfficer(); for (int i=1; i<=4; i++) { IArrayRifleman.push_back(new CRifleman(i,pWnd)); IArrayBullet.push_back(new CBullet(pWnd,i)); } SetLink(); } CChainShot::~CChainShot() { if (pCOfficer) delete pCOfficer; TIIteratorRifleman iterRifleman = IArrayRifleman.begin(); while (iterRifleman != IArrayRifleman.end()) delete *iterRifleman++; IArrayRifleman.erase(IArrayRifleman.begin(), IArrayRifleman.end()); TIIteratorBullet iterBullet = IArrayBullet .begin(); while (iterBullet!=IArrayBullet.end()) delete *iterBullet++; IArrayBullet.erase(IArrayBullet.begin() ,IArrayBullet.end()); } void CChainShot::SetCommand() { if (pCOfficer) pCOfficer->SetCommand(); } CRifleman* CChainShot::GetAddrRifleman(int n) { CRifleman* currentRifleman=NULL; CRifleman vs(n, NULL); TIIteratorRifleman iterRifleman = IArrayRifleman.begin(); while (iterRifleman != IArrayRifleman.end()) { currentRifleman= *iterRifleman++; if (*currentRifleman==vs) break; } return currentRifleman; } CBullet* CChainShot::GetAddrBullet(int n) { CBullet* currentBullet=NULL; CBullet vs(NULL, n); if (!IArrayBullet.empty()) { TIIteratorBullet iterBullet = IArrayBullet .begin(); while (iterBullet != IArrayBullet.end()) { currentBullet= *iterBullet++; if (*currentBullet==vs) break; } } return currentBullet; } void CChainShot::SetLink() { LFsaAppl *currentRifleman; TIIteratorRifleman iterRifleman = IArrayRifleman.begin(); int n =1; CRifleman *pFsaLeft = NULL; CRifleman *pFsaRight = NULL; while (iterRifleman != IArrayRifleman.end()) { if (n==1) { currentRifleman= *iterRifleman++; ((CRifleman*)currentRifleman)- >SetNumber(n); n++; pFsaLeft = pCOfficer; pFsaRight= *iterRifleman++; ((CRifleman*)pFsaRight)->SetNumber(n); n++; ((CRifleman*)currentRifleman)-> SetLink(pFsaLeft, pFsaRight); } else { pFsaLeft = currentRifleman; if (iterRifleman != IArrayRifleman.end()) { currentRifleman = pFsaRight; pFsaRight= *iterRifleman++; ((CRifleman*)pFsaRight)->SetNumber(n); n++; ((CRifleman*)currentRifleman)-> SetLink(pFsaLeft, pFsaRight); } } } pFsaLeft = currentRifleman; currentRifleman = pFsaRight; pFsaRight= NULL; ((CRifleman*)currentRifleman)- >SetLink(pFsaLeft, pFsaRight); TIIteratorBullet iterBullet = IArrayBullet.begin(); while (iterBullet != IArrayBullet.end()) { CBullet* currentBullet= *iterBullet++; CRifleman* pRf=GetAddrRifleman (currentBullet->GetNum()); currentBullet->SetAddrMan(pRf); } } void CChainShot::OnSize(int cx, int cy) { int n=1; CBullet* currentBullet; TIIteratorBullet iterBullet = IArrayBullet.begin(); while (iterBullet != IArrayBullet.end()) { currentBullet= *iterBullet++; currentBullet->Size(CSize(cx/n,cy/n)); currentBullet->SetCenter(400/n-20,10); currentBullet->SetMove(0,1); // currentBullet->SizeBounce(CSize(20,20)); n++; } }


Начало  Назад  Вперед



Книжный магазин