代码拉取完成,页面将自动刷新
/* 生存模式下AI */
inline void AI1( role & tr, role player )
{
const int wc = 2; /* 误差,越小难度越大 */
float ar;
if ( tr.type == PLANET )
return;
if ( !tr.blasting ) {
if ( tr.type == LOVE ) {
tr.r -= PI / 180 * 2;
return;
}
ar = calcR( tr.x, tr.y ) + (random( wc ) - (wc - 1) * 2) * PI / 180;
if ( fabs( tr.x - pX ) * fabs( tr.x - pX ) + fabs( tr.y - pY ) * fabs( tr.y - pY ) < (min( getwidth(), getheight() ) / 2) * min( getwidth(), getheight() ) / 2 ) {
tr.subV();
if ( tr.v < 0 )
tr.v = 0;
tr.addBullet();
} else {
tr.move();
tr.addV();
}
if ( tr.r < ar )
tr.turnL();
else
tr.turnR();
tr.getnew();
}
}
enum AIStates {
AIRAND,//随机移动
AIFIND,//收到信息,开始寻找玩家
AIRUNAWAY,//逃跑
AICATCH,//发现并追逐玩家
};
/* 标准模式下AI(智能AI) */
int AItW = 0;
bool AIFind=false;//玩家是否被发现
int fX,fY;//玩家被发现时的位置
inline void AI2( role & tr, role player )
{
float ar;
//普通AI
if ( tr.type == PLANET || tr.type == CLOUD)
return;
if ( tr.type == LOVE ) {
tr.r -= PI / 180 * 2;
return;
}
//复杂AI
if ( !tr.blasting ) {
//更新AI状态
if(AIFind) {
tr.AIState=AIFIND;
}
if ( ( tr.x - pX ) * ( tr.x - pX ) + ( tr.y - pY ) * ( tr.y - pY ) < AISR * AISR ) {
/* 发现 */
if ( tr.life < SDATA.life[tr.type]/5 ) {
/* 打不过,逃跑 */
tr.AIState=AIRUNAWAY;
} else {
tr.AIState=AICATCH;
}
} else {
tr.AIState=AIRAND;
}
if(player.mV) tr.AIState=AIRUNAWAY;
//执行AI
switch(tr.AIState) {
case AIRAND: {
/* 随机移动 */
if ( AItW == 0 ) {
if ( random( 100 ) > 50 ) {
AItW = 50;
} else AItW = -50;
}
if ( AItW > 0 ) {
tr.turnL();
AItW--;
} else {
tr.turnR();
AItW++;
}
tr.move( (random( 2 ) == 0) );
tr.v = SDATA.maxV[tr.type] / 4;
tr.getnew();
break;
}
case AIFIND: {
ar=calcR(fX-tr.x+pX,fY-tr.y+pY);
if ( tr.r < ar )
tr.turnL( );
else
tr.turnR( );
tr.move();
tr.addV();
break;
}
case AIRUNAWAY: {
ar = calcR( tr.x, tr.y );
if ( tr.r < ar )
tr.turnR( 1 );
else
tr.turnL( 1 );
tr.move(1);
tr.addV();
break;
}
case AICATCH: {
//汇报消息
AIFind=true;
fX=pX;
fY=pY;
tr.addBullet();
ar = calcR( tr.x, tr.y );
if ( tr.r < ar )
tr.turnL( );
else
tr.turnR( );
tr.addV();
tr.move(1);
break;
}
}
tr.getnew();
}
}
//非战斗机型AI
inline void AI3( role & tr, role player )
{
const int wc = 0; /* 误差,越小难度越大 */
float ar;
if ( tr.type == PLANET )
return;
if ( !tr.blasting ) {
if ( fabs( tr.x - pX ) * fabs( tr.x - pX ) + fabs( tr.y - pY ) * fabs( tr.y - pY ) < max( getwidth(), getheight() ) * max( getwidth(), getheight() ) ) {
/* 打不过,逃跑 */
if ( AItW < 150 ) {
tr.turnL( 1 );
AItW++;
} else if ( AItW > 150 ) {
tr.turnR( 1 );
AItW--;
}
tr.move( 1 );
} else {
/* 随机移动 */
if ( AItW == 0 ) {
if ( random( 100 ) > 50 ) {
AItW = 50;
} else AItW = -50;
}
if ( AItW > 0 ) {
tr.turnL();
AItW--;
} else {
tr.turnR();
AItW++;
}
tr.move( (random( 2 ) == 0) );
tr.v = SDATA.maxV[tr.type] / 4;
tr.getnew();
}
tr.getnew();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。