機(jī)器人足球仿真2D考試復(fù)習(xí)題目及答案_第1頁(yè)
機(jī)器人足球仿真2D考試復(fù)習(xí)題目及答案_第2頁(yè)
機(jī)器人足球仿真2D考試復(fù)習(xí)題目及答案_第3頁(yè)
機(jī)器人足球仿真2D考試復(fù)習(xí)題目及答案_第4頁(yè)
機(jī)器人足球仿真2D考試復(fù)習(xí)題目及答案_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

筆記:大概從第五章開始p95球員自身屬性/射門p98獲得其他球員屬性/傳球動(dòng)作p100其他函數(shù)p113返回當(dāng)前環(huán)境信息函數(shù)p116我最近我去搶球p117球員原子動(dòng)作p1193種帶球速度p120沒(méi)人防守快速帶球有人防守慢速p122踢球/傳給最近隊(duì)友p123移動(dòng)到某點(diǎn)轉(zhuǎn)身體p124截球p132綜合策略(根本看不懂~)p199附錄linux基本操作p203踢向某點(diǎn)p204帶球p206射向球門/帶球+傳球p207一些射門傳球時(shí)需要的函數(shù)參考P208實(shí)驗(yàn)內(nèi)容截球/要更改worldmodel.hp209左有人向右45度帶球反之課本5個(gè)實(shí)驗(yàn)代碼://1//VecPositionposGoal(0,0);//踢到場(chǎng)中間//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號(hào),誤差范圍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函數(shù),快速帶球改為慢速)(3)在playOn模式下,拿到球以后把球圍繞自己身體逆時(shí)針轉(zhuǎn)。(p206中間)(4)在playOn模式下,拿到球后,有人逼搶(自身周圍7米范圍有至少1名對(duì)方球員),則把球踢到距離對(duì)手的另外一側(cè),安全帶球(如對(duì)手在右側(cè),把球踢到左側(cè),如對(duì)手仔左側(cè),把球踢到右側(cè))。(5)playOn模式下,拿到球以后,有人逼搶,傳球給最近的隊(duì)友;否則向球門方向快速帶球。(if判斷+p122傳隊(duì)友)(6)在playOn模式下,如果有人逼搶(自身周圍7米范圍有至少1名對(duì)方球員),則安全帶球;否則向球門方向快速帶球。(p120下面)(7)在PlayOn模式下,若前方?jīng)]有對(duì)方球員,則直接以最大速度向?qū)Ψ角騿T方射門(周期數(shù)為偶數(shù),球門的右側(cè)射門,周期為奇數(shù),向球門方向左側(cè)射門)。(p96下面按周期射門+if判斷對(duì)手)(8)在playOn模式下,拿到球后,在本方半場(chǎng)踢到球場(chǎng)中心點(diǎn);過(guò)了半場(chǎng),快速帶球到對(duì)方球門。(9)在PlayOn模式下,拿到球后,傳給最近的周圍沒(méi)人防守的隊(duì)友(沒(méi)有人防守以其周圍5米范圍是否有對(duì)方球員為準(zhǔn))腳下。(p122上+一條if判斷防守隊(duì)員)(10)在playOn模式下,拿到球后,傳給最靠近自己的前方的沒(méi)人防守的隊(duì)友(判斷隊(duì)友身邊5米范圍是否有對(duì)方防守隊(duì)員)。(p122中+一條if判斷防守隊(duì)員)(11)在playOn模式下,拿到球后以后,在本方半場(chǎng)傳給次近的隊(duì)友;在對(duì)方半場(chǎng),非10號(hào)球員傳球給10號(hào)球員,10號(hào)球員則快速向球門方向帶球。(12)在playOn模式下,如果在本方場(chǎng),則朝前方慢速帶球,如果在對(duì)方半場(chǎng),則朝球門快速帶球。((P96上)獲得坐標(biāo),if判斷球員位置+p119上帶球)(13)在playOn模式下,拿到球后,如果是2號(hào),則把球踢到左側(cè)邊線,如果是5號(hào),則把球踢到右側(cè)邊線,并把脖子方向轉(zhuǎn)向球;其他球員則向前帶球。(球可踢+判斷球號(hào)是否為2,獲得球員號(hào)碼(p95中)+絕對(duì)坐標(biāo),踢+)(14)在playOn模式下,拿到球后,如果我是4號(hào),則傳球給7號(hào);否則的話,傳球給最近的隊(duì)友;到對(duì)方禁區(qū)后以最大速度射向空隙大的球門一側(cè)。(判斷號(hào)碼,傳球,P209下看不太懂,自求多福吧)(15)在playOn模式下,垂直帶球。(16)在playOn模式下,拿到球后帶球到達(dá)球場(chǎng)中心,然后傳給最近的球員。(見頂部)(17)在playOn模式下,10號(hào)帶球前進(jìn),然后5號(hào)跟著10號(hào)一起前進(jìn),兩球員在同一水平線上,且距離為5。(18)在playOn模式下,5號(hào)球員與拿球的對(duì)方球員的距離始終為5。(19)在playOn模式下,2號(hào)和4號(hào)一起去盯防對(duì)方拿球隊(duì)員(20)在playon模式下,如果是10號(hào)球員,在可踢球的狀態(tài)下,如果自身的x軸坐標(biāo)大于30,則直接朝著里對(duì)方球員遠(yuǎn)的球門點(diǎn)射門。(獲取坐標(biāo),兩個(gè)球門柱的周邊找人,人少踢哪邊)//拿球以后,需要自己添加WorldModel函數(shù)(12)(下面在三部分修改WorldModel.h264行左右加類成員,WorldModel.cpp加聲明,playerteams.cpp加應(yīng)用)defalt

