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;
}
Esempio n. 2
0
File: fight.cpp Progetto: q4a/attal
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;
}
Esempio n. 4
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;
}
Esempio n. 5
0
void Characters::update(float delta)
{
    //攻击是不能点击
    if (! isAttack())
    {
        
    }
    //简单AI
    simpleAI();
}
Esempio n. 6
0
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);
		}
	}

}
Esempio n. 7
0
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;
}