机器人足球代码1汇编Word文件下载.docx

上传人:b****4 文档编号:17814610 上传时间:2022-12-10 格式:DOCX 页数:11 大小:17.89KB
下载 相关 举报
机器人足球代码1汇编Word文件下载.docx_第1页
第1页 / 共11页
机器人足球代码1汇编Word文件下载.docx_第2页
第2页 / 共11页
机器人足球代码1汇编Word文件下载.docx_第3页
第3页 / 共11页
机器人足球代码1汇编Word文件下载.docx_第4页
第4页 / 共11页
机器人足球代码1汇编Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

机器人足球代码1汇编Word文件下载.docx

《机器人足球代码1汇编Word文件下载.docx》由会员分享,可在线阅读,更多相关《机器人足球代码1汇编Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

机器人足球代码1汇编Word文件下载.docx

}

returnfalse;

}

//判断球的运动方向返回true危险

boolJudgeDanger()

doubleballX=getBallX();

doubleballY=getBallY();

doublegoalMin=getCourtHeight()/2-getGoalWidth()/2;

doublegoalMax=getCourtHeight()/2+getGoalWidth()/2;

doubleb=ballY-tan(getBallHeading())*ballX;

if(getAttack()>

getBallHeading()>

PI/2&

getBallHeading()<

PI*3/2)

if(goalMin<

50*tan(getBallHeading())+b&

goalMax>

50*tan(getBallHeading())+b)returntrue;

elsereturnfalse;

elseif(getAttack()<

=0&

(getBallHeading()>

PI/2

||getBallHeading()<

2*PI&

3*PI/2))

tan(getBallHeading())*(getCourtWidth()-50)+b&

tan(getBallHeading())*(getCourtWidth()-50)+b<

goalMax)

returntrue;

elsereturnfalse;

//预测足球在times个单位时间后的位置

voidNext(inttimes,double*nextX,double*nextY)

doublevelocity=getBallVelocity();

doubleheading=getBallHeading();

doubleacc=-getBallNegativeAcceleration();

*nextX=getBallX();

*nextY=getBallY();

for(inti=0;

i<

times;

i++)

if(velocity==0)break;

nextPoint(*nextX,*nextY,heading,velocity,nextX,nextY);

//摩擦减速

if(velocity>

0)velocity=fmax(0,velocity+acc);

elseif(velocity<

0)velocity=fmin(0,velocity-acc);

//撞墙检测

if((*nextX)<

0||(*nextX)>

getCourtWidth())

heading=PI-heading;

modifyInCourt(nextX,nextY,getBallRadius());

if((*nextY)<

0||(*nextY)>

getCourtHeight())

heading=-heading;

//跌代计算球的运行线路,计算未来的击球点

voidOptimumPosition(double*hitedX,double*hitedY)

*hitedX=getBallX();

*hitedY=getBallY();

for(inti=0;

200;

doublenextX,nextY;

Next(i,&

nextX,&

nextY);

if(distance(nextX,nextY,getX(),getY())<

i*getMaxMoveVelocity())

hitedX=&

nextX;

hitedY=&

nextY;

break;

//1v1得到敌机坐标

doublegetBotX()

intid=getAttack()>

0?

1:

0;

structBotbot;

getBotById(id,&

bot);

returnbot.x;

doublegetBotY()

returnbot.y;

doublegetBotVelocity()

returnbot.moveVelocity;

boolBotBallBotDistance()

doubleMDistance=distance(getX(),getY(),getBallX(),getBallY());

doubleDDistance=distance(getBotX(),getBotY(),getBallX(),getBallY());

if(MDistance<

DDistance)returntrue;

returnfalse;

//将球踢向目标

voidShoot(doubletargetX,doubletargetY)

doubleballX,ballY;

OptimumPosition(&

ballX,&

ballY);

doubleRn=0.93;

Rn=(AzimuthDanger()&

getBallVelocity()>

getMaxMoveVelocity()/2)?

Rn=1.1:

Rn=0.93;

doubleMDDistance=distance(getX(),getY(),getBotX(),getBotY());

//争球

if(getBallVelocity()<

getMaxMoveVelocity()/2

&

MDDistance<

=getBallRadius()*2+getRadius()*2

(getX()==getBotX()||getY()==getBotY()))Rn=0.1;

if(getBotVelocity()==0)Rn=0.93;

//R越小,抢劫能力就越强,R越大,防守能力越强

doubleR=((getBallRadius()+getRadius())*Rn);

doubletangentX1,tangentX2,tangentY1,tangentY2;

doublebestHitX,bestHitY;

doubledistanceToTarget=distance(targetX,targetY,getX(),getY());

if(distanceToTarget<

R){setMoveToward(targetX,targetY,getMaxMoveVelocity());

return;

doubletangentBearing=acos(R/distanceToTarget);

doubleballToMeHeading=heading(ballX,ballY,getX(),getY());

nextPoint(ballX,ballY,ballToMeHeading+tangentBearing,R,&

tangentX1,&

tangentY1);

nextPoint(ballX,ballY,ballToMeHeading-tangentBearing,R,&

tangentX2,&

tangentY2);

nextPoint(ballX,ballY,heading(targetX,targetY,ballX,ballY),R,&

bestHitX,&

bestHitY);

modifyInCourt(&

tangentY1,getRadius());

tangentY2,getRadius());

bestHitY,getRadius());

doublexx=0;

