vector<string> Organism::getAttackStrings() { vector<string> list; int i,j,k; for (i=0;i<GENELEN;i++) { if (isAttack(Genome[i])) { int stop = 0; string S = ""; j=0; do { if (!isAttack(Genome[i+j])) stop=1; else S = S + (char)(Genome[i+j]+'A'); j++; } while ((!stop)&&(i+j<GENELEN)); list.push_back(S); i=i+j-1; } } return list; }
bool Fight::isOpponent( GenericFightUnit * unit ) { if( isAttack() ) { return ( giveClass( unit ) == FIGHTER_DEFENSE ); } else { return ( giveClass( unit ) == FIGHTER_ATTACK ); } }
int Organism::canEat(Organism *Target) { int i,j,k,l; int mc = 0; for (i=0;i<GENELEN;i++) { if (isAttack(Genome[i])) { int stop = 0; j=0; do { if (!isAttack(Genome[i+j])) stop=1; j++; } while ((!stop)&&(i+j<GENELEN)); int found = 0; for (k=0;k<GENELEN;k++) { stop = 0; l = 0; do { if (Target->Genome[k+l] != conjugate(Genome[i+l])) stop = 1; l++; } while ((!stop)&&(k+l<GENELEN)&&(l<j)); if ((k+l!=GENELEN)&&(!stop)) { found = 1; } } if (!found) { return 1; } else mc++; i=i+j-1; } } // printf("Survived!\n"); return 0; }
int getVoiceCount(HumdrumFile& infile, int line) { int i, j, k; int ii, jj; int count = 0; int track; int acount; Array<int> tracks(infile.getMaxTracks()+1); Array<Array<char> > tokens; tracks.setAll(0); tracks.allowGrowth(0); for (j=0; j<infile[line].getFieldCount(); j++) { if (!infile[line].isExInterp(j, "**kern")) { continue; } ii = line; jj = j; if (attackQ && (strcmp(infile[line][j], ".") == 0)) { continue; } if (infile[line].isNullToken(j)) { ii = infile[line].getDotLine(j); if (ii < 0) { continue; } // . at start of data spine jj = infile[line].getDotSpine(j); if (jj < 0) { continue; } // . at start of data spine } if (strchr(infile[ii][jj], 'r') != NULL) { continue; } if (attackQ) { infile[ii].getTokens(tokens, jj); acount = 0; for (k=0; k<tokens.getSize(); k++) { if (isAttack(tokens[k].getBase())) { acount++; } } if (acount == 0) { continue; } } if (trackQ) { track = infile[ii].getPrimaryTrack(jj); tracks[track]++; } else { count++; } } if (trackQ) { count = 0; for (i=1; i<tracks.getSize(); i++) { if (tracks[i]) { count++; } } } return count; }
void Characters::update(float delta) { //攻击是不能点击 if (! isAttack()) { } //简单AI simpleAI(); }
void VultureManagerExt::executeMicro(const UnitVector & targets) { const UnitVector & selectedUnits = getUnits(); // figure out targets UnitVector selectedUnitTargets; UnitVector nearbyTargets; for (size_t i(0); i<targets.size(); i++) { // conditions for targeting if (targets[i]->isVisible() && !targets[i]->getType().isFlyer()) { selectedUnitTargets.push_back(targets[i]); } } //setAverageEnemyPosition(selectedUnitTargets); // For each unit BOOST_FOREACH(BWAPI::Unit * selectedUnit, selectedUnits) { // Avg enemy pos for (size_t i(0); i<targets.size(); i++) { // conditions for targeting if (targets[i]->isVisible() && !targets[i]->getType().isFlyer()) { if (targets[i]->getDistance(selectedUnit) < 500) { nearbyTargets.push_back(targets[i]); } } } if (!nearbyTargets.empty()) { setAverageEnemyPosition(nearbyTargets); } else { setAverageEnemyPosition(selectedUnitTargets); } // eof avg eveeny pos // if the order is to attack or defend if ((StrategyManager::Instance().getCurrentStrategy() == StrategyManager::Instance().TerranWraithRush1Port) && !isAttack()) { executeTerranWraithRush1Port(selectedUnit, selectedUnitTargets); } else if (order.type == order.Attack || order.type == order.Defend) { // if there are targets if (!selectedUnitTargets.empty()) { // find the best target for this Marine BWAPI::Unit * target = getTarget(selectedUnit, selectedUnitTargets); // attack it kiteTarget(selectedUnit, target); } // if there are no targets else { // if we're not near the order position if (selectedUnit->getDistance(order.position) > 100) { // move to it smartAttackMove(selectedUnit, order.position); } } } if (Options::Debug::DRAW_UALBERTABOT_DEBUG) { BWAPI::Broodwar->drawLineMap(selectedUnit->getPosition().x(), selectedUnit->getPosition().y(), selectedUnit->getTargetPosition().x(), selectedUnit->getTargetPosition().y(), Options::Debug::COLOR_LINE_TARGET); } } }
int getNoteCount(HumdrumFile& infile, int line) { Array<int> states(1000); states.setAll(0); Array<Array<char> > tokens; int i, j, k; int ii, jj; int count = 0; int notenum; for (j=0; j<infile[line].getFieldCount(); j++) { if (!infile[line].isExInterp(j, "**kern")) { continue; } ii = line; jj = j; if (infile[line].isNullToken(j)) { if (attackQ) { // Null tokens never contain note attacks continue; } ii = infile[line].getDotLine(j); if (ii < 0) { continue; } // . at start of data spine jj = infile[line].getDotSpine(j); if (jj < 0) { continue; } // . at start of data spine } if (strchr(infile[ii][jj], 'r') != NULL) { continue; } infile[ii].getTokens(tokens, jj); for (k=0; k<tokens.getSize(); k++) { if (attackQ && !isAttack(tokens[k].getBase())) { continue; } notenum = -1; if (twelveQ) { notenum = Convert::kernToMidiNoteNumber(tokens[k].getBase()); if (pcQ) { notenum = notenum % 12; } } else if (sevenQ) { notenum = Convert::kernToDiatonicPitch(tokens[k].getBase()); if (pcQ) { notenum = notenum % 7; } } else if (noteQ && !uniqueQ) { count++; } else { // assume fortyQ: notenum = Convert::kernToBase40(tokens[k].getBase()); if (pcQ) { notenum = notenum % 40; } } if (notenum < 0) { continue; } states[notenum]++; } } if (pcQ) { int pcount = 0; for (i=0; i<states.getSize(); i++) { if (states[i]) { pcount++; } if (pcQ && i>40) { break; } } return pcount; } else if (uniqueQ) { int unique = 0; for (i=0; i<states.getSize(); i++) { if (states[i]) { unique++; } if (pcQ && i>40) { break; } } return unique; } else if (allQ || noteQ) { return count; } // shouldn't get here... return -1; }