⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.c

📁 RoboCup 2D 仿真组冠军源代码之1998年冠军队——CMUnited98源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	SightInfo++;	if ( !strncmp(SightInfo,Mem->MyTeamName,Mem->MyTeamNameLen) )	  player_side = Mem->MySide;	else{	  if ( Mem->TheirTeamName[0] == '\n' ){	    int a=0;	    while ( isalpha(*SightInfo) ) Mem->TheirTeamName[a++]=*SightInfo++;	  }	  player_side = Mem->TheirSide;	}	while ( *SightInfo != ' ' && *SightInfo != ')' ) SightInfo++; /* advance past team name */	if ( *SightInfo== ' ' ){             /* there's a number */	  player_number = get_int(&SightInfo);	}      }    } else    if ( *SightInfo=='b' || *SightInfo=='B' )      object_type = OBJ_Ball;    else      my_error("unknown object");    advance_to(')',&SightInfo);              /* advance to end of object */    /************************************/    ang = get_float(&SightInfo);    if ( *SightInfo != ')' ) {                  /* 'high' quality     */      view_qual = VQ_High;      dist = ang;      ang = get_float(&SightInfo);    }    else {      printf("%s",SightInfo-30);      view_qual = VQ_Low;    }    if ( view_qual != Mem->ViewQuality ) my_error("View quality %d correct?",view_qual);    if ( *SightInfo != ')' ){      distChng = get_float(&SightInfo);      dirChng  = get_float(&SightInfo);    }    if ( *SightInfo != ')' ){      if (object_type != OBJ_Player) my_error("Only players should have facedir");      facedir = get_float(&SightInfo);    }    if ( *SightInfo != ')' ) my_error("Should be done with object info here");    SightInfo++;                                /* ")" */    /************************************/    switch (object_type){    case OBJ_Marker:    case OBJ_Marker_Behind:      /* Want to save 2 closest for triangulation  */      /* don't want marker_behind unless necessary */      /* If it was a Marker_Behind and we don't know which one */      if ( marker == No_Marker ){	if ( object_type != OBJ_Marker_Behind ) my_error("Should know the marker");	break;      }      processThisMarker = FALSE;      if ( view_qual == VQ_Low ){               /* Low quality   */        /* DON'T BOTHER PROCESSING ANY??? I don't think it helps ... */	/* COULD process 2---then triangulate */	/*if ( closestMarkerDist > 0 ){ */	/*  closestMarkerDist = 0;  */                 /* Only process 1*/	/*  processThisMarker = TRUE; */	/*}*/      }      else{                                          /* high quality  */	if ( closestMarker == No_Marker || dist < closestMarkerDist){	  closestMarker = marker;	  closestMarkerDist = dist;	  processThisMarker = TRUE;	  Mem->ClosestMarker = marker;	}	/* Don't bother with marker motion info -- get it from sense_body and my angle 	if ( dirChng != NOCHNGINFO && dist < motionInfoDist ){	  motionInfoDist = dist;	  processThisMarker = TRUE;	  Mem->ClosestMotionMarker = marker;	}	*/      }      if ( processThisMarker ){	if ( view_qual == VQ_Low )              /* low quality   */	  Mem->SeeMarker(marker, ang, time);	else /* if (dirChng == NOCHNGINFO) */                  /* high quality  */	  Mem->SeeMarker(marker, dist, ang, time);   /* No motion info*/	/* else	  Mem->SeeMarker(marker, dist, ang, distChng, dirChng, time); */      }      break;    case OBJ_Line:      if ( *SightInfo != ')' )	/* There's another line coming.  Assuming lines happen	   last in the visual string and the closer line comes first */	;       else if ( view_qual == VQ_Low )           /* low quality   */	Mem->SeeLine(line, ang, time);      else                                           /* high quality  */	Mem->SeeLine(line, dist, ang, time);      break;    case OBJ_Ball:      if ( view_qual == VQ_Low )                /* low quality   */	Mem->SeeBall(ang, time);      else if ( dirChng == NOCHNGINFO )                   /* high quality  */	Mem->SeeBall(dist, ang, time);      else                                           /* know direction*/	Mem->SeeBall(dist, ang, distChng, dirChng, time);               break;    case OBJ_Player:      if ( !player_side ){                      /* Too far for team or num */	if ( view_qual == VQ_Low )                /* low quality   */	  Mem->SeePlayer(ang, time);	else if ( dirChng == NOCHNGINFO )                   /* high quality  */	  Mem->SeePlayer(dist, ang, time);	else                                           /* know direction*/	  my_error("Shouldn't know dirChng when the player's far");      }        else{	if ( !player_number ){                  /* Too far for number     */	  if ( view_qual == VQ_Low )                /* low quality   */	    Mem->SeePlayer(player_side, ang, time);	  else if ( dirChng == NOCHNGINFO )                   /* high quality  */	    Mem->SeePlayer(player_side, dist, ang, time);	  else                                           /* know direction*/	    my_error("Shouldn't know dirChng when the team member's far");	}	else{                                   /* Know side AND number   */	  if ( view_qual == VQ_Low )                /* low quality   */	    Mem->SeePlayer(player_side, player_number, ang, time);	  else if ( dirChng == NOCHNGINFO ){                  /* high quality  */	    printf("%s\n",SightInfo-30);	    my_error("Should know dirChng when know number");	    Mem->SeePlayer(player_side, player_number, dist, ang, time);	  }	  else                                           /* know direction*/	    Mem->SeePlayer(player_side, player_number, dist, ang, distChng, dirChng, facedir, time);	}      }    }  }}/****************************************************************************************/void Parse_Sound(Time time, char *SoundInfo){  if ( SoundInfo[1] == 'r' ){   /* Referee or Coach message */    SoundInfo += 9;             /* " referee " */    if ( islower(SoundInfo[0]) )      Parse_Referee_Sound(SoundInfo);  /* Coach messages start with capital letters or are numbers */    else      my_error("Not handling coach yet");      /* Parse_Coach_Sound  (time, SoundInfo); */    return;  }  #ifndef RELEASE_VERSION  Mem->ParsePlayerSound(SoundInfo, time); #endif    /* How to parse a sound from a player depends on the communication mechanism you use.   * Our communication mechanism is described in:   *   * First International Workshop on Collective Robotics (CRW'98)   * Communication in Domains with Unreliable, Single-Channel, Low-Bandwidth Communication.    * Peter Stone and Manuela Veloso   * Available on-line at http://www.cs.cmu.edu/~pstone/pstone-papers.html   */}/****************************************************************************************//****************************************************************************************//****************************************************************************************/void Parse_Referee_Sound(char *msg){  switch( msg[0] ){  case 'p': Mem->SetPlayMode(PM_Play_On); break;           /* play_on */  case 'k':     if ( msg[5] == 'i' ){                                  /* kick_in */      if ( msg[8] == Mem->MySide )	Mem->SetPlayMode(PM_My_Kick_In);      else if ( msg[8] == Mem->TheirSide )	Mem->SetPlayMode(PM_Their_Kick_In);      else 	my_error("kick_in_?");    }    else if ( msg[5] == 'o' ){                            /* kick_off */      if ( msg[9] == Mem->MySide )	Mem->SetPlayMode(PM_My_Kick_Off);      else if ( msg[9] == Mem->TheirSide )	Mem->SetPlayMode(PM_Their_Kick_Off);      else 	my_error("kick_off_?");    }    else      my_error("referee k..?");    break;  case 'g':     if ( msg[5] == 'k' ){                                 /* goal_kick */      if ( msg[10] == Mem->MySide )	Mem->SetPlayMode(PM_My_Goal_Kick);      else if ( msg[10] == Mem->TheirSide )	Mem->SetPlayMode(PM_Their_Goal_Kick);      else 	my_error("goal_kick_?");    }    else if ( msg[5] == 'e' ){                           /* goalie_catch_ball */      if ( msg[18] == Mem->MySide )	Mem->SetPlayMode(PM_My_Free_Kick);      else if ( msg[18] == Mem->TheirSide )	Mem->SetPlayMode(PM_Their_Free_Kick);      else	my_error("goalie_catch_ball_?");    }    else if ( msg[5] == Mem->MySide ){                    /* goal */      Mem->MyScore++;      //Mem->MyScore = get_int(&msg[7]);      Mem->KickOffMode = KO_Theirs;      Mem->SetPlayMode(PM_Before_Kick_Off);    }    else if ( msg[5] == Mem->TheirSide ){      Mem->TheirScore++;      //Mem->TheirScore = get_int(&msg[7]);      Mem->KickOffMode = KO_Mine;      Mem->SetPlayMode(PM_Before_Kick_Off);    }    else       my_error("referee g..?");    break;  case 'c':                                               /* corner_kick */    if ( msg[12] == Mem->MySide )      Mem->SetPlayMode(PM_My_Corner_Kick);    else if ( msg[12] == Mem->TheirSide )      Mem->SetPlayMode(PM_Their_Corner_Kick);    else       my_error("corner_kick_?");    break;  case 'd': Mem->SetPlayMode(PM_Drop_Ball); break;        /* drop_ball */      case 'o':                                               /* offside */        if ( msg[8] == Mem->MySide )      Mem->SetPlayMode(PM_Their_Offside_Kick);    else if ( msg[8] == Mem->TheirSide )      Mem->SetPlayMode(PM_My_Offside_Kick);    else       my_error("offside_?");    break;  case 'f':    if ( msg[5] == 'k' ){                                 /* free_kick */      if ( msg[10] == Mem->MySide )	Mem->SetPlayMode(PM_My_Free_Kick);      else if ( msg[10] == Mem->TheirSide )	Mem->SetPlayMode(PM_Their_Free_Kick);      else 	my_error("free_kick_?");    }    else if ( msg[5] == Mem->MySide )                     /* foul */      ;    else if ( msg[5] == Mem->TheirSide )      ;    else       my_error("referee f..?");    break;  case 'h':                                               /* half_time *///    Mem->WriteHalftimeStats("firstHalf");//    Mem->InitializeHalftimeStats();    Mem->SetPlayMode(PM_Half_Time);  /* play_mode to before_kick_off        */    if ( Mem->MySide == 'l' )      Mem->KickOffMode = KO_Theirs;    else       Mem->KickOffMode = KO_Mine;    break;               case 'b': Mem->SetPlayMode(PM_Before_Kick_Off); break;       /* before_kick_off */  case 't':     if ( msg[5] == 'u' ){                             /* time_up *///      Mem->WriteFullGameStats();//      Mem->WriteHalftimeStats("secondHalf");      Mem->SetPlayMode(PM_Time_Up);     }    else if ( msg[5] == 'o' )                             /* time_over */      {//	Mem->WriteFullGameStats();	break;      }    else if ( msg[5] == 'e' ){                            /* time_extended *///      Mem->WriteFullGameStats();//      Mem->WriteHalftimeStats("secondHalf");      Mem->SetPlayMode(PM_Extended_Time);      if ( Mem->MySide == 'l' )	Mem->KickOffMode = KO_Mine;      else 	Mem->KickOffMode = KO_Theirs;    }    else       my_error("referee t..?");    break;  default: my_error("Referee msg ????");  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -