合肥工大机器人足球仿真2D考试复习题目及答案.docx
- 文档编号:24536568
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:30
- 大小:23.49KB
合肥工大机器人足球仿真2D考试复习题目及答案.docx
《合肥工大机器人足球仿真2D考试复习题目及答案.docx》由会员分享,可在线阅读,更多相关《合肥工大机器人足球仿真2D考试复习题目及答案.docx(30页珍藏版)》请在冰豆网上搜索。
合肥工大机器人足球仿真2D考试复习题目及答案
笔记:
大概从第五章开始p95球员自身属性/射门p98获得其他球员属性/传球动作p100其他函数p113返回当前环境信息函数p116我最近我去抢球p117球员原子动作p1193种带球速度p120没人防守快速带球有人防守慢速p122踢球/传给最近队友p123移动到某点转身体p124截球p132综合策略(根本看不懂~)p199附录linux基本操作p203踢向某点p204带球p206射向球门/带球+传球p207一些射门传球时需要的函数参考
P208实验内容截球/要更改worldmodel.hp209左有人向右45度带球反之
课本5个实验代码:
//1//VecPositionposGoal(0,0);//踢到场中间
//2//VecPositionposGoal=WM->getPosOpponentGoal();//
//3//VecPositionposGoal=WM->getPosOpponentGoal();//向球门方向慢速带球
//AngDegang=(posGoal-posAgent).getDirection();
//soc=dribble(ang,DRIBBLE_SLOW);
//4//soc=kickTo(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),SS->getBallSpeedMax()+200);//最大速踢给最近球员
//5//soc=leadingPass(OBJECT_TEAMMATE_9,1);//踢给9号,误差范围1
//6//else{if(posBall.getY()>0){
VecPositionpos(40,20);
doublespeed=1.0;
soc=kickTo(pos,speed);}
else{
VecPositionpos(40,-20);
doublespeed=1.0;
soc=kickTo(pos,speed);}
ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));}}//球员在左踢到右反之。
考试题目:
//拿球后行为,利用已有Worldmodel(20)(playerteams.cpp大约130行位置改)
(1)在playOn模式下,拿到球以后朝前方快速带球。
(p204中间)
(2)在PlayOn模式下,拿到球以后朝球门方向慢速带球。
(参考p204中间要加kickto函数,快速带球改为慢速)
(3)在playOn模式下,拿到球以后把球围绕自己身体逆时针转。
(p206中间)
(4)在playOn模式下,拿到球后,有人逼抢(自身周围7米范围有至少1名对方球员),则把球踢到距离对手的另外一侧,安全带球(如对手在右侧,把球踢到左侧,如对手仔左侧,把球踢到右侧)。
(5)playOn模式下,拿到球以后,有人逼抢,传球给最近的队友;否则向球门方向快速带球。
(if判断+p122传队友)
(6)在playOn模式下,如果有人逼抢(自身周围7米范围有至少1名对方球员),则安全带球;否则向球门方向快速带球。
(p120下面)
(7)在PlayOn模式下,若前方没有对方球员,则直接以最大速度向对方球员方射门(周期数为偶数,球门的右侧射门,周期为奇数,向球门方向左侧射门)。
(p96下面按周期射门+if判断对手)
(8)在playOn模式下,拿到球后,在本方半场踢到球场中心点;过了半场,快速带球到对方球门。
(9)在PlayOn模式下,拿到球后,传给最近的周围没人防守的队友(没有人防守以其周围5米范围是否有对方球员为准)脚下。
(p122上+一条if判断防守队员)
(10)在playOn模式下,拿到球后,传给最靠近自己的前方的没人防守的队友(判断队友身边5米范围是否有对方防守队员)。
(p122中+一条if判断防守队员)
(11)在playOn模式下,拿到球后以后,在本方半场传给次近的队友;在对方半场,非10号球员传球给10号球员,10号球员则快速向球门方向带球。
(12)在playOn模式下,如果在本方场,则朝前方慢速带球,如果在对方半场,则朝球门快速带球。
((P96上)获得坐标,if判断球员位置+p119上带球)
(13)在playOn模式下,拿到球后,如果是2号,则把球踢到左侧边线,如果是5号,则把球踢到右侧边线,并把脖子方向转向球;其他球员则向前带球。
(球可踢+判断球号是否为2,获得球员号码(p95中)+绝对坐标,踢+)
(14)在playOn模式下,拿到球后,如果我是4号,则传球给7号;否则的话,传球给最近的队友;到对方禁区后以最大速度射向空隙大的球门一侧。
(判断号码,传球,P209下看不太懂,自求多福吧)
(15)在playOn模式下,垂直带球。
(16)在playOn模式下,拿到球后带球到达球场中心,然后传给最近的球员。
(见顶部)
(17)在playOn模式下,10号带球前进,然后5号跟着10号一起前进,两球员在同一水平线上,且距离为5。
(18)在playOn模式下,5号球员与拿球的对方球员的距离始终为5。
(19)在playOn模式下,2号和4号一起去盯防对方拿球队员
(20)在playon模式下,如果是10号球员,在可踢球的状态下,如果自身的x轴坐标大于30,则直接朝着里对方球员远的球门点射门。
(获取坐标,两个球门柱的周边找人,人少踢哪边)
//拿球以后,需要自己添加WorldModel函数(12)
(下面在三部分修改WorldModel.h264行左右加类成员,WorldModel.cpp加声明,playerteams.cpp加应用)
defalt ls cd kdevelop pwd当前目录 cd ~主目录rcsss monitor
mkdir ....新建文件夹 touch ....新建空文件 ..上层目录
mv .. .. 把..移动到... rm删除 rmdir 删除目录
tar -cvf a.tar aaa 创建tar压缩文件 chmod 777 *提升权限
//拿球后行为,利用已有Worldmodel(20)
(1)在playOn模式下,拿到球以后朝前方快速带球。
{
AngDegang=0.0;
soc=dribble(ang,DRIBBLE_FAST);
}
(2)在PlayOn模式下,拿到球以后朝球门方向慢速带球。
{
AngDegang=(VecPosition(52.5,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_SLOW);
}
(3)在playOn模式下,拿到球以后把球围绕自己身体逆时针转。
{
soc=kickBallCloseToBody(-120);
}
(4)在playOn模式下,拿到球后,有人逼抢(自身周围7米范围有至少1名对方球员),则把球踢到距离对手的另外一侧,安全带球(如对手在右侧,把球踢到左侧,如对手仔左侧,把球踢到右侧)。
{
Circlecir(posAgent,7);
intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir)
AngDegang=0;
if(num>0)
{
if((WM->getGlobalPosition(WM->getClosestInSetTo(OBJECT_SET_OPPONENTS.posAgent))-posAgent).getDirection()>=0)
{
ang+=45;
soc=dribble(ang,DRIBBLE_WITHBALL);}
else
{
ang-=45;
soc=dribble(ang,DRIBBLE_WITHBALL);}
}
else
{
AngDegang=(VecPosition(52.5,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_WITHBALL);}
}
(5)在playOn模式下,拿到球以后,有人逼抢,传球给最近的队友;否则向球门方向快速带球。
{
Circlecir(posAgent,7);
intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir)
if(num>0)
{
soc=leadingPass(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),1);
}
else
{
AngDegang=(VecPosition(52.5,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_FAST);}
}
(6)在playOn模式下,如果有人逼抢(自身周围7米范围有至少1名对方球员),则安全带球;否则向球门方向快速带球。
{
Circlecir(posAgent,7);
intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir)
AngDegang=(VecPositoin(52.5,0)-posAgent).getDirection();
if(num>0)
soc=dribble(0,DRIBBLE_WITHBALL);
else
soc=dribble(ang,DRIBBLE_FAST);
}
(7)在PlayOn模式下,若前方没有对方球员,则直接以最大速度向对方球员方射门(周期数为偶数,球门的右侧射门,周期为奇数,向球门方向左侧射门)。
if(WM->isOpponentAtAngle(30,30)==false)
{VecPositionposGoal(PITCH_LENGTH/2.0,
(-1+2*(WM->getCurrentCircle()%2))*0.4*SS->getGoalWidth());
soc=kickTo(posGoal,SS->getBallSpeedMax());
}
(8)在playOn模式下,拿到球后,在本方半场踢到球场中心点;过了半场,快速带球到对方球门。
if(WM->getBallPos().getX()<0)
soc=kickTo(VecPosition(0,0),1.0);
else
{
AngDegang=(VecPositoin(52.5,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_FAST);
}
(9)在PlayOn模式下,拿到球后,把传给最近的周围没人防守的队友(没有人防守以其周围5米范围是否有对方球员为准)脚下。
Circlecir(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),5);
intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir);
if(num=0)
soc=leadingPass(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,
posAgent),1.0);
else
soc=dribble(0,DRIBBLE_WITHBALL);
returnsoc;
(10)在playOn模式下,拿到球后,把球传给最靠近自己的前方的没人防守的队友(判断队友身边5米范围是否有对方防守队员)。
{
Circlecir(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),5);
intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir);
VecPositiondiff=WM->getGlobalPosition(WM->getClosestInSetTo(
OBJECT_SET_TEAMMATES,posAgent));
AngDegang=(diff-posAgent).getDirection();
if(num=0&&ang>=-90&&ang<=90)
soc=leadingPass(
WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),1.0);
}
(11)在playOn模式下,拿到球后以后,在本方半场传给次近的队友;在对方半场,非10号球员传球给10号球员,10号球员则快速向球门方向带球。
if(WM->getBallPos().getX()<0)
{
soc=leadingPass(WM->getSecondClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent)
1.0);
}
if(WM->getBallPos().getX()>=0)
{
if(WM->getAgentObjectType()!
=OBJECT_TEANMATE_10)
{
soc=leadingPass(OBJECT_TEANMATE_10,1.0)
}
if(WM->getAgentObjectType()==OBJECT_TEANMATE_10)
{
AngDegang=(VecPositoin(52.5,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_FAST);
}
}
(12)在playOn模式下,如果在本方半场,则朝前方慢速带球,如果在对方半场,则朝球门快速带球。
if(WM->getBallPos().getX()<0)
soc=dribble(0,DRIBBLE_SLOW);
if(WM->getBallPos().getX()>=0)
{
AngDegang=(VecPositoin(52.5,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_FAST);
}
(13)在playOn模式下,拿到球后,如果是2号,则把球踢到左侧边线,如果是5号,则把球踢到右侧边线,并把脖子方向转向球;其他球员则向前带球。
if(WM->getAgentObjectType()==OBJECT_TEAMMATE_2)
{
soc=kickTo(VecPosition(WM->getBallPos().getX(),-34),1.0);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));}
elseif(WM->getPlayerNumber()==5)
{
soc=kickTo(VecPosition(WM->getBallPos().getX(),34),1.0);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));}
else
soc=dribble(0,DRIBBLE_WITHBALL);
(14)在playOn模式下,拿到球后,如果我是4号,则传球给7号;否则的话,传球给最近的队友;到对方禁区后以最大速度射向空隙大的球门一侧。
if(WM->getAgentObjectType()==OBJECT_TEANMATE_4)
{
soc=leadingPass(OBJECT_TEAMMATE_7,1.0);
}
else
soc=leadingPass(
WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),1.0)
AngDegang=(VecPositoin(52.5,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_FAST);
if(WM->isInTheirPenaltyArea(WM->getBallPos()))
{
if(WM->getGlobalPosition(WM->getOppGoalieType()).getY()<=0)
soc=kickTo(VecPosition(52.5,6.0),SS->getBallSpeedMax());
else
soc=kickTo(VecPosition(52.5,-6.0),SS->getBallSpeedMax());
}
(15)在playOn模式下,垂直带球。
{
if(WM->getBallPos().getY()<=0)
soc=dribble(90,DRIBBLE_WITHBALL);
else
soc=dribble(-90,DRIBBLE_WITHBALL);
}
(16)在playOn模式下,拿到球后带球到达球场中心,然后传给最近的球员。
{
AngDegang=(VecPosition(0,0)-posAgent).getDirection();
soc=dribble(ang,DRIBBLE_WITHBALL);
soc=leadingPass(
WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),1.0)
}
(17)在playOn模式下,10号带球前进,然后5号跟着10号一起前进,两球员在同一水平线上,且距离为5。
{//把球给10号,(134行)
if(WM->getAgentObjectType()!
=OBJECT_TEANMATE_10)
soc=leadingPass(OBJECT_TEAMMATE_10,1.0);
soc=dribble(0,DRIBBLE_SLOW);
//180行
if(WM->getAgentObjectType()==OBJECT_TEAMMATE_5)
{
VecPositionpos(WM->getBallPos().getX()-5,WM->getBallPos().getY())
soc=moveToPos(pos,20);}
}
(18)在playOn模式下,5号球员与拿球的对方球员的距离始终为5。
//180行
if(WM->getAgentObjectType()==OBJECT_TEAMMATE_5){
VecPositionpos(WM->getBallPos().getX()-5,WM->getBallPos().getY())
soc=moveToPos(pos,20);}
}
(19)在playOn模式下,2号和4号一起去盯防对方拿球队员
//180行
if(WM->getAgentObjectType()==OBJECT_TEAMMATE_2){
VecPositionpos(WM->getBallPos().getX()-5,WM->getBallPos().getY())
soc=moveToPos(pos,20);}
}
if(WM->getAgentObjectType()==OBJECT_TEAMMATE_4)
{
VecPositionpos(WM->getBallPos().getX(),WM->getBallPos().getY()-5)
soc=moveToPos(pos,20);}
}
(20)在playon模式下,如果是10号球员,在可踢球的状态下,如果自身的x轴坐标大于30,则直接朝着里对方球员远的球门点射门。
if(WM->getAgentObjectType()!
=OBJECT_TEAMMATE_10)
soc=leadingPass(OBJECT_TEAMMATE_10,1.0);
if(WM->getAgentObjectType()==OBJECT_TEAMMATE_10&&posAgent.getX()>30)
{
soc=kickTo(VecPosition(52.5,0),PS->getPlayerWhenToTurnAngle());
}
ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
returnsoc;
//拿球以后,需要自己添加WorldModel函数(12)
(21)在playOn模式下,拿球后传球给更靠近对方球门的最近队友。
{
soc=leadPass(WM->getClosestInSetTo
(OBJECT_SET_TEAMMATES,
WM->getPosOpponentGoal()),1.0)
}
(22)在playOn模式下,拿球后,搜索前方-30~30之间距离自己20米内是否有队友,如果有则传给该队友,否则自己带球。
Page209;
(23).在playOn模式下,如果在我方半场拿到球,则向中场线以最大的速度踢,如果在敌方半场拿到球,则向敌方球门处以最大的速度踢
if(WM->getBallPos().getX()<=0
{
VecPositionpos(0,WM->grtBallPos().getY());
soc=kickTo(pos,SS->getBallSpeedMax());
}
if(WM->getBallPos().getX()<=0=
{
soc=kickTo(VecPosition(52.5,0),SS->
getBallSpeedMax());
}
}
(24).在playOn模式下,如果是9号拿到球,则令9号和10号同时冲至敌方球门处,在球门前,9号传给10号,由10号进行射门
{//把球给9号,(134行)
if(WM->getAgentObjectType()!
=OBJECT_TEANMATE_9)
{
soc=leadingPass(OBJECT_TEAMMATE_9,1.0);
AngDegang=(VecPositoin(52.5,0)-posAgent).
getDirection();
soc=dribble(ang,DRIBBLE_FAST);
}
if(WM->isInTheirPenaltyArea(WM->getBallPos()))
{
soc=leadingPa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 合肥 机器人 足球 仿真 考试 复习 题目 答案