doubleyy=0;

if(distance(getX(),getY(),bestHitX,bestHitY)<

distance(getX(),getY(),tangentX1,tangentY1))

xx=bestHitX;

yy=bestHitY;

elseif(distance(bestHitX,bestHitY,tangentX1,tangentY1)<

distance(bestHitX,bestHitY,tangentX2,tangentY2))

xx=tangentX1;

yy=tangentY1;

else

xx=tangentX2;

yy=tangentY2;

//防止争边球

if(getX()>

(getBallRadius()+getRadius())*3||getX()<

getCourtWidth()-(getBallRadius()+getRadius())*3)

doublejj=getBallRadius()-getRadius()>

0?

getBallRadius()-getRadius():

getRadius()-getBallRadius();

yy=MIN(getCourtHeight()-jj,yy);

yy=MAX(jj,yy);

//抄近路拦截

doubleMDistance=distance(getX(),getY(),getBallX(),getBallY());

doubleDDistance=distance(getBotX(),getBotY(),getBallX(),getBallY());

if(DDistance<

MDistance)

if(getBallVelocity()>

getMoveVelocity()/2)

intfx;

if(getBallY()>

getCourtHeight()/2)fx=1;

elsefx=-1;

yy+=fx*getBallRadius()*2;

//沿对门边路滚动时的防范措施

if(getBallHeading()==PI/2||getBallHeading()==3*PI/2)

doublebx=getAttack()>

getCourtWidth()-getBallRadius():

getBallRadius();

if(getBallX()==bx&

getMaxMoveVelocity()*2/3)

doublejj=getBallRadius();

xx=getAttack()>

xx-jj:

xx+jj;

setMoveToward(xx,yy,getMaxMoveVelocity());

voidShootGoal()//射门

doubletargetX=getOpponentGoalCenterX();

doubletargetY=getOpponentGoalCenterY();

Shoot(targetX,targetY);

voidShootAttack()//带球射门波浪式进攻

doubletargetX=getAttack()>

getBallX()*2:

getBallX()/2;

doubletargetY=0;

getCourtWidth()*3/5)||(getAttack()<

getCourtWidth()*2/5))

if(getY()<

getBallY())targetY=getCourtHeight();

if(getBallY()<

getCourtHeight()/4)targetY=getCourtHeight();

targetY=MIN(getCourtHeight()/2+getGoalWidth()/2-getBallRadius(),targetY);

targetY=MAX(getCourtHeight()/2-getGoalWidth()/2+getBallRadius(),targetY);

}elseShootGoal();

//防止乌龙的策略

voidOwngoal()

if(JudgeDanger())

doubleRadius=getBallRadius()+getRadius();

doubleDistance=distance(getX(),getY(),getBallX(),getBallY());

doubletargetX=ballX;

if((getAttack()>

myX>

ballX+Radius)||(getAttack()<

myX<

ballX-Radius))

if(getY()>

getBallY())targetY=0;

elsetargetY=getCourtHeight();

//预测防守

voidForecastGuard()

doublex=getAttack()>

0?

getBallX()/2:

getCourtWidth()-(getCourtWidth()-getBallX())/2;

doubley=getBallY();

for(inti=0;

i<

50;

if((getAttack()>

0&

nextX<

=x)||(getAttack()<

nextX>

=x))

y=nextY;

//将y坐标限制在球门的范围内

y=MIN(getCourtHeight()/2+getGoalWidth()/2,y);

y=MAX(getCourtHeight()/2-getGoalWidth()/2,y);

setMoveTo(x,y);

voidmyGuard()

doublex=getAttack()>

doubley=getBallY();

y=MIN(getCourtHeight()/2+getGoalWidth()/2,y);

y=MAX(getCourtHeight()/2-getGoalWidth()/2,y);

setMoveTo(x,y);

//全力防守

voidGoAllOutGuard()

doublex=getAttack()>

y=MIN(getCourtHeight()/2+getGoalWidth()/2+getRadius()*2*2,y);

y=MAX(getCourtHeight()/2-getGoalWidth()/2-getRadius()*2*2,y);

//防守反击

voidGuard()

doubleRadius=getBallRadius()*2+getRadius()*2;

doubleDistance=distance(getX(),getY(),getBallX(),getBallY());

if(Distance>

Radius*10)myGuard();

else

GoAllOutGuard();

if(!

AzimuthDanger()){ShootAttack();

}//方位安全时攻击

if(isHitBall()&

!

AzimuthDanger()&

getMoveVelocity()/4){ShootAttack();

if(BotBallBotDistance()){ShootGoal();

}//如果自己离球的距离小于敌人则进攻

//判断进攻还是防守

voidAttackOrGuard()

if(AzimuthDanger()&

0){Guard();

if(JudgeDanger()&

getMaxMoveVelocity()/2){Guard();

ShootAttack();

//进攻门前争球

voidGuardConfrontEachOther()

doubleRadius=getRadius()+getBallRadius()/2;

doublexx=getAttack()>

Radius:

getCourtWidth()-Radius;

doubleMaxY=getCourtHeight()/2+getGoalWidth()/2+getRadius()*4;

doubleMinY=getCourtHeight()/2-getGoalWidth()/2-getRadius()*4;

getMaxMoveVelocity()/2)

if(getAttack()>

getX()<

xx&

(getY()>

MaxY||getY()<

MinY))

setMoveToward(getBall

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1