本文整理汇总了C++中WorldModel::allPlayers方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldModel::allPlayers方法的具体用法?C++ WorldModel::allPlayers怎么用?C++ WorldModel::allPlayers使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldModel
的用法示例。
在下文中一共展示了WorldModel::allPlayers方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
/*!
*/
double
Neck_ScanPlayers::calculate_score( const WorldModel & wm,
const Vector2D & next_self_pos,
const AngleDeg & left_angle,
const AngleDeg & right_angle )
{
double score = 0.0;
double view_buffer = 90.0;
const int our_min = std::min( wm.interceptTable()->selfReachCycle(),
wm.interceptTable()->teammateReachCycle() );
const int opp_min = wm.interceptTable()->opponentReachCycle();
const bool our_ball = ( our_min <= opp_min );
const AbstractPlayerCont::const_iterator end = wm.allPlayers().end();
for ( AbstractPlayerCont::const_iterator p = wm.allPlayers().begin();
p != end;
++p )
{
if ( (*p)->isSelf() ) continue;
Vector2D pos = (*p)->pos() + (*p)->vel();
AngleDeg angle = ( pos - next_self_pos ).th();
if ( ! angle.isRightOf( left_angle )
|| ! angle.isLeftOf( right_angle ) )
{
continue;
}
double pos_count = (*p)->seenPosCount();
if ( (*p)->isGhost()
&& (*p)->ghostCount() % 2 == 1 )
{
pos_count = std::min( 2.0, pos_count );
}
pos_count += 1.0;
if ( our_ball )
{
if ( (*p)->side() == wm.ourSide()
&& ( (*p)->pos().x > wm.ball().pos().x - 10.0
|| (*p)->pos().x > 30.0 ) )
{
pos_count *= 2.0;
}
}
double base_val = std::pow( pos_count, 2 );
double rate = std::exp( - std::pow( (*p)->distFromSelf(), 2 )
/ ( 2.0 * std::pow( 20.0, 2 ) ) ); // Magic Number
score += base_val * rate;
double buf = std::min( ( angle - left_angle ).abs(),
( angle - right_angle ).abs() );
#ifdef DEBUG_PRINT
dlog.addText( Logger::ACTION,
"__ %c_%d (%.2f %.2f) count=%d base=%f rate=%f +%f buf=%.1f",
(*p)->side() == LEFT ? 'L' : (*p)->side() == RIGHT ? 'R' : 'N',
(*p)->unum(),
(*p)->pos().x, (*p)->pos().y,
(*p)->posCount(),
base_val, rate, base_val * rate,
buf );
#endif
if ( buf < view_buffer )
{
view_buffer = buf;
}
}
// The bigger view buffer, the bigger rate
// range: [1.0:2.0]
// double rate = 2.0 - std::exp( - std::pow( view_buffer, 2 )
// / ( 2.0 * std::pow( 180.0, 2 ) ) ); // Magic Number
double rate = 1.0 + view_buffer / 90.0;
#ifdef DEBUG_PRINT
dlog.addText( Logger::ACTION,
"base_score=%.1f view_buf=%.1f rate=%f -> %f",
score,
view_buffer,
rate,
score * rate );
#endif
score *= rate;
return score;
}