在机器人足球比赛中,server 和球员 client 之间通过发送字符串来进行信息交互,其
中 server 要把某球员的听觉和视觉信息发送给该球员,信息的格式如下所示:
(hear Time Sender Message) (see Time ObjInfo ObjInfo …)
其中
(hear Time Sender Message)的具体含义如下:
➢ Time:前的仿真周期。
➢ Sender
➢ 如果是其他球员发送的消息,那么是发送者的相当方向(Direction) ➢ self:发送者是自己本人。
➢ referee:裁判是发送者。
➢ online_coach_left 或者 online_coach_ringt:发送者是在线教练。
➢ Message:消息内容。
(see Time ObjInfo ObjInfo …)的具体含义如下:
➢ Time:当前时间。
➢ ObjInfo 表示了可视对象的信息。其格式为:
(ObjName Direction Distance DirChng DistChng BodyDir HeadDir) ¡ ObjName = (player Teamname Unum) ➢ |(goal Side) ➢ |(ball) ➢ |(flag c) ➢ |(flag [ l | c | r] [ t | b ]) ➢ |(flag p [ l | r] [ t | c | b ]) ➢ |(flag [ t | b] [ l | r ] [10 | 20 | 30 | 40 |50 ]) ➢ |(flag [ l | r] [ t | b ] [10 | 20 | 30 ]) ➢ |(flag [ l | r | t | b ] 0) ➢ |(line [ l | r | t | b ]) ¡ Direction,Distance 表示目标的相对距离和相对方向
¡ DirChng 和 DistChng 分别表示目标距离和方向的相对变化,如果是固
定物体(球和球员以外的所有对象)则没有改项值
¡ BodyDir 和 HeadDir,分别是被观察球员相对观察者的身体和头部的
相对角度,只有是球队对象才有这一项值。
要求:编写程序解析球员所看到和听到的信息。
示例:(hear 1022 -30 passto(23,24))(see 1022 ((ball) -20 20 1 -2) ((player hfut1 2) 45 23 0.5 1 22
40 ) ((goal r) 12 20) ((Line r) -30))
输出:
在 1022 周期 hear 从 -30 方向 听到了 passto(23,24); 在 1022 周期 see Ball 距离我的 Direction 是 -20, Distance 是 20,DistChng 是 1,DirChng
是-2;player hfut 2 距离我的 Direction 是 45, Distance 是 23,DistChng 是 0.5,DirChng 是 1,它的 BodyDir 是 22 和 HeadDir 是 44;goal r 距离我的 Direction 是 12,Distance 是 20。
Line r 和我的角度是-30 度
一些参考建议:
场上对象: (f r b 10)表示场上某个点,具体见教材 28 页,教材上写的是(flag r b 10),
大家写程序的时候以 f 为准。
本示例中左右 2 边的名称分别为 hfut1 和 hfut2, 大家写程序的时候 hfut1 的球员信
息存储在在队友里面,hfut2 存储在对手里面。