Пример #1
0
void BaseObject::MoveManager::calcShortestPath(const Position& pos, const Position& topos, int mob, BaseObject* obj){
	if(mob <= 0) return;

	Player* me_player = dynamic_cast<Player*>(obj);
	Enemy* me_enemy = dynamic_cast<Enemy*>(obj);

	Position checkpos;
	for(int i = 0; i < DIR_NUM; ++i){
		checkpos = pos + dir[i];

		if(Stage::isBrightened(checkpos) && (mob-1) >= 0){
			//ジャンプ力の足りる位置から移動
			int height = abs(Stage::getHeight(checkpos) - Stage::getHeight(pos));
			if( (me_player != NULL && me_player->getJumpPow() >= height) ||
				(me_enemy != NULL && me_enemy->getJumpPow() >= height) ){

					current_path.push_back(i);
					if(checkpos == topos){
						if(current_path.size() < shortest_path.size()){
							shortest_path = current_path;
						}
					}
					calcShortestPath(checkpos, topos, mob-1, obj);
					current_path.pop_back();
			}
		}
	}
}
Пример #2
0
bool Graph::dijkstra(Vertex &v)
{
  if(vs->size() < 1)
    return false;
 
  set<int> *S = new set<int>();
  S->insert(v.getNodeId());
 
  set<int> *candidate = new set<int>();
  obtainCandidate(*S, *candidate);
  printS(*S);
  printCandidate(*candidate);
 
  vector<vector<int> > *dist = new vector<vector<int> >();
  int u = v.getNodeId();
  vector<int> *vec = new vector<int>(vs->size());
  for(unsigned int i = 0; i < vs->size(); i++)
    vec->at(i) = INT_MAX;
  vec->at(retrieveVertexById(u)) = 0;
  calcShortestPath(vs->at(retrieveVertexById(u)), *vec, *vec);
  dist->push_back(*vec);
 
  printDist(*dist);
 
  for(unsigned int i = 0; i < vs->size() -1; i++)
  {
    vector<int> *vec = new vector<int>();
    bool nextNode = calcShortestPath(vs->at(retrieveVertexById(u)), dist->at(i), *vec);
    if(false == nextNode) // no neighbour node, finish
       return true;
 
    dist->push_back(*vec);
    
    u = selectU(*candidate, *vec);
    S->insert(u);
    printS(*S);
    obtainCandidate(*S, *candidate);
    printDist(*dist);
  }
 
  return true;
}
Пример #3
0
void BaseObject::MoveManager::trackMovement(const Position& pos, const Position& topos, int mob, BaseObject* obj){
	initialize();
	calcShortestPath(pos, topos, mob, obj);
	path = shortest_path;
}