Пример #1
0
void CSinglePlayerGame::simulateMatch(const CPfMatches &match)
{
	CEventManager *eventMngr = CGameEngine::getInstance()->getEventManager();

    std::string        currentTimestamp = match.getDMatch().getTimestamp();
	IPfTeamPlayersDAO  *teamPlayersDAO  = m_daoFactory->getIPfTeamPlayersDAO();
    IPfTeamAveragesDAO *teamsAvgDAO     = m_daoFactory->getIPfTeamAveragesDAO();

    eventMngr->addEvent(new CStartMatchEvent(match.getDMatch(), match.getXMatch()));

    int xHomeTeam  = match.getXFkTeamHome();
    int xAwayTeam  = match.getXFkTeamAway();
    CPfTeamAverages *homeTeamAvg = teamsAvgDAO->findByXTeam(xHomeTeam, currentTimestamp);
    CPfTeamAverages *awayTeamAvg = teamsAvgDAO->findByXTeam(xAwayTeam, currentTimestamp);
    int nHomeGoals = getRandomNGoals(homeTeamAvg, awayTeamAvg);
    int nAwayGoals = getRandomNGoals(awayTeamAvg, homeTeamAvg);

    delete homeTeamAvg;
    delete awayTeamAvg;

    if( nHomeGoals>0 ){
        std::vector<CPfTeamPlayers*>* teamPlayesList = teamPlayersDAO->findLineUpByXFkTeam(xHomeTeam, currentTimestamp);
        while( nHomeGoals>0 ){
            int numPlayer = rand()%teamPlayesList->size();
            if(numPlayer == 0) { //Goalie don't score
                numPlayer = 10;
            }
            CPfTeamPlayers *teamPlayer = teamPlayesList->operator[](numPlayer);

            int minute = rand()%90;
            CDate eventDate = match.getDMatch();
            eventDate.setMin(eventDate.getMin()+minute);

            eventMngr->addEvent(new CGoalMatchEvent(eventDate, match.getXMatch(), xHomeTeam, teamPlayer->getXTeamPlayer(), minute, false));

            nHomeGoals--;
        }
        teamPlayersDAO->freeVector(teamPlayesList);
    }
    if( nAwayGoals>0 ){
        std::vector<CPfTeamPlayers*>* teamPlayesList = teamPlayersDAO->findLineUpByXFkTeam(xAwayTeam, currentTimestamp);
        while( nAwayGoals>0 ){
            int numPlayer = rand()%teamPlayesList->size();
            if(numPlayer == 0) { //Goalie don't score
                numPlayer = 10;
            }
            CPfTeamPlayers *teamPlayer = teamPlayesList->operator[](numPlayer);

            int minute = rand()%90;
            CDate eventDate = match.getDMatch();
            eventDate.setMin(eventDate.getMin()+minute);

            eventMngr->addEvent(new CGoalMatchEvent(eventDate, match.getXMatch(), xAwayTeam, teamPlayer->getXTeamPlayer(), minute, false));

            nAwayGoals--;
        }
        teamPlayersDAO->freeVector(teamPlayesList);
    }

    CDate eventDate = match.getDMatch();
    eventDate.setMin(eventDate.getMin()+90);

    eventMngr->addEvent(new CEndMatchEvent(eventDate, match.getXMatch()));
}