本文整理汇总了C++中TMap::getHex方法的典型用法代码示例。如果您正苦于以下问题:C++ TMap::getHex方法的具体用法?C++ TMap::getHex怎么用?C++ TMap::getHex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TMap
的用法示例。
在下文中一共展示了TMap::getHex方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _coberturaParcial
int _coberturaParcial(const std::vector<RayCell> v, int nivelDefensor, int nivelAtacante, const TMap & map){
THex * infoDefensor = NULL, * infoAtacante = NULL;
// Caso de Error 1 -> La posicion inicial es mala
infoDefensor = map.getHex(v[0].p);
if(infoDefensor == NULL)
return 0;
infoAtacante = map.getHex(v[v.size()-1].p);
if(infoAtacante == NULL)
return 0;
// Caso de Error 2 -> Hay una sola casilla en el RayCell
if(v.size() < 2)
return 0;
// Comprobamos si esta en agua -> Proporciona Cobertura Parcial
if(infoDefensor->tipo == 2 && infoDefensor->nivel <= -1)
return 1;
// Si la altura del hexagono del atacante es mayor que la del defensor
// Anula Cobertura Parcial del Defensor
if(infoAtacante->nivel > infoDefensor->nivel)
return 0;
// Comprobamos los hexagonos intermedios entre el defensor y el atacante
// Si hay un hexagono que tengo mi misma altura o superior -> Tengo Cobertura Parcial
for(int i = 1; i < ((int) v.size() - 1); i++){
if(ldvcellValidaCobertura(v[i], map, infoDefensor->nivel))
return 1;
}
return 0;
}
示例2: ldvcellValidaCobertura
/**
* Devuelve true si c da Cobertura Parcial
* con una casilla adyacente de altura nivel de la casilla del Mech
*/
bool ldvcellValidaCobertura(RayCell c, const TMap & map, int nivel){
THex * infoCell = NULL;
THex * infoCellAlt = NULL;
infoCell = map.getHex( c.p );
if( infoCell != NULL ){
if( infoCell->nivel > nivel){
if( c.alt != NULL ){
infoCellAlt = map.getHex( *c.alt );
if( infoCellAlt != NULL ){
if( infoCellAlt->nivel > nivel){
return true;
}
else
return false;
}
else
return true;
}
else
return true;
}
else
return false;
}
else if( c.alt != NULL ){
infoCellAlt = map.getHex( *c.alt );
if( infoCellAlt != NULL ){
if( infoCellAlt->nivel > nivel)
return true;
else
return false;
}
else
return false;
}
else
return false;
}
示例3: ldvcellValidaEle
/**
* Devuelve true si c forma una linea de visión válida
* con una casilla adyacente de altura nivelMech
*/
bool ldvcellValidaEle(RayCell c, const TMap & map, int nivel){
THex * infoCell = NULL;
THex * infoCellAlt = NULL;
infoCell = map.getHex( c.p );
if( infoCell != NULL )
if( infoCell->nivel > nivel)
return false;
if( c.alt != NULL ){
infoCellAlt = map.getHex( *c.alt );
if( infoCellAlt != NULL ){
if( infoCellAlt->nivel > nivel)
return false;
}
}
if( infoCell == NULL && infoCellAlt == NULL )
return false;
return true;
}
示例4: ldvcellValidaObj
void ldvcellValidaObj(RayCell c, const TMap & map, Objetos_t & obj, int nivelMech){
THex * infoCell = NULL;
THex * infoCellAlt = NULL;
Objetos_t objCell, objCellAlt;
// Vemos los objetos en el hexagono
infoCell = map.getHex( c.p );
if( infoCell != NULL && (infoCell->nivel + 2) > nivelMech ){
if( infoCell->objeto == 2 )
objCell.bosqueDenso++;
else if( infoCell->humo )
objCell.humo++;
else if( infoCell->objeto == 1 )
objCell.bosqueDisperso++;
}
// Vemos los objetos en el Hexagono alternativo
// En caso de existir
if( c.alt != NULL ){
infoCellAlt = map.getHex( *c.alt );
if( infoCellAlt != NULL && (infoCellAlt->nivel + 2) > nivelMech){
if( infoCellAlt->objeto == 2 )
objCellAlt.bosqueDenso++;
else if( infoCellAlt->humo )
objCellAlt.humo++;
else if( infoCellAlt->objeto == 1 )
objCellAlt.bosqueDisperso++;
}
}
// Comparamos a ver que Hexagono penaliza mas
if(objCell.bosqueDenso > 0 || objCellAlt.bosqueDenso > 0)
obj.bosqueDenso++;
else if(objCell.humo > 0 || objCellAlt.humo > 0)
obj.humo++;
else if(objCell.bosqueDisperso > 0 || objCellAlt.bosqueDisperso > 0)
obj.bosqueDisperso++;
}
示例5: _LdV
int _LdV(const std::vector<RayCell> v, int nivelOrig, int nivelDest, const TMap & map){
THex * infoOrig = NULL, * infoDest = NULL;
// Caso de Error 1 -> La posicion inicial es mala
infoOrig = map.getHex(v[0].p);
if(infoOrig == NULL)
return 0;
infoDest = map.getHex(v[v.size()-1].p);
if(infoDest == NULL)
return 0;
// Caso de Error 2 -> Hay una sola casilla en el RayCell
if(v.size() < 2)
return 0;
// Si alguno de los dos mechs estan completamente cubiertos por agua
// NO HAY LDV
if(cubiertoAgua(infoOrig, nivelOrig) ||
cubiertoAgua(infoDest, nivelDest))
return 0;
// Si ha llegado aquí y son adyacentes -> SI hay LDV
if((int)v.size() == 2)
return 1;
// Hay Hexagono intermedios entre el Origen y el Destino
// Obtenemos las alturas relativas a las que estan los mechs
// Sumamos a la altura del hexagono el nivel de los mechs (+0(tumbado) o +1(pie))
int nivelHexOrigen = nivelOrig + infoOrig->nivel;
int nivelHexDestino = nivelDest + infoDest->nivel;
Objetos_t objetos;
// Caso especial -> Haya un solo hexagono entre atacante y defensor
if((int)v.size() == 3){
if(!ldvcellValidaEle(v[1], map, nivelHexOrigen) ||
!ldvcellValidaEle(v[1], map, nivelHexDestino))
return 0;
if(nivelHexOrigen >= nivelHexDestino)
ldvcellValidaObj(v[1], map, objetos, nivelHexOrigen);
else
ldvcellValidaObj(v[1], map, objetos, nivelHexDestino);
}
else{
// Casuisticas mas normales
// Para cada hexagono de Ray Cast
// Menos el 1º y el ultimo -> Donde estan los Mechs
for(int i = 1; i < ((int)v.size() - 1); i++){
// Si hexagono adyacente atacante tiene nivel mayor -> No LdV
if(i == 1){
if(!ldvcellValidaEle(v[i], map, nivelHexOrigen))
return 0;
ldvcellValidaObj(v[i], map, objetos, nivelHexOrigen);
}
// Si hexagono adyacente defensor tiene nivel mayor -> No LdV
if(i == ((int)v.size() - 2)){
if(!ldvcellValidaEle(v[i], map, nivelHexDestino))
return 0;
ldvcellValidaObj(v[i], map, objetos, nivelHexDestino);
}
// Para hexagono intermedios -> Si la altura es mayor a la de atacante y defensor
// No LdV
if(i != 1 && i != ((int)v.size() - 2)){
if(!ldvcellValidaEle(v[i], map, nivelHexOrigen) &&
!ldvcellValidaEle(v[i], map, nivelHexDestino))
return 0;
if(nivelHexOrigen >= nivelHexDestino)
ldvcellValidaObj(v[i], map, objetos, nivelHexOrigen);
else
ldvcellValidaObj(v[i], map, objetos, nivelHexDestino);
}
}
}
// Comprobamos las posibles combinaciones de edificios, bosques y humos
if(objetos.bosqueDisperso >= 3)
return 0;
else if(objetos.bosqueDisperso >= 1 && objetos.bosqueDenso >= 1)
return 0;
else if(objetos.bosqueDenso >= 2)
return 0;
else if(objetos.humo >= 2)
return 0;
else if(objetos.humo >= 1 && objetos.bosqueDisperso >= 1)
return 0;
return 1;
}