ls

cd

kdevelop

pwd當(dāng)前目錄

cd

~主目錄rcsss

monitor

mkdir

新建文件夾

touch

新建空文件

..上層目錄

mv

..

..

把..移動(dòng)到...

rm刪除

rmdir

刪除目錄

tar

-cvf

a.tar

aaa

創(chuàng)建tar壓縮文件

chmod

777

*提升權(quán)限//拿球后行為,利用已有Worldmodel(20)在playOn模式下,拿到球以后朝前方快速帶球。{AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);}在PlayOn模式下,拿到球以后朝球門方向慢速帶球。{AngDegang=(VecPosition(52.5,0)-posAgent).getDirection();soc=dribble(ang,DRIBBLE_SLOW);}在playOn模式下,拿到球以后把球圍繞自己身體逆時(shí)針轉(zhuǎn)。{soc=kickBallCloseToBody(-120);}(4)在playOn模式下,拿到球后,有人逼搶(自身周圍7米范圍有至少1名對(duì)方球員),則把球踢到距離對(duì)手的另外一側(cè),安全帶球(如對(duì)手在右側(cè),把球踢到左側(cè),如對(duì)手仔左側(cè),把球踢到右側(cè))。{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模式下,拿到球以后,有人逼搶,傳球給最近的隊(duì)友;否則向球門方向快速帶球。{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名對(duì)方球員),則安全帶球;否則向球門方向快速帶球。{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);elsesoc=dribble(ang,DRIBBLE_FAST);}(7)在PlayOn模式下,若前方?jīng)]有對(duì)方球員,則直接以最大速度向?qū)Ψ角騿T方射門(周期數(shù)為偶數(shù),球門的右側(cè)射門,周期為奇數(shù),向球門方向左側(cè)射門)。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模式下,拿到球后,在本方半場(chǎng)踢到球場(chǎng)中心點(diǎn);過(guò)了半場(chǎng),快速帶球到對(duì)方球門。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模式下,拿到球后,把傳給最近的周圍沒(méi)人防守的隊(duì)友(沒(méi)有人防守以其周圍5米范圍是否有對(duì)方球員為準(zhǔn))腳下。 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);elsesoc=dribble(0,DRIBBLE_WITHBALL); returnsoc;(10)在playOn模式下,拿到球后,把球傳給最靠近自己的前方的沒(méi)人防守的隊(duì)友(判斷隊(duì)友身邊5米范圍是否有對(duì)方防守隊(duì)員)。{ 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模式下,拿到球后以后,在本方半場(chǎng)傳給次近的隊(duì)友;在對(duì)方半場(chǎng),非10號(hào)球員傳球給10號(hào)球員,10號(hào)球員則快速向球門方向帶球。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模式下,如果在本方半場(chǎng),則朝前方慢速帶球,如果在對(duì)方半場(chǎng),則朝球門快速帶球。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號(hào),則把球踢到左側(cè)邊線,如果是5號(hào),則把球踢到右側(cè)邊線,并把脖子方向轉(zhuǎn)向球;其他球員則向前帶球。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));}elsesoc=dribble(0,DRIBBLE_WITHBALL);(14)在playOn模式下,拿到球后,如果我是4號(hào),則傳球給7號(hào);否則的話,傳球給最近的隊(duì)友;到對(duì)方禁區(qū)后以最大速度射向空隙大的球門一側(cè)。if(WM->getAgentObjectType()==OBJECT_TEANMATE_4){soc=leadingPass(OBJECT_TEAMMATE_7,1.0);}elsesoc=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());elsesoc=kickTo(VecPosition(52.5,-6.0),SS->getBallSpeedMax());}(15)在playOn模式下,垂直帶球。{if(WM->getBallPos().getY()<=0)soc=dribble(90,DRIBBLE_WITHBALL);elsesoc=dribble(-90,DRIBBLE_WITHBALL);}(16)在playOn模式下,拿到球后帶球到達(dá)球場(chǎng)中心,然后傳給最近的球員。{AngDegang=(VecPosition(0,0)-posAgent).getDirection();soc=dribble(ang,DRIBBLE_WITHBALL);soc=leadingPass(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),1.0)}(17)在playOn模式下,10號(hào)帶球前進(jìn),然后5號(hào)跟著10號(hào)一起前進(jìn),兩球員在同一水平線上,且距離為5。{//把球給10號(hào),(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號(hào)球員與拿球的對(duì)方球員的距離始終為5。//180行if(WM->getAgentObjectType()==OBJECT_TEAMMATE_5){VecPositionpos(WM->getBallPos().getX()-5,WM->getBallPos().getY())soc=moveToPos(pos,20);}}(19)在playOn模式下,2號(hào)和4號(hào)一起去盯防對(duì)方拿球隊(duì)員//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號(hào)球員,在可踢球的狀態(tài)下,如果自身的x軸坐標(biāo)大于30,則直接朝著里對(duì)方球員遠(yuǎn)的球門點(diǎn)射門。 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函數(shù)(12)(21)在playOn模式下,拿球后傳球給更靠近對(duì)方球門的最近隊(duì)友。{soc=leadPass(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,WM->getPosOpponentGoal()),1.0)}(22)在playOn模式下,拿球后,搜索前方-30~30之間距離自己20米內(nèi)是否有隊(duì)友,如果有則傳給該隊(duì)友,否則自己帶球。Page209;(23).在playOn模式下,如果在我方半場(chǎng)拿到球,則向中場(chǎng)線以最大的速度踢,如果在敵方半場(chǎng)拿到球,則向敵方球門處以最大的速度踢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號(hào)拿到球,則令9號(hào)和10號(hào)同時(shí)沖至敵方球門處,在球門前,9號(hào)傳給10號(hào),由10號(hào)進(jìn)行射門{//把球給9號(hào),(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=leadingPass(OBJECT_TEAMMATE_10,1.0);}if(WM->getAgentObjectType()==OBJECT_TEANMATE_10){soc=kickTo(VecPosition(52.5,0),SS->getBallSpeedMax());}}//180行{if(WM->getAgentObjectType()==OBJECT_TEANMATE_10)soc=kickTo(VecPosition(52.5,0),SS->getBallSpeedMax());}(25).在playOn模式下,如果我是4號(hào)球員并且拿到了球,則傳給7號(hào)球員,同時(shí)7號(hào)球員再傳給9號(hào)球員,9號(hào)球員繼續(xù)以最大速度沖到球門處射門。if(WM->getPlayerNumber()==4&&WM->isBallKickable()) { soc=leadingPass(OBJECT_TEAMMATE_7,1); if(WM->getPlayerNumber()==7&&WM->isBallKickable()) soc=leadingPass(OBJECT_TEAMMATE_9,1); if(WM->getPlayerNumber()==9&&WM->isBallKickable()) soc=moveToPos(VecPosition(40,0),1); soc=ShootToGoalex(OBJECT_GOAL_L); ACT->putCommandInQueue(soc); ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); }(26)在playon模式下,求出y軸等于0的兩側(cè)的對(duì)方球員數(shù)量,將球傳向?qū)κ稚俚囊环剑⑶襵軸值最大的隊(duì)友。twopartRect*p1,*p2;ObjectTpret;p1->setRectanglePoints(WM->getGlobalPosition(OBJECT_FLAG_L_T),WM->getGlobalPosition(OBJECT_FLAG_R_0));p2->setRectanglePoints(WM->getGlobalPosition(OBJECT_FLAG_L_B),WM->getGlobalPosition(OBJECT_FLAG_R_0)); if(WM->getNrInSetInRectangle(OBJECT_SET_OPPONENTS,p1)>WM->getNrInSetInRectangle(OBJECT_SET_OPPONENTS,p2)) if(WM->getAgentGlobalPosition().getY()>0) if(WM->getAgentObjectType()==WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,OBJECT_LINE_R)) pret=WM->getAgentObjectType();(27)在playon模式下,如果自身7米范圍內(nèi)有兩個(gè)或兩個(gè)以上的對(duì)手的話,則傳球到x軸值最大的隊(duì)友。if(WM->isBallKickable()){ Circlecir(posAgent,7); intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir); if(num>=2){ ObjectTClosestG; ClosestG=WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,VecPosition(52.5,0)); soc=leadingPass(ClosestG,1); ACT->putCommandInQueue(soc); ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); }}(28)在playon模式下,求出己方的越位線,存在可以踢球的隊(duì)友的話,如果自身是10號(hào)。那么10球員垂直跑向越位線的x軸值-2米,y軸不變的點(diǎn)。(29)在playon的模式下,求出球運(yùn)動(dòng)方向的直線方程,并且求出自己到該直線的距離,如果距離小于4的話,那么就垂直跑向該條直線。(30)在playon的模式下,如果是自己可以踢球的狀態(tài)下,如果自身7米內(nèi)沒(méi)有對(duì)方球員的話,則快熟帶球,帶球方向是朝著點(diǎn)(53,0)方向。if(WM->isBallKickable()){ Circlecir(posAgent,7); intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir); if(num==0){ AngDegangDribble=(VecPosition(53.0,0)-posAgent).getDirection(); soc=dribble(angDribble,DRIBBLE_FAST); ACT->putCommandInQueue(soc); ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); }}(31)在playon的模式下,如果距離球最近的是我方隊(duì)友的話,如果我的x坐標(biāo)小于30的話,并且我是10號(hào),那么我跑向球的坐標(biāo)加上(0,10)的坐標(biāo)位置。(32)在playon的模式下,發(fā)現(xiàn)前方?jīng)]有隊(duì)友的時(shí)候,如果自身5米內(nèi)有兩個(gè)及兩個(gè)以上的對(duì)手的話,那么將球傳給最近的隊(duì)友。//其他比賽模式下,進(jìn)攻行為(8)33在本方角球模式下,如果自己是10號(hào)球員,則跑向角球點(diǎn),并開球(球可踢,則踢球給9號(hào));如果自己是9號(hào)球員,則跑向距離角球點(diǎn)附近(隨機(jī)選一點(diǎn)),準(zhǔn)備接應(yīng)球,其他球員跑本位點(diǎn).elseif(WM->isCornerKickUs()){ if(WM->getPlayerNumber()==10) soc=moveToPos(posBall,PS->getPlayerWhenToTurnAngle()); kickTo(OBJECT_TEAMMATE_9,1); if(WM->getPlayerNumber()==9) { soc=moveToPos(posBall+VecPosition(3,-3),PS->getPlayerWhenToTurnAngle()); } elseif(WM->getPlayerNumber()!=10||WM->getPlayerNumber()!=9) { soc=moveToPos(posAgent,PS->getPlayerWhenToTurnAngle()); } ACT->putCommandInQueue(soc);ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); returnsoc;}34在本方邊線球模式下,如果自己是距離球最近的隊(duì)員,跑向球;并開球(球在自己腳下則把球傳給最近的隊(duì)友)。elseif(WM->isOffsideUs()){ if((WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posBall))==WM->getAgentObjectType()) soc=moveToPos(posBall,1); if(WM->isBallKickable())soc=kickTo(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent),SS->getBallSpeedMax()); ACT->putCommandInQueue(soc);ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); returnsoc; }35在本方邊線球模式下,在本方半場(chǎng)左側(cè),則由2號(hào)去發(fā);如果是本方半場(chǎng)右側(cè),則由5號(hào)去發(fā);球在2號(hào)或者5號(hào)腳下,則踢向距離自己最近的隊(duì)友。elseif(WM->isOffsideUs()){ Circlecir(posBall,20); doubledist; ObjectTobj=WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,WM->getAgentObjectType(),&dist); VecPositionposTea=WM->getGlobalPosition(obj); if(WM->getBallPos().getY()>0) if(WM->getPlayerNumber()==2) { soc=moveToPos(posBall,PS->getPlayerWhenToTurnAngle()); } elseif(WM->getBallPos().getY()<0){ if(WM->getPlayerNumber()==5) { soc=moveToPos(posBall,PS->getPlayerWhenToTurnAngle()); } } if(WM->isBallKickable()&&(WM->getPlayerNumber()==2||WM->getPlayerNumber()==5)) soc=kickTo(posTea,SS->getBallSpeedMax()); ACT->putCommandInQueue(soc);ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); returnsoc; }36.在本方邊線球的模式下,如果我是距離第二近的隊(duì)友的話,那么我也跑朝著球的位置跑,直到距離球7米的范圍。elseif(WM->isOffsideUs()){Circlecir(posBall,20); doubledist; ObjectTobj=WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,WM->getAgentObjectType(),&dist); VecPositionposTea=WM->getGlobalPosition(obj); if((WM->getSecondClosestInSetTo(OBJECT_SET_TEAMMATES_NO_GOALIE,posBall))==WM->getAgentObjectType()) soc=moveToPos(posBall+VecPosition(-7,-7),1); ACT->putCommandInQueue(soc); ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); returnsoc; }37在本方邊線球的模式下,如果我是4號(hào)的話,并且距離球最近的隊(duì)友不是我,那么我將跑向球的坐標(biāo)加上(5,0)的位置上去。elseif(WM->isOffsideUs()){if(WM->getPlayerNumber()==4){ if((WM->getClosestInSetTo(OBJECT_SET_TEAMMATES_NO_GOALIE,posBall))!=WM->getAgentObjectType()) soc=moveToPos(posBall+VecPosition(5,0),1); ACT->putCommandInQueue(soc); ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); returnsoc; }38在本方邊線球的模式下,如果我是距離球第二近的隊(duì)友,那么我跑向距離球12米的范圍內(nèi),并且距離對(duì)方球門點(diǎn)(53,0)最近的點(diǎn)。39在本方邊線球的模式下,距離球最近的隊(duì)果我不是距離球第二近的隊(duì)友,那么我向自身向量(5,0)的方向跑去。elseif(WM->isOffsideUs()){ Circlecir(posBall,20); doubledist; ObjectTobj=WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,WM->getAgentObjectType(),&dist); VecPositionposTea=WM->getGlobalPosition(obj); if((WM->getClosestInSetTo(OBJECT_SET_TEAMMATES_NO_GOALIE,posBall))==WM->getAgentObjectType()) soc=moveToPos(posBall,1); elseif((WM->getSecondClosestInSetTo(OBJECT_SET_TEAMMATES,posBall))!=WM->getPlayerType()) soc=moveToPos(posAgent+VecPosition(5,0),1); ACT->putCommandInQueue(soc); returnsoc; }40在本方邊線球的模式下,距離球最近的隊(duì)友跑向球并開球,如果我不是距離球第二近的隊(duì)友,那么求出距離球第二近的隊(duì)友的坐標(biāo)加友跑向球并開球,如上(10,5)的點(diǎn)跑。如果該點(diǎn)在球場(chǎng)內(nèi),則跑向該點(diǎn)。/*elseif(WM->isOffsideUs()){ if((WM->getClosestInSetTo(OBJECT_SET_TEAMMATES_NO_GOALIE,posBall))==WM->getAgentObjectType())//璺戝悜鐞? soc=moveToPos(posBall,1); elseif((WM->getSecondClosestInSetTo(OBJECT_SET_TEAMMATES,posBall))!=WM->getPlayerType()) WM->getSecondClosestInSetTo(OBJECT_SET_TEAMMATES,posBall); soc=moveToPos(posAgent+VecPosition(5,0),1); ACT->putCommandInQueue(soc); ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); returnsoc; }//playOn模式下,防守行為(5)41在playOn模式下,如果對(duì)方10號(hào)拿球,如果我是2、3、4號(hào),則去盯防10號(hào)if(WM->getOppGoalieType()==OBJECT_OPPONENT_10) if(WM->getPlayerType()==OBJECT_TEAMMATE_2||WM->getPlayerType()==OBJECT_TEAMMATE_3||WM->getPlayerType()==OBJECT_TEAMMATE_4) { soc=mark(OBJECT_OPPONENT_10,0.0,MARK_BALL); ACT->putCommandInQueue(soc);ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc)); }}42在playOn模式下,如對(duì)方9號(hào)拿球,我方2、3、4號(hào)距離球最近的球員去盯防9號(hào),其他隊(duì)員盯防距離自己最近的對(duì)方球員ObjectTminToBall(ObjectTa,ObjectTb){ VecPositionva=WM->getGlobalPosition(a)-WM->getBallPosition(); VecPositionvb=WM->getGlobalPosition(b)-WM->getBallPosition(); if(va.getMagnitude()<vb.getMagnitude) retruna; else returnb;}if(WM->getClosestInSetTo(OBJECT_SET_OPPONENTS,WM->getBallPosition())==OBJECT_OPPONENT_9){ ObjectTminToBall=(OBJECT_TAEMMATE_2,minToBall(OBJECT_TEAMMATE_3,OBJECT_TEAMMATE_4)); if(WM->getAgentType()==minToBall) soc=mark(OBJECT_OPPONENTS_9); else { doubledistance; ObjectTclosestOpp=WM->getClosestRelativeInSet(OBJECT_SET_OPPONENTS,&distance); soc=mark(closestOpp); } ACT->putCommandInQueue(soc);ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL),soc);}43在playOn模式下,如果對(duì)方比我先接近球,則離球最近的隊(duì)員去盯球,其他球員定距離自己最近的對(duì)方球員.double*dDist1,*dDist2;WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,OBJECT_BALL,dDist1); WM->getClosestInSetTo(OBJECT_SET_OPPONENTS,OBJECT_BALL,dDist2);if((*dDist1)>(*dDist2)) { if(WM->getAgentObjectType()==WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,OBJECT_BALL)) soc=mark(OBJECT_BALL,5,MARK_GOAL); else soc=mark(WM->getClosestInSetTo(OBJECT_SET_OPPONENTS,WM->getPlayerNumber()),5,MARK_BISECTOR); ACT->putCommandInQueue(soc=searchBall());//ifballposunknown//執(zhí)行找球動(dòng)作!并放入命令隊(duì)列ACT->putCommandInQueue(alignNeckWithBody());//searchforit//同時(shí)把脖子隨身體一起轉(zhuǎn) }44在playOn模式下,如果對(duì)方11號(hào)拿到球,則7號(hào)球員從左邊去斷球,8號(hào)球員從右邊去斷球if(!WM->isBallKickable()){ if(WM->getPlayerType()==OBJECT_OPPONENT_11) if(WM->getPlayerNumber()==7) soc=moveToPos(WM->getGlobalPosition(OBJECT_OPPONENT_11)+VecPosition(0,-3),1); soc=intercept(true); if(WM->getPlayerNumber()==8) soc=moveToPos(WM->getGlobalPosition(OBJECT_OPPONENT_11)+VecPosition(0,3),1); soc=intercept(true); ACT->putCommandInQueue(soc); ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));}45在playOn模式下,防守模式下,我方6號(hào)球員始終跟著敵方9號(hào),我方7號(hào)始終跟著敵方10號(hào),8號(hào)球員始終跟著敵方11號(hào)球員if(WM->getPlayerNumber()==6) { VecPostionvOpp=WM->getGlobalPosition(OBJECT_OPPONENT_9); soc=moveToPos(vOpp);}if(WM->getPlayerNumber()==7) { VecPostionvOpp=WM->getGlobalPosition(OBJECT_OPPONENT_10); soc=moveToPos(vOpp);}if(WM->getPlayerNumber()==8) { VecPostionvOpp=WM->getGlobalPosition(OBJECT_OPPONENT_11); soc=moveToPos(vOpp);}ACT->putCommandInQueue(soc);ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL),soc);//其他比賽模式下,防守行為(5)46.在對(duì)方邊線球的模式下,如果我是4號(hào),那么我就跑向距離球最近的對(duì)方球員處。if(WM->offsidethem) if(WM->getPlayerNumber()==4) { ObjectToOpp=WM->getClosestInSetTo(OBJECT_SET_OPPONENTS,OBJECT_BALL); VecPositionvOPP

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論