亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? memaction.c

?? 卡內基梅隆大學99年機器人足球世界杯2D仿真組源代碼??▋然仿〈髮W在人工智能界的巨牛
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* -*- Mode: C++ -*- *//* MemAction.C * CMUnited99 (soccer client for Robocup99) * Peter Stone <pstone@cs.cmu.edu> * Computer Science Department * Carnegie Mellon University * Copyright (C) 1999 Peter Stone * * CMUnited-99 was created by Peter Stone, Patrick Riley, and Manuela Veloso * * You may copy and distribute this program freely as long as you retain this notice. * If you make any changes or have any comments we would appreciate a message. * For more information, please see http://www.cs.cmu.edu/~robosoccer/ */#include "MemAction.h"#ifdef DEBUG_OUTPUT#define DebugClear(x) #else#define DebugClear(x) #endifvoid ActionInfo::Initialize(){  Stored_Fastest_Teammate_Time = 0;  Stored_Fastest_Opponent_Time = 0;  for (int i = 1; i <= SP_team_size; i++) {    TeamIntInfo[i] = new PlayerInterceptInfo;    TeamIntInfo[i]->time = -1;    OppIntInfo[i] = new PlayerInterceptInfo;    OppIntInfo[i]->time = -1;  }  kick_in_progress = FALSE;  InterceptLookahead = LA_Default;  IntMinCyc = -1;  IntMinCycTime = -1;  HKTime = -1;  HKStep = -1;  HKStepNext = -1;  HKrot = TURN_CW;}/*****************************************************************************************//*****************************************************************************************//*****************************************************************************************//*****************************************************************************************//*****************************************************************************************//*****************************************************************************************/#ifdef DEBUG_OUTPUT#define DebugInt(x) #else#define DebugInt(x) #endif/* only used for this player */PlayerInterceptInfoActionInfo::CloseBallInterception(float max_pow, int max_lookahead,				  Vector vBallPos, Vector vBallVel){  Vector vNewPos;  PlayerInterceptInfo info;  float dash_dist = max_pow * SP_dash_power_rate;  info.dash_pow = max_pow;  info.lookahead = max_lookahead;  info.res = BI_None;      vBallPos += vBallVel;  vBallVel *= SP_ball_decay;  /* we need to figure out the right dash power so that the ball ends up right in     front of us. Like many things, this ends up as a LineCircleIntersect problem */  Vector vMyPred = MyPredictedPosition();  Ray    rDash(vMyPred, MyBodyAng());  Line   lDash   = LineFromRay(rDash);  Vector sol1, sol2;    int num_sol = LineCircleIntersect(lDash, SP_player_size + SP_ball_size + CP_collision_buffer,				    vBallPos, &sol1, &sol2);  if (num_sol >= 1) {    /* we'll make sure that the right answer is in sol1 */    if (num_sol == 2) {      /* we have to pick which point is better */      if (fabs(GetNormalizeAngleDeg((vBallPos - sol2).dir() - MyBodyAng())) < 90) {	sol1 = sol2; //sol2 is the right solution, put it in sol1      } else if (!(fabs(GetNormalizeAngleDeg((vBallPos-sol1).dir() - MyBodyAng())) < 90)) {	my_error("CloseBallInterception: 1 ahead, neither solution looks good %.2f %.2f",		 GetNormalizeAngleDeg((vBallPos - sol2).dir() - MyBodyAng()),		 GetNormalizeAngleDeg((vBallPos - sol1).dir() - MyBodyAng()));      }    }    /* now figure out the dash power based on that point */    float dash_pow = vMyPred.dist(sol1) / SP_dash_power_rate;    dash_pow = MinMax(SP_min_power, dash_pow, SP_max_power);    if (!rDash.InRightDir(sol1))      dash_pow = -dash_pow;    if (vBallPos.dist(MyPredictedPosition(1, dash_pow)) < SP_kickable_area) {      /* this works! */      info.res = BI_CanChase;      info.numCyc = 1;      info.dash_pow_to_use = dash_pow;      //this'll make go_to_point dash      info.pos = vMyPred + Polar2Vector(signf(dash_pow)*dash_dist, MyBodyAng());      LogAction5(70, "CloseBallInterception: One dash and we're there: %.2f to (%.2f, %.2f)",		 dash_pow, sol1.x, sol1.y);      return info;    }          }    vBallPos += vBallVel;  vBallVel *= SP_ball_decay;  //now look two cycles ahead  //try turn then dash  float targ_ang = (vBallPos - MyPredictedPosition(2)).dir();  if (fabs(targ_ang - MyBodyAng()) > CP_max_go_to_point_angle_err) {    vNewPos = MyPredictedPositionWithTurn(targ_ang - MyBodyAng(), 2, max_pow);    if (vNewPos.dist(vBallPos) < SP_kickable_area) {      info.res = BI_CanChase;      info.numCyc = 2;      info.dash_pow_to_use = max_pow;      //this'll make go_to_point turn      //info.pos = MyPos() + Polar2Vector(dash_dist, targ_ang);       info.pos = MyPredictedPosition() + Polar2Vector(dash_dist, targ_ang);       LogAction2(70, "CloseBallInterception: Turn then dash and we're there");      return info;    }  }  //try two dashes  vNewPos = MyPredictedPosition(2, max_pow);  if (vNewPos.dist(vBallPos) < SP_kickable_area) {    info.res = BI_CanChase;    info.numCyc = 2;    info.dash_pow_to_use = max_pow;    //this'll make go_to_point dash    //info.pos = MyPos() + Polar2Vector(2*dash_dist, MyBodyAng());     info.pos = MyPredictedPosition() + Polar2Vector(dash_dist, MyBodyAng());    LogAction2(70, "CloseBallInterception: Two dashes and we're there");    return info;  }  return info;}/*****************************************************************************************//* does not set time field *//* cyc inc is initially CP_intercept_step, but when an answer is found, we   then bring cyc back a step, and go up by ones */PlayerInterceptInfoActionInfo::ActiveCanGetThere(float max_pow, int max_lookahead,			   Vector vBallPos, Vector vBallVel,			   char side, Unum num,			   Vector vPlayerPos, Vector vPlayerVel,			   float fPlayerAng, int PlayerAngValid,			   bool IsThisMe){  float at_point_buffer = 1;  PlayerInterceptInfo info;  //Vector vPredPlayer = vPlayerPos + vPlayerVel;  Vector vPredPlayer = vPlayerPos +    vPlayerVel * (SumInfGeomSeries(vPlayerVel.mod(), SP_player_decay));  Vector vOldBallPos, vOldBallVel;  float turn_angle;  int cyc;  int cyc_inc = (IsThisMe ? CP_my_intercept_step : CP_intercept_step);   int max_cyc = (max_lookahead + cyc_inc - 1);    max_cyc -= (max_cyc % cyc_inc);   /* max_cyc is so that we don't miss an interception if CP_intercept_step is not     1. For example, if CP_intercept_step is 5, max_look is 14, and we can     intercept in 13, we would return no intercept if we just used max_lookahead */    DebugInt(printf(" ACGT: BallPos.vel.mod: %f\n", vBallVel.mod() ));  info.dash_pow_to_use = max_pow;  NormalizeAngleDeg(&fPlayerAng);  /* we want to aim a little ahead of the ball, so advance it a little */  for (int i=0; i < CP_intercept_aim_ahead; i++) {    vBallPos += vBallVel;    vBallVel *= SP_ball_decay;  }  if (IsThisMe) LogAction4(140, "ActiveBallIntercept: %d %d", (int)max_pow, max_lookahead);    for (cyc=0; cyc<=max_cyc; cyc += cyc_inc) {    if (!IsPointInBounds(vBallPos,-3)) {  /* expand the field by 3 meters so we don't give up to soon */      DebugInt(printf("The ball will go out of bounds before we can get it\n"));      break;    }        /* decide if we need to turn to ball */    float ball_ang = (vBallPos - vPredPlayer).dir();    Vector vEndSpot;    /* SMURF - we should probably aim for ball 1 cycle ahead or something       like that */    //DebugInt(printf(" angle to exp ball pos: %f\n", AngleTo(vBallPos)));    turn_angle = ball_ang - fPlayerAng;    if (fabs(turn_angle) < CP_max_go_to_point_angle_err)      turn_angle = 0.0;          if (IsThisMe) {      vEndSpot = MyPredictedPositionWithTurn(turn_angle, cyc, max_pow,(turn_angle != 0.0));    } else {      int run_cyc = cyc;      if (PlayerAngValid) {	if (turn_angle != 0.0)	  run_cyc--;	run_cyc = Max(0, run_cyc);      }      Vector PlayerDash =	Polar2Vector(max_pow*SP_dash_power_rate, ball_ang);      vEndSpot =	PlayerPredictedPosition(side, num, run_cyc, PlayerDash);    }        float dist_to_ball_after = (vBallPos - vEndSpot).mod();    /* if we can make it there */    /* SMURF- is this too lenient? */    if (dist_to_ball_after <= at_point_buffer ||         (vEndSpot - vPredPlayer).mod() > (vBallPos - vPredPlayer).mod() + SP_kickable_area) {      /* we can get to the ball! */      /* OR we travelled far enough, but somehow missed the ball,	 return sucess */      if (dist_to_ball_after <= at_point_buffer) {	if (IsThisMe) LogAction4(100, "Found a ball interception by being close (%.2f, %.2f)",				vBallPos.x, vBallPos.y);	info.numCyc = cyc;      } else {		if (IsThisMe) LogAction4(100, "Found a ball interception by going far (%.2f, %.2f)",				vBallPos.x, vBallPos.y);	info.numCyc = cyc;	//vBallPos += vBallVel; /* advance one spot for that turn*/      }                  if (cyc_inc > 1 && cyc != 0) {	/* we want the best answer- go back and go up by ones */	if (IsThisMe)	  LogAction2(100, "Found a ball interception, but goign back for accuracy");		DebugInt(printf("Found answer, but going back for accuracy: %d\n", cyc));	cyc -= cyc_inc;	vBallPos = vOldBallPos;	vBallVel = vOldBallVel;	cyc_inc = 1;	max_cyc = max_lookahead; // don;t need to go above this anymore      } else {	if (info.numCyc > max_lookahead) {	  info.res = BI_Failure;	} else {	  info.res = BI_CanChase;	  info.pos = vBallPos;	}		return info;      }          }        /* update ball position estimate */    vOldBallPos = vBallPos;    vOldBallVel = vBallVel;    for (int i=0; i < cyc_inc; i++) {      vBallPos += vBallVel;      vBallVel *= SP_ball_decay;    }            } /* cycle loop */  info.res = BI_Failure; // can't make it to ball before max_lookahead  return info;}/*****************************************************************************************/void ActionInfo::BallIntercept_active(float max_pow_to_use, int max_lookahead,				   char PlayerSide, Unum PlayerNum,				   PlayerInterceptInfo* pInfo){  Vector PlayerPos;  Vector PlayerVel;  float PlayerAng;  int AngValid = FALSE;  Vector BallVel;  pInfo->res = BI_None;  if (!BallPositionValid()) {    my_error("BallIntercept_active: Can't get to ball if I don;t know where it is");    pInfo->res = BI_Invalid;    return;  }    if (!PlayerPositionValid(PlayerSide, PlayerNum)) {    my_error("BallIntercept_active: Can't give an answer if I don't know where player is");    pInfo->res = BI_Invalid;    return;  }  PlayerPos = PlayerAbsolutePosition(PlayerSide, PlayerNum);  //DebugInt(cout << "PlayerPos: " << PlayerPos << endl);    if (PlayerVelocityValid(PlayerSide, PlayerNum)) {    PlayerVel = PlayerAbsoluteVelocity(PlayerSide, PlayerNum);  } else {        PlayerVel = Vector(0,0);  }    if (PlayerBodyAngleValid(PlayerSide, PlayerNum)) {    AngValid = TRUE;    PlayerAng = PlayerAbsoluteBodyAngle(PlayerSide, PlayerNum);  } else    PlayerAng = 0;      if ((PlayerPos - BallAbsolutePosition()).mod() <      SP_kickable_area) {    pInfo->res = BI_ReadyToKick;    pInfo->numCyc = 0;    pInfo->pos = PlayerPos;    return;  }  if (BallVelocityValid())    BallVel = BallAbsoluteVelocity();  else    BallVel = Vector(0,0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜国产日韩另类美女| 在线观看91精品国产入口| 丁香婷婷综合色啪| 91麻豆精品国产91久久久久| 亚洲国产精品ⅴa在线观看| 水蜜桃久久夜色精品一区的特点| 国产麻豆精品在线| 欧美一区二区三区色| 亚洲天堂精品在线观看| 欧美日韩精品免费| 亚洲美腿欧美偷拍| www.欧美.com| 国产欧美一区二区精品性色超碰| 日韩激情av在线| 欧美午夜理伦三级在线观看| 国产精品二三区| 成人影视亚洲图片在线| 26uuu国产一区二区三区 | 在线一区二区三区| 日本一区二区三区视频视频| 久久草av在线| 欧美zozozo| 免费观看一级欧美片| 欧美日韩精品一区二区在线播放| 亚洲老妇xxxxxx| 色菇凉天天综合网| 亚洲美女屁股眼交| 99精品1区2区| 亚洲乱码国产乱码精品精98午夜| 不卡的av在线| 亚洲日本丝袜连裤袜办公室| 不卡的av网站| 亚洲另类中文字| 欧美日韩在线播放三区四区| 一区二区三区加勒比av| 欧美中文字幕一区| 日本三级亚洲精品| 日韩午夜av一区| 黑人精品欧美一区二区蜜桃| 欧美本精品男人aⅴ天堂| 国产自产2019最新不卡| 久久久久国产一区二区三区四区| 激情图片小说一区| 中文字幕的久久| 欧美在线综合视频| 奇米一区二区三区| 国产亚洲午夜高清国产拍精品| 国产成人久久精品77777最新版本| 国产精品情趣视频| 91网站在线观看视频| 午夜伦欧美伦电影理论片| 日韩欧美在线网站| 成人国产精品免费观看视频| 亚洲图片你懂的| 欧美精品少妇一区二区三区| 美女视频黄a大片欧美| 国产午夜精品福利| 欧美少妇bbb| 精彩视频一区二区| 亚洲欧美影音先锋| 在线成人av影院| 风流少妇一区二区| 亚洲图片欧美一区| 国产亚洲欧洲997久久综合| 色激情天天射综合网| 极品瑜伽女神91| 亚洲综合在线免费观看| 日韩欧美一级二级三级| 波多野结衣精品在线| 日本一道高清亚洲日美韩| 国产精品久久免费看| 7777精品伊人久久久大香线蕉的| 国产一区二区h| 亚洲成a人片在线观看中文| www精品美女久久久tv| 色婷婷av一区二区三区大白胸| 免费精品99久久国产综合精品| 国产精品成人免费在线| 日韩亚洲国产中文字幕欧美| 91啪在线观看| 国产精品一级片在线观看| 亚洲一区免费观看| 中文字幕在线视频一区| 日韩欧美一二三| 色中色一区二区| 国内精品久久久久影院薰衣草| 亚洲精品免费播放| 国产三级欧美三级日产三级99| 亚洲色图都市小说| 久久久久久久综合日本| 欧美一区二区高清| 欧美性猛交一区二区三区精品| 国产精品99久久久久久宅男| 免费精品99久久国产综合精品| 一区二区视频在线看| 亚洲国产精品av| 久久蜜桃香蕉精品一区二区三区| 777奇米成人网| 欧美日韩高清影院| 色哟哟国产精品免费观看| 成人av网站免费| 东方欧美亚洲色图在线| 国产乱国产乱300精品| 麻豆91精品视频| 日本欧美一区二区| 日日嗨av一区二区三区四区| 亚洲高清免费在线| 亚洲韩国一区二区三区| 亚洲另类中文字| 一区二区三区四区不卡在线 | 青娱乐精品视频在线| 亚洲成av人**亚洲成av**| 亚洲激情图片qvod| 一区二区三区四区国产精品| 悠悠色在线精品| 亚洲五月六月丁香激情| 亚洲永久免费视频| 亚洲一区二区精品久久av| 亚洲人被黑人高潮完整版| 国产夫妻精品视频| 成人免费毛片aaaaa**| 国产成人免费在线| 成人激情视频网站| 91免费看`日韩一区二区| 在线亚洲欧美专区二区| 欧美三级一区二区| 日韩精品中文字幕一区二区三区| 91精品国产品国语在线不卡| 日韩欧美一级二级| 国产女人水真多18毛片18精品视频| 久久免费偷拍视频| 成人欧美一区二区三区| 亚洲第一福利视频在线| 麻豆精品视频在线| 成人午夜视频在线| 欧美天堂亚洲电影院在线播放| 欧美日韩一区 二区 三区 久久精品| 欧美日韩国产美女| 久久久精品一品道一区| 中文字幕一区二| 亚洲午夜久久久久久久久电影院| 亚洲韩国一区二区三区| 狠狠久久亚洲欧美| 不卡的av电影| 678五月天丁香亚洲综合网| 欧美成人精品福利| 国产精品久久久久精k8 | 国产成人精品1024| 日本福利一区二区| 日韩免费在线观看| 国产精品久久免费看| 亚洲国产精品视频| 国产成人av在线影院| 欧美午夜寂寞影院| 久久久久99精品国产片| 亚洲午夜电影在线观看| 国产a级毛片一区| 欧美久久一二区| 综合色天天鬼久久鬼色| 九一九一国产精品| 色av成人天堂桃色av| 精品国产电影一区二区| 亚洲免费av网站| 国产成人精品影视| 欧美一区二区日韩一区二区| 国产精品久久久久久久久晋中 | 亚洲一区二区在线免费看| 狠狠狠色丁香婷婷综合久久五月| 一本一本大道香蕉久在线精品 | 91精品久久久久久久99蜜桃| 国产欧美日韩视频在线观看| 亚洲成av人**亚洲成av**| 成人av电影在线网| 精品粉嫩aⅴ一区二区三区四区| 亚洲精品va在线观看| 国产精品主播直播| 91精品国产高清一区二区三区| 亚洲图片激情小说| 国产91精品免费| 精品乱人伦小说| 日韩精品一级二级| 在线观看国产精品网站| 亚洲天堂a在线| 国产成人精品aa毛片| 久久夜色精品国产噜噜av | 亚洲精品国产精华液| 国产精品456露脸| 精品国产精品网麻豆系列| 日产精品久久久久久久性色| 欧美影院精品一区| 一区二区三区四区精品在线视频| 99re66热这里只有精品3直播| 国产蜜臀av在线一区二区三区| 久久精品免费看| 日韩一区二区三区电影| 久久精品国产精品亚洲红杏| 欧美一区二区三区视频在线观看| 天天影视涩香欲综合网 | 日av在线不卡| 日韩欧美激情在线|