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

📄 parse.c

📁 RoboCup 2D 仿真组冠军源代码之1998年冠军队——CMUnited98源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -*- Mode: C -*- *//* parse.C * CMUnited98 (soccer client for Robocup98) * Peter Stone <pstone@cs.cmu.edu> * Computer Science Department * Carnegie Mellon University * Copyright (C) 1998 Peter Stone * * CMUnited-98 was created by Peter Stone, Manuela Veloso, and Patrick Riley * * 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. *//* parse.C parses incoming messages from the server */#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(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 */    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);  int kicks  =   get_int(&SenseInfo);  int dashes =   get_int(&SenseInfo);  int turns  =   get_int(&SenseInfo);  int says   =   get_int(&SenseInfo);  Mem->SetMySensedInfo(stamina,effort,speed,kicks,dashes,turns,says,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;  MarkerType marker;  SideLine  line;  Vqual view_qual;  MarkerType closestMarker = No_Marker;  Bool processThisMarker;  float closestMarkerDist;  /* float motionInfoDist = 1000; */  while (*SightInfo != ')'){    dirChng = NOCHNGINFO;    facedir = 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 */ 

⌨️ 快捷键说明

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