足球机器人第一次作业:编写程序解析球员所看到和听到的信息。

足球机器人技术

*****题目: 在机器人足球比赛中,server和球员client之间通过发送字符串来进行信息交互,其中server要把某球员的听觉和视觉信息发送给该球员,信息的格式如下所示:
(hear Time Sender Message)
(see Time ObjInfo ObjInfo …)

要求:编写程序解析球员所看到和听到的信息。
示**例:
(hear 1022 -30 passto(23,24))(see 1022 ((ball) 20 -20 1 -2) ((player hfut1
2) 23 45 0.5 1 22 40 ) ((goal r) 12 20))
输出:*
在1022周期 hear 从 -30 方向 听到了 passto(23,24);
在1022周期 see Ball 距离我的 Distance 是 20, Direction是 -20,DistChng是1,DirChng是-2;player hfut 2距离我的Distance 是 23, Direction是 45,DistChng是0.5,DirChng是1,它的BodyDir是 22和HeadDir是 44;goal r 距离我的Distance 是 12, Direction是 20。

由于技术有限,我才用了粗暴地解决方法,即想办法将所有数据都放入一个数组中,在逐一处理;

首先要处理传来的信息,由于所给的信息(hear Time Sender Message)(see Time ObjInfo ObjInfo …)中包含了括号和空格,所以我们要想办法去掉,我的方法是将括号全部替换成逗号,再将所有的逗号和空格,再用用split函数将根据逗号和括号进行切片

 Scanner in = new Scanner(System.in); 
String str=in.nextLine(); 
String strafter2=str.replaceAll("\\(|\\)", "\\,"); 
String[] strafter=strafter2.split("\\s+|\\,");

每个信息的位置逐一进行处理,以see为例
see

如果 主函数中 strafter[y].equals(“see”) 说明接下来要处理的是see的信息
接下来strafter[y+1]就是周期,做法就是打印周期
在接下来,strafer[y+2]就是各种物体的信息,对于不同的物体,由于Distance , Direction ,DistChng,DirChng是不一样的,所以分别处理,比如,对球来说,它的信息中包含了Distance , Direction ,DistChng,DirChng,所以:

public void ball(String []strafter,int i){
i=i+2; //表示 strafer[i+2]
System.out.print(strafter[i]);
double []data = new double[4];
for(int y=0;y<4;i++,y++)
{
data[y]=Double.parseDouble(strafter[i]); //将字符串化成浮点数
} 
Distance=data[0]; 
Direction=data[1];
DistChng = data[2];
DirCng =data[3];
System.out.println( " Ball 距离我的 Distance 是 "+Distance+" Direction是"+Direction+" DistChng是"+DirChng+" DirChng是"+DirChng)}


对每种物体都进行处理

后,即可粗暴地读取数据并展示

import java.awt.Robot;
import java.io.ObjectInputStream.GetField;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.swing.text.StyledEditorKit.ForegroundAction;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import javax.xml.stream.StreamFilter;
import
javax.xml.transform.sax.SAXTransformerFactory;

public class robot {

    double Distance, Direction, DistChng, DirChng,BodyDir, HeadDir;
   public void see(String[]strafter,int i ){
    
     String time = strafter[i+1];
    System.out.print("在"+time+"周期"+" see ");
    
   }
   public void ball(String []strafter,int i){
   
    i=i+2;
    System.out.print(strafter[i]);
    double []data = new double[4];
   for(int y=0;y<4;i++,y++)
      {
      data[y]=Double.parseDouble(strafter[i]);
      } 
      Distance=data[0];
      Direction=data[1];
      DistChng = data[2];
      DirChng =data[3];
   System.out.println(  " Ball 距离我的 Distance 是 "+Distance+" Direction是"+Direction+" DistChng是"+DirChng+"  DirChng是"+DirChng)}
   public void Player(String []strafter,int i ){
   String []playerName =new String[2];
    int x;
    
    x=i+4;
    double []data = new double[6];
   for(int y=0;y<6;x++,y++)
      {
      data[y]=Double.parseDouble(strafter[x]);
      } 
   
      Distance=data[0];
      Direction=data[1];
      DistChng = data[2];
      DirChng =data[3];
      BodyDir = data[4];
      HeadDir =data[5];
   
   System.out.println( strafter[i+1]+" "+strafter[i+2]+"  距离我的 Distance 是 "+Distance+"  Direction是"+Direction+"  DistChng是"+ DistChng+"  DirChng是"+DirChng);   
   
         }
  
         public void goal(String []strafter,int i){
    
    int x=i+3;
    double []data = new double[2];
   for(int y=0;y<2;x++,y++)
      {
      data[y]=Double.parseDouble(strafter[x]);
      } 
      Distance=data[0];
      Direction=data[1];
   
   System.out.print( "goal "+strafter[i+1]+ "  距离我的 Distance 是 "+Distance+"  Direction是"+Direction);
   
     }
     public void hear(String[]strafter){
    int i=0;
    int x;
    for(;i<strafter.length;i++)
    {
     if(strafter[i].equals("hear"))
      break;
    }
    x=i+1;
     String time = strafter[x];
    System.out.print("在"+time+"周期"+"  hear ");
    
   }
   
   public void sender(String[]strafter,int x){
    
   int i=0;
    for(;i<strafter.length;i++)
    {
     if(strafter[i].equals("passto"))
      break;
    }
   
  
    System.out.print("从"+strafter[x+2]+"方向听到了"+"passto("+strafter[i+1]+","+strafter[i+2]+")"); 
    
   }
public static void main(String[] args) {    
   robot Robot = new  robot();
   Scanner in = new Scanner(System.in);       
   String str=in.nextLine();      
   String strafter2=str.replaceAll("\\(|\\)", "\\,"); 
  String[] strafter=strafter2.split("\\s+|\\,"); 
  

for(int y=0;y<strafter.length;y++)
{
if(strafter[y].equals("hear")){
Robot.hear(strafter);
Robot.sender(strafter,y);
System.out.println("");
}
else if(strafter[y].equals("see")){
    Robot.see(strafter,y);}
else if(strafter[y].equals("ball")){
    Robot.ball(strafter,y);}
else if(strafter[y].equals("player")){
 Robot.Player(strafter,y);}
else if(strafter[y].equals("goal")){
Robot.goal(strafter,y);}

   }  
   }                    
   }
 }  























你可能感兴趣的:(java)