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

📄 parse.c

📁 1999年卡耐基梅陇大学的2D仿真源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -*- Mode: C++ -*- *//* parse.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 "client.h"#include "utils.h"void Parse_Sight(Time time, char *SightInfo);void Parse_Sense(Time time, char *SenseInfo);void Parse_Sound(Time time, char *SoundInfo);void Parse_Referee_Sound(char *RefereeSound);void Parse_Trainer_Sound(char *msg);void Parse_My_Coach_Sound(Time time, char *msg);void Parse_Their_Coach_Sound(Time time, char *msg);/****************************************************************************************//****************************************************************************************//****************************************************************************************/void Parse(char *SensoryInfo){  SenseType sense_type;  int     time;  switch ( SensoryInfo[3] ){              case 'e': sense_type = See_Msg;   break; /* see   */  case 'n': sense_type = Sense_Msg; break; /* sense */  case 'a': sense_type = Hear_Msg;  break; /* hear  */  default:  my_error("Sent an illegal message"); return;  }  time = get_int(&SensoryInfo);         /* %d    */  Time tm = Mem->update_time(time);  switch ( sense_type ){  case See_Msg:       if ( !Mem->LastActionOpTime ) break;   /* Don't parse until I've started counting time   */    if ( tm == Mem->LastSightTime ) break; /* Don't parse a second sight from the same cycle */    if ( Mem->NewSight == TRUE ){      Mem->ClearSeenInfo();      Mem->LogAction2(190,"Sight from last cycle lying around -- clearing it");    }    Parse_Sight(tm, SensoryInfo);     Mem->LastSightInterval = tm - Mem->LastSightTime;    Mem->LastSightTime = tm;    Mem->NewSight = TRUE;    break;  case Sense_Msg:     Parse_Sense(tm, SensoryInfo);          Mem->LastSenseTime = tm;    break;  case Hear_Msg:      if ( !Mem->LastActionOpTime ) break; /* Don't parse until I've started counting time */    Parse_Sound(tm, SensoryInfo);     Mem->LastSoundTime = tm;    break;  }  Mem->LastSenseType = sense_type;}/****************************************************************************************//****************************************************************************************//****************************************************************************************/void Parse_Sense(Time time, char *SenseInfo){  get_word(&SenseInfo);    SenseInfo += 10;       /* "view_mode " */  switch ( SenseInfo[0] ){  case 'h': Mem->ViewQuality = VQ_High; break;  /* high */  case 'l': Mem->ViewQuality = VQ_Low;  break;  /* low  */  default:  my_error("Unknown view quality");  }  Mem->LastViewWidth = Mem->ViewWidth;  Mem->ViewWidthTime = time;  get_next_word(&SenseInfo);    switch ( SenseInfo[1] ){  case 'o': Mem->ViewWidth = VW_Normal; break;  /* normal */  case 'a': Mem->ViewWidth = VW_Narrow; break;  /* narrow */  case 'i': Mem->ViewWidth = VW_Wide;   break;  /* wide   */  default:  my_error("Unknown view quality");  }     float stamina = get_float(&SenseInfo);  float effort  = get_float(&SenseInfo);  float speed   = get_float(&SenseInfo);  float head_angle = get_float(&SenseInfo);  int kicks  =   get_int(&SenseInfo);  int dashes =   get_int(&SenseInfo);  int turns  =   get_int(&SenseInfo);  int says   =   get_int(&SenseInfo);  int turn_necks   =   get_int(&SenseInfo);  Mem->SetMySensedInfo(stamina,effort,speed,head_angle,kicks,dashes,turns,says,turn_necks,time);}/****************************************************************************************/#define NOCHNGINFO -500#define NOFACEINFO -500void Parse_Sight(Time time, char *SightInfo){  float dist, ang;  float dirChng;   float distChng;  ObjType object_type;    char player_side;  Unum player_number;  float facedir;  float neckdir;  MarkerType marker;  SideLine  line;  Vqual view_qual;  MarkerType closestMarker = No_Marker;  Bool processThisMarker;  float closestMarkerDist;  /* float motionInfoDist = 1000; */  while (*SightInfo != ')'){    dirChng = NOCHNGINFO;    facedir = NOFACEINFO;    neckdir = NOFACEINFO;    player_number = player_side = 0;    get_word(&SightInfo);            /* " ((" */    if ( *SightInfo=='g' ){      object_type = OBJ_Marker;      SightInfo+=5;          /* "goal " */      if ( *SightInfo=='r' )         marker = Goal_R; else      if ( *SightInfo=='l' )         marker = Goal_L; else      my_error("goal ?");    } else    if ( *SightInfo=='G' ){      object_type = OBJ_Marker_Behind;  marker = Mem->ClosestGoal();      } else    if ( *SightInfo=='f' ){      object_type = OBJ_Marker;      SightInfo+=5;          /* "flag " */      if ( *SightInfo=='r' ){	SightInfo+=2;	if ( *SightInfo=='0' )       marker = Flag_R0;   else	if ( *SightInfo=='b' ){	  SightInfo+=1;	  if ( *SightInfo==')' )     marker = Flag_RB; 	  else{	    SightInfo+=1;	    if ( *SightInfo=='1' )   marker = Flag_RB10; else	    if ( *SightInfo=='2' )   marker = Flag_RB20; else	    if ( *SightInfo=='3' )   marker = Flag_RB30; else	    my_error("flag r b ?");	  }  	} else	if ( *SightInfo=='t' ){	  SightInfo+=1;	  if ( *SightInfo==')' )     marker = Flag_RT; 	  else{	    SightInfo+=1;	    if ( *SightInfo=='1' )   marker = Flag_RT10; else	    if ( *SightInfo=='2' )   marker = Flag_RT20; else	    if ( *SightInfo=='3' )   marker = Flag_RT30; else	    my_error("flag r t ?");	  }  	} else	my_error("flag r ?");      } else      if ( *SightInfo=='l' ){	SightInfo+=2;	if ( *SightInfo=='0' )       marker = Flag_L0;   else	if ( *SightInfo=='b' ){	  SightInfo+=1;	  if ( *SightInfo==')' )     marker = Flag_LB; 	  else{	    SightInfo+=1;	    if ( *SightInfo=='1' )   marker = Flag_LB10; else	    if ( *SightInfo=='2' )   marker = Flag_LB20; else	    if ( *SightInfo=='3' )   marker = Flag_LB30; else	    my_error("flag l b ?");	  }  	} else	if ( *SightInfo=='t' ){	  SightInfo+=1;	  if ( *SightInfo==')' )     marker = Flag_LT; 	  else{	    SightInfo+=1;	    if ( *SightInfo=='1' )   marker = Flag_LT10; else	    if ( *SightInfo=='2' )   marker = Flag_LT20; else	    if ( *SightInfo=='3' )   marker = Flag_LT30; else	    my_error("flag l t ?");	  }  	} else	my_error("flag l ?");      } else      if ( *SightInfo=='t' ){	SightInfo+=2;	if ( *SightInfo=='0' )       marker = Flag_T0;   else	if ( *SightInfo=='l' ){	  SightInfo+=2;	  if ( *SightInfo=='1' )     marker = Flag_TL10; else	  if ( *SightInfo=='2' )     marker = Flag_TL20; else	  if ( *SightInfo=='3' )     marker = Flag_TL30; else	  if ( *SightInfo=='4' )     marker = Flag_TL40; else	  if ( *SightInfo=='5' )     marker = Flag_TL50; else	  my_error("flag t l ?");	} else	if ( *SightInfo=='r' ){	  SightInfo+=2;	  if ( *SightInfo=='1' )     marker = Flag_TR10; else	  if ( *SightInfo=='2' )     marker = Flag_TR20; else	  if ( *SightInfo=='3' )     marker = Flag_TR30; else	  if ( *SightInfo=='4' )     marker = Flag_TR40; else	  if ( *SightInfo=='5' )     marker = Flag_TR50; else	  my_error("flag t r ?");	} else	my_error("flag t ?");      } else      if ( *SightInfo=='b' ){	SightInfo+=2;	if ( *SightInfo=='0' )       marker = Flag_B0;   else	if ( *SightInfo=='l' ){	  SightInfo+=2;	  if ( *SightInfo=='1' )     marker = Flag_BL10; else	  if ( *SightInfo=='2' )     marker = Flag_BL20; else	  if ( *SightInfo=='3' )     marker = Flag_BL30; else	  if ( *SightInfo=='4' )     marker = Flag_BL40; else	  if ( *SightInfo=='5' )     marker = Flag_BL50; else	  my_error("flag b l ?");	} else	if ( *SightInfo=='r' ){	  SightInfo+=2;	  if ( *SightInfo=='1' )     marker = Flag_BR10; else	  if ( *SightInfo=='2' )     marker = Flag_BR20; else	  if ( *SightInfo=='3' )     marker = Flag_BR30; else	  if ( *SightInfo=='4' )     marker = Flag_BR40; else	  if ( *SightInfo=='5' )     marker = Flag_BR50; else	  my_error("flag b r ?");	} else	my_error("flag b ?");      } else      if ( *SightInfo=='c' ){	SightInfo+=1;	if ( *SightInfo==')' )       marker = Flag_C;	else{	  SightInfo+=1;	  if ( *SightInfo=='b' )     marker = Flag_CB; else	  if ( *SightInfo=='t' )     marker = Flag_CT; else          my_error("flag c ?");	}      } else      if ( *SightInfo=='p' ){	SightInfo+=2;	if ( *SightInfo=='r' ){	  SightInfo+=2;	  if ( *SightInfo=='t')      marker = Flag_PRT; else	  if ( *SightInfo=='c')      marker = Flag_PRC; else	  if ( *SightInfo=='b')      marker = Flag_PRB; else	    	  my_error("flag p r ?");	} else	if ( *SightInfo=='l' ){	  SightInfo+=2;	  if ( *SightInfo=='t')      marker = Flag_PLT; else	  if ( *SightInfo=='c')      marker = Flag_PLC; else	  if ( *SightInfo=='b')      marker = Flag_PLB; else	    	  my_error("flag p l ?");	} else	my_error("flag p ?");      } else      if ( *SightInfo=='g' ){	SightInfo+=2;	if ( *SightInfo=='l' ){	  SightInfo+=2;	  if ( *SightInfo=='t' )     marker = Flag_GLT; else	  if ( *SightInfo=='b' )     marker = Flag_GLB; else	  my_error("flag g l ?");	} else	if ( *SightInfo=='r' ){	  SightInfo+=2;	  if ( *SightInfo=='t' )     marker = Flag_GRT; else	  if ( *SightInfo=='b' )     marker = Flag_GRB; else	  my_error("flag g r ?");	} else	my_error("flag g ?");      } else      my_error("flag ?");    } else    if ( *SightInfo=='F' ){      object_type = OBJ_Marker_Behind;                                     marker = Mem->ClosestFlagTo(); /* could be No_Marker */    } else    if ( *SightInfo=='l' ){      object_type = OBJ_Line;      SightInfo+=5;          /* "line " */      if ( *SightInfo=='r' )         line   = SL_Right;  else      if ( *SightInfo=='l' )         line   = SL_Left;   else      if ( *SightInfo=='t' )         line   = SL_Top;    else      if ( *SightInfo=='b' )         line   = SL_Bottom; else      my_error("line ?");    } else    if ( *SightInfo=='p' || *SightInfo=='P' ){      object_type = OBJ_Player;      SightInfo+=6;                          /* "player" */      if ( *SightInfo == ' ' ){              /* there's a team */ 	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;	}

⌨️ 快捷键说明

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