コード例 #1
0
string AsteroidTracker::nextCommand(double currentTime) {    
    Analysis a;
    string the_big_answer;
    vector<_link> links, rankedLinks;
    vector<int> targetList;
    vector<double> timesToRelocate;
    int commandListSize;
    
    nextCommandTime = currentTime;
    while ((!commandDeckLoaded) && (nextCommandTime < SIMULATION_TIME)) {
        links.clear();
        rankedLinks.clear();
        targetList.clear();
        timesToRelocate.clear();
        
        links = generateLinks(nextCommandTime);
        rankedLinks = rankLinks(links);
        targetList = generateTargetLinks(rankedLinks);
        timesToRelocate = generateTimesToRelocate(targetList, nextCommandTime);
        double maxRelocateTime = a.max(timesToRelocate);
        relocateAntennas(targetList, maxRelocateTime, nextCommandTime);
        double beamTime = activateAntennas(nextCommandTime);
        monitorAsteroids(beamTime, nextCommandTime);
    }
    commandDeckLoaded = true;
    
    if (!antennasRetired) { // set a trap to prevent the deck from being overloaded
        retireAntennas();
        antennasRetired = true;
        commandListSize = commandList.size();
    }

    // fill the output returned with the command note.
    if (commandDeckLoaded) { // Added to v2
        if (commandNumber < commandListSize) {
            the_big_answer = commandList.at(commandNumber).commandNote;
        }
        commandNumber++;
    }

    // evaluate all links to determine the best candidate

    cout << "Number of Antennas: " << numberOfAntennas << endl;    
    cout << "Number of Asteroids: " << numberOfAsteroids << endl;
    cout << "Number of Commands: " << commandList.size() << endl;
    
    return the_big_answer;
}