📄 parse.c
字号:
/* -*- 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 